关于外展逻辑编程与答案集编程的讨论

时间:2016-12-22 01:55:08

标签: prolog logic-programming functional-logic-progr

我希望澄清有关外展逻辑编程与答案集编程的一些内容。

我和一些同学正在创造一个游戏。在这个游戏中有“英雄”(特殊的npcs)。英雄有目标和行为。

(所有这些都是故事驱动的) 我希望英雄对玩家或其他英雄的行为作出反应然后决定从那里做什么。

一位老师告诉我们一篇名为“角色模型:迈向故事生成的戏剧角色的正式模型”的论文,它解释了诱导性的逻辑编程。通过我的研究,我找到了答案集编程。

问题: ALP范式和ASP范式之间有区别吗? 为了我的目的,一个比其他更好吗? 还有其他选择吗?

3 个答案:

答案 0 :(得分:3)

你真的问了三个问题。我没有资格回答他们中的任何一个,但无论如何我都会对它进行攻击。

  
      
  1. ALP范例和ASP范例之间是否存在差异?
  2.   

是。 ASP是一种范例,在这种范例中,您的搜索问题可以转换为可以移交给不同解算器的模型。 The paper you reference在第4.1节中说,他们遵循ASP范式并同时使用演绎和诱导推理。所以你可以看到,在一个更大的ASP流程中,外展和演绎作为战术解决者。

根据我在维基百科上读到的内容,这是一个很好的方法,因为诱导推理是提供解释而不是逻辑结果。我可以看到你在故事的产生中会如何; "玛丽讨厌苏,因此玛丽杀了苏"是一个演绎,但是玛丽讨厌苏,因为苏跑过她的狗"基于我粗略的阅读,看起来更像是绑架。你希望两者都能充实故事,否则它会变得非常沉闷。

  
      
  1. 为了我的目的,还有一个比其他更好吗?
  2.   

你所说的关于你的目的的是你正在制作游戏。我不是游戏开发者,但我相信确保你在典型的游戏中不会使用这样的东西。游戏AI是它自己的整个领域。如果在重大比赛中使用任何这些东西,我会感到震惊。

也就是说,RoleModel显示你可以做到这一点,它使用两者,ASP控制一个ALP / DLP组合过程。在我看来,这两者是相当可分的,因为人们可以使用另一个,我猜他们并没有严格反对彼此。如果它适用于RoleModel游戏,真正的问题是不是可以做到,这是一个好主意,但它是否适合你想要完成的事情?如果你正试图建立一个动作射击游戏,我会打赌其他更简单的方法会更好地发挥作用;如果您正在尝试构建一个丰富的RPG,也许就可以了。

  
      
  1. 还有其他选择吗?
  2.   

可能。我会调查人工智能游戏。优先级是不同的,我希望他们的文学在完全不同的地方开始,并在完全不同的方向,但我可能是错的。

答案 1 :(得分:0)

任何支持假设推理的逻辑程序都可以支持ALP。由于ASP支持假设推理,因此它也可以支持ALP。假设推理是一种暂时假设事实的搜索。

使用标准ISO核心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

以上解决方案使用反向链接。也可以提供前向链接解决方案,以及更接近ASP选择运算符的解决方案。 ASP中的选择运算符将执行假设的变体,我们仅将(;)/ 2用作choice operator

:- use_module(library(minimal/delta)).

:- multifile abducible/0.
:- dynamic abducible/0, amount/2, feed/1.
:- forward feed/2.

post(amount(glucose,low));post(aamount(glucose,medium)) <= posted(abducible).
post(amount(lactose,medium));post(amount(lactose,hi)) <= posted(abducible).

post(feed(lactose)) <= posted(amount(glucose,low)), posted(amount(lactose,hi)).
post(feed(lactose)) <= posted(amount(glucose,medium)), posted(amount(lactose,medium)).

可能的查询如下运行:

?- post(abducible), feed(lactose), listing(amount/2).

amount(glucose, low).
amount(lactose, hi).
Yes ;

amount(glucose, medium).
amount(lactose, medium).
Yes ;

No

答案 2 :(得分:0)

FYI:如上所述,一些用于执行归纳和归纳逻辑编程的系统使用ASP系统。一个免费的开源示例是XHAIL https://github.com/stefano-bragaglia/XHAIL

还有一篇描述此版本的论文:

Bragaglia S.,Ray O.(2015)大型生物网络中的非单调学习。在:戴维斯J.,拉蒙J.(eds)归纳逻辑编程。 《计算机科学讲义》,第9046卷。占婆岛施普林格

可以说,《福尔摩斯探案记》实际上是因为演绎推理而不是演绎推理而闻名...所以我认为使用ALP的侦探游戏存在一些有趣的领域。 :)。