4

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

我们已经获得了具有一组语句的喇叭形式的知识库。

我试图在互联网上搜索,但我找不到任何关于如何将这些人工智能概念实施到编码中的描述。

我的理解 :

到目前为止,我一直认为我会阅读每个句子(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");

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

谢谢!

4

4 回答 4

5

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

除非您的目的是学习如何编写 Rete 规则引擎,否则我将撤回我的答案。我会去找查尔斯·福吉的文件。

于 2011-05-23T01:10:07.410 回答
0

那么可能还有帮助的是使用:

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

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

于 2011-05-23T01:17:21.827 回答
0

在此处查找描述如何在变量数量中以线性时间进行前向链接工作(注意片段中的实现如何循环遍历议程中每个变量的子句)。它没有代码,但 Hornsat 确实并不难编写代码。

于 2012-05-02T17:55:18.933 回答
0

OPS5 等系统通常具有使用前向链接的推理组件。另一方面,Prolog 通常使用反向链接。

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

还可以构建可以以受控方式在前向链接中包含后向链接的系统。Jekejeke Minlog就是一个这样的系统。

Marvin Minsky 的一个可能实现是将 HornClauses 视为一个网络。头部有 X 的 HornClauses 和身体有 X 的 HornClauses 将被连接。

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

现在,一个 HornClause 的主体充当一种 AND 门,并且由于不同的 HornClause 可以具有相同的头部,因此还涉及一个 OR 门。现在尝试编写一些沿着这些门传播真理的东西。

再见

于 2013-08-12T18:36:12.413 回答