java中的前向链接和后向链接

时间:2011-05-23 00:32:16

标签: java algorithm artificial-intelligence inference reasoning

在java中为推理过程实现正向链接和反向链接的最佳方法是什么?

我们获得了Horn形式的知识库,其中包含一系列陈述。

我曾尝试在互联网上搜索,但我无法找到有关如何将这些人工智能概念应用于编码的任何描述。

我的理解:

到目前为止,我已经想到我将阅读每个句子(Horn-Form)并创建它的对象。每个Sentence类对象都有关系变量,当我要求Backward或Forward链的知识库时,它将检查这些对象的数组并构造我想要的链。

 public class Sentence{

    private String impliedBy;
    private String implementedVar;

    public Sentence(String sentence){
       String[] relation = sentence.split("=>");
       this.impliedBy = relation[0];
       this.implementedVar = relation[1];
    }
    ...
 }

通过说......

来打电话给上课
Sentence s = new Sentence("a&b=>c");

我是否正确对不起我是这些复杂编程的菜鸟,根据我的预测,我可能需要进行大量优化才能在非常高的水平上运行这些推理。但似乎有些人需要很好的理解,如果你们中的一些人可以提供帮助,谢谢你......

谢谢!

5 个答案:

答案 0 :(得分:6)

在我尝试为自己编写之前,我会使用DroolsJESS之类的规则引擎。

除非您的目的是学习如何编写Rete规则引擎,否则我将撤回我的答案。我去寻找Charles Forgy's篇论文。

答案 1 :(得分:2)

答案 2 :(得分:1)

查看here,了解如何在变量数量的线性时间内进行链接工作(请注意片段中的实现如何循环遍历议程中每个变量的子句)。它没有代码,但Hornsat真的不难编码。

答案 3 :(得分:1)

OPS5等系统通常都有一个推理组件 使用正向链接。另一方面通常是Prolog 使用反向链接。

向前和向前后向链接可以被视为不同的 处理决议的策略。而正向链接 对应于单位分辨率,反向链接将 对应于输入分辨率。

也可以构建可以包含的系统 在一个受控制的内向后链接内向链接 办法。其中一个系统是Jekejeke Minlog

Marvin Minsky的可能实施方式 将HornClauses看作一个网络。 HornClauses那个 有一个头部X和HornClauses,身体有一个X. 会有联系。

  A <- D, X      X <- G
          |      |
          +------+

现在HornClause的身体充当了一种AND门, 因为不同的HornClauses可以拥有相同的头部 还有一个OR门。现在尝试编程 在这些大门上传播真理的东西。

再见

答案 4 :(得分:0)

通过使用:

可能也会有所帮助

HashMap map = new HashMap(); map.put(impliedBy,impliedVar);

简单地获取var:String value = map.get(impliedBy)。