Prolog 关于溯因逻辑编程与答案集编程的讨论
我想澄清一些关于溯因逻辑编程和答案集编程的事情 我和一些同学正在制作一个游戏。在这个游戏中有“英雄”(特殊NPC)。英雄有目标和行为 (所有这些都是故事驱动的) 我希望英雄们对一个玩家或另一个英雄的行为做出什么反应,然后决定从那里做什么 一位老师告诉我们一篇题为“角色模型:为故事生成建立戏剧角色的正式模型”的论文,它解释了溯因逻辑编程。通过我的研究,我发现答案集编程 问题: ALP范式和ASP范式之间有区别吗? 对我来说,一个比另一个好吗?Prolog 关于溯因逻辑编程与答案集编程的讨论,prolog,logic-programming,functional-logic-progr,Prolog,Logic Programming,Functional Logic Progr,我想澄清一些关于溯因逻辑编程和答案集编程的事情 我和一些同学正在制作一个游戏。在这个游戏中有“英雄”(特殊NPC)。英雄有目标和行为 (所有这些都是故事驱动的) 我希望英雄们对一个玩家或另一个英雄的行为做出什么反应,然后决定从那里做什么 一位老师告诉我们一篇题为“角色模型:为故事生成建立戏剧角色的正式模型”的论文,它解释了溯因逻辑编程。通过我的研究,我发现答案集编程 问题: ALP范式和ASP范式之间有区别吗? 对我来说,一个比另一个好吗? 还有别的选择吗?你真的问了三个问题。我没有资格回答其中
还有别的选择吗?你真的问了三个问题。我没有资格回答其中任何一个问题,但无论如何我都要尝试一下
可能吧。我会调查游戏的人工智能。优先级差异很大,我希望他们的文献从完全不同的地方开始,走向完全不同的方向,但我可能弄错了。任何支持假设推理的逻辑编程都可以支持ALP。因为ASP支持假设推理,所以它也可以支持ALP。假设推理是一种搜索,其中假设了暂时的事实 使用标准ISO core Prolog,我们可以通过以下代码模拟假设事实。代码留下了一个选择点,如果涉及切割,则无法正常工作,这就是为什么仍然需要专门的系统:
assumez(P) :- assertz(P).
assumez(P) :- retract(P), fail.
我们现在可以解决以下绑架问题:
abducible :- (assumez(amount(glucose,low));assumez(amount(glucose,medium))),
(assumez(amount(lactose,medium));assumez(amount(lactose,hi))).
feed(lactose) :- amount(glucose,low), amount(lactose,hi).
feed(lactose) :- amount(glucose,medium), amount(lactose,medium).
可能的查询运行方式如下:
?- abducible, feed(lactose), listing(amount/2).
amount(glucose, low).
amount(lactose, hi).
Yes;
amount(glucose, medium).
amount(lactose, medium).
Yes ;
No
?- post(abducible), feed(lactose), listing(amount/2).
amount(glucose, low).
amount(lactose, hi).
Yes ;
amount(glucose, medium).
amount(lactose, medium).
Yes ;
No
上述解决方案使用反向链接。还可以提供前向链接解决方案,以及更接近ASP choice操作符的解决方案。ASP中的choice运算符将执行假设变量,我们仅将(;)/2用作:
仅供参考:如前所述,一些用于执行归纳和溯因逻辑编程的系统使用ASP系统。一个免费的开源示例是XHAIL 还有一篇文章描述了这个版本: Bragaglia S.,Ray O.(2015)大型生物网络中的非单调学习。摘自:Davis J.,Ramon J.(编辑部)归纳逻辑编程。计算机科学课堂讲稿,第9046卷。湛斯普林格
可以说,夏洛克·福尔摩斯实际上以诱因推理而非演绎推理而闻名。。。因此,我认为使用ALP的侦探游戏有一些有趣的范围 有趣的问题(遗憾的是,目前我没有时间进一步研究这个问题)。我将其视为:诱因=“如何用真/假标记(仅限事实)诱因谓词,以便在添加到逻辑程序时,结果正确标记为真,同时保留某些不变量(特殊逻辑表达式)”。我想人们可以在这些问题上发布各种算法,从遗传算法到SAT解算器。但是ASP解算器也可以用较少的限制来实现这一点!他们有一个逻辑程序,包括不变量,并试图找到实现该程序的任何事实集。我觉得更一般。看起来我是在Jekeke Minlog拥有模块库(minimal/asp)之前写的答案。这将比只使用模块库(minimal/hypo)更有效。另见:
?- post(abducible), feed(lactose), listing(amount/2).
amount(glucose, low).
amount(lactose, hi).
Yes ;
amount(glucose, medium).
amount(lactose, medium).
Yes ;
No