3

我希望澄清关于溯因逻辑编程与答案集编程的一些事情。

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

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

一位老师告诉我们一篇名为“RoleModel: Towards a Formal Model of Dramatic Roles for Story Generation”的论文,它解释了溯因逻辑编程。通过我的研究,我发现了答案集编程。

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

4

3 回答 3

2

你真的问了三个问题。我没有资格回答其中任何一个,但无论如何我都会尝试一下。

  1. ALP 范式和 ASP 范式之间有区别吗?

是的。ASP 是一种范式,在该范式中,您的搜索问题被制作成可以交给不同求解器的模型。您引用的论文在第 4.1 节中说,它们遵循 ASP 范式并同时使用演绎推理和溯因推理。因此,您可以看到溯因和演绎在更大的 ASP 流程中充当战术求解器。

根据我在 Wikipedia 上阅读的内容,这是一种很好的方法,因为溯因推理是关于提供解释而不是逻辑结果。我可以看到您在故事生成中会如何喜欢它;“玛丽讨厌苏,因此玛丽杀了苏”是一个演绎,但根据我的粗略阅读,“玛丽讨厌苏,因为苏跑了她的狗”似乎更像是绑架。你会希望两者都充实一个故事,否则它会变得非常乏味。

  1. 就我的目的而言,一个比另一个更好吗?

关于你的目的,你所说的只是你在制作游戏。我不是游戏开发者,但我相当有信心向您保证,在典型的游戏中不会使用这样的东西。游戏 AI 是它自己的整个领域。如果在大型游戏中使用这些东西,我会感到震惊。

也就是说,RoleModel 表明您可以做到这一点,并且它同时使用这两种方法,ASP 控制组合的 ALP/DLP 流程。在我看来,这两者很可能是完全可分离的,而且由于一个可以使用另一个,我猜他们并不严格反对对方。如果它适用于 RoleModel 游戏,真正的问题不是它是否可以完成,这是一个好主意,但它是否适合你想要完成的任务?如果您正在尝试构建动作射击游戏,我敢打赌其他更简单的方法会更好。如果你正在尝试构建一个丰富的 RPG,也许它会没问题。

  1. 还有其他选择吗?

大概。我会研究游戏的人工智能。优先级足够不同,以至于我希望他们的文学作品从完全不同的地方开始,并朝着完全不同的方向发展,但我可能弄错了。

于 2016-12-23T05:01:40.820 回答
1

任何支持假设推理的逻辑编程都可以支持 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 作为选择运算符

:- 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
于 2018-10-23T13:08:19.877 回答
1

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

还有一篇论文描述了这个版本:

Bragaglia S., Ray O. (2015) 大型生物网络中的非单调学习。在:Davis J.、Ramon J. (eds) 归纳逻辑编程。计算机科学讲义,第 9046 卷。Springer, Cham

可以说,福尔摩斯实际上以溯因推理而不是演绎推理而闻名……所以我认为使用 ALP 的侦探游戏有一些有趣的范围。:)。

于 2018-10-23T15:30:03.330 回答