首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多智能体论证的简易Prolog实现

多智能体论证的简易Prolog实现
EN

Stack Overflow用户
提问于 2013-02-08 20:44:30
回答 2查看 745关注 0票数 2

逻辑编程新手(Prolog)。遇到一个简单的问题,但不知道如何用prolog编码。

问题就像你有几个论据:参数(A),参数( b) ...,和几个攻击关系,比如attack(a,b ),这意味着参数a攻击参数b,所以给定一个参数,我想知道它是否是一个有根据的参数。对于一个参数a来说,“接地”意味着如果b攻击a,那么存在另一个参数,比如c攻击b。如果没有参数攻击c,那么我们说a和c是接地的。

你能举例说明如何实现这个扎根/1计划来实现这一目标吗?

不确定我是否clear....But欢迎给出任何建议(或代码)!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-08 22:25:23

从你的解释中我所理解的是,当没有其他根深蒂固的论点攻击它时,一个论点就是有根据的。

您可以在prolog中直接定义一个遵循此规则的过程grounded/1

代码语言:javascript
复制
grounded(A):-
  argument(A),    % A is an argument
  \+              % for which there does not exist
  (
    attack(B, A), % an attacker
    grounded(B)   % which is grounded
  ).

由OP在评论后编辑:如果你必须处理周期,那么你可能需要保留一个访问过的“攻击”列表,没有禁止的周期:

代码语言:javascript
复制
grounded(A):-
  grounded(A, []).


grounded(A, L):-
  argument(A),
  \+
  (
    attack(B, A),
    \+ member(B, L),  % Here we forbid cycles
    grounded(B, [A|L])  % We add the current argument to the list of forbidden arguments
  ).
票数 3
EN

Stack Overflow用户

发布于 2017-05-11 11:18:54

我不知道如何用Prolog编写,但是根植的语义是从没有被攻击的参数开始计算的,给定了参数树。

(希望它能指导@gusbro找到这个帖子的正确答案。)

为了解释它是如何计算的,我将介绍以下函数F(x) = {x defends y},其中:

  • 如果一个防御参数受到其他延迟参数的攻击,则被攻击的参数将从集合中删除。
  • 依此类推,直到该函数无法使用更多参数进行更多扩展为止,该函数已达到F.

中的最小固定点

(示例1)给定以下论证图,接地扩展为Eg = {c,e,f,a}。

因此,第一个函数以:

现在让我们考虑带循环的接地扩展的计算。

(示例2)在给定的论证图中,e为b和d辩护,但b受到d的攻击,则它不能包含在扎根的语义中。从这一点开始,我们得到了一个无冲突的集合{e,d}。从{e,d}我们可以应用函数F({e,d}) = {e,d,a},其中d从b保护a。再次应用函数F({e,d,a}) = {e,d,a},表明{e,d,a}是F中的最小不动点。因此,{e,d,a}是扎根扩张。

(示例3)在下面的论证树中,接地扩展

,因为没有不被攻击的论点。否则,如果参数e没有攻击自己,那么固定的扩展应该是

,事实并非如此。

在最后一个示例中,循环上升到不同的首选扩展,在这些扩展中,您可以使用Martin Caminada在其他地方定义的等效参数标记概念作为支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14772892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档