Prolog 关于溯因逻辑编程与答案集编程的讨论

Prolog 关于溯因逻辑编程与答案集编程的讨论,prolog,logic-programming,functional-logic-progr,Prolog,Logic Programming,Functional Logic Progr,我想澄清一些关于溯因逻辑编程和答案集编程的事情 我和一些同学正在制作一个游戏。在这个游戏中有“英雄”(特殊NPC)。英雄有目标和行为 (所有这些都是故事驱动的) 我希望英雄们对一个玩家或另一个英雄的行为做出什么反应,然后决定从那里做什么 一位老师告诉我们一篇题为“角色模型:为故事生成建立戏剧角色的正式模型”的论文,它解释了溯因逻辑编程。通过我的研究,我发现答案集编程 问题: ALP范式和ASP范式之间有区别吗? 对我来说,一个比另一个好吗? 还有别的选择吗?你真的问了三个问题。我没有资格回答其中

我想澄清一些关于溯因逻辑编程和答案集编程的事情

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

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

一位老师告诉我们一篇题为“角色模型:为故事生成建立戏剧角色的正式模型”的论文,它解释了溯因逻辑编程。通过我的研究,我发现答案集编程

问题: ALP范式和ASP范式之间有区别吗? 对我来说,一个比另一个好吗?
还有别的选择吗?

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

  • ALP范式和ASP范式之间有区别吗
  • 对。ASP是一个范例,在这个范例中,你的搜索问题被制作成一个模型,可以交给不同的解决者。在第4.1节中说,他们遵循ASP范式,同时使用演绎推理和溯因推理。因此,您可以看到,在一个更大的ASP进程中,溯因和演绎扮演着战术解决方案的角色

    根据我在维基百科上读到的内容,这是一个很好的方法,因为溯因推理是提供解释,而不是逻辑结果。我可以看出,在故事的生成过程中,你们是多么希望这样;“玛丽恨苏,所以玛丽杀了苏”是一个推论,但“玛丽恨苏,因为苏撞死了她的狗”更像是一个绑架,根据我的粗略解读。你们两个都想充实一个故事,否则它会变得相当乏味

  • 对我来说,一个比另一个好吗
  • 你所说的关于你的目标就是你在做一个游戏。我不是一个游戏开发人员,但我很有信心向您保证,在一个典型的游戏中不会使用类似的东西。游戏AI是它自己的整个领域。如果这些东西被用在大型游戏中,我会感到震惊

    这就是说,RoleModel显示了您可以做到这一点,并且它使用ASP控制一个组合的ALP/DLP过程。在我看来,这两者似乎是相当可分离的,既然一方可以使用另一方,我猜它们并不是严格对立的。如果它适用于RoleModel游戏,那么真正的问题不是它是否可以完成,它是否是一个好主意,但它是否适合您尝试完成的任务?如果你想打造一款动作射击游戏,我敢打赌,其他更简单的方法效果会更好;如果你正在尝试建立一个丰富的RPG,也许它会好的

  • 还有别的选择吗

  • 可能吧。我会调查游戏的人工智能。优先级差异很大,我希望他们的文献从完全不同的地方开始,走向完全不同的方向,但我可能弄错了。

    任何支持假设推理的逻辑编程都可以支持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