2011-05-23 257 views
5

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

我们已经给出了具有陈述性的角形知识库。

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

我的理解:

到目前为止,我会读每一个句子(喇叭型)和创建它的对象我已经想好。每个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"); 

上午我就对不起正轨,我对这些类型的复杂编程的小白和按我的预测,我可能需要大量的优化来在非常高的层面上运行这些推理。但似乎我需要一个人很好的理解,谢谢你,如果你们中的一些人可以帮助...

谢谢!

回答

6

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

除非你的目的是要学习如何编写一个Rete规则引擎,在这种情况下,我会撤回我的答案。我会去寻找Charles Forgy's论文。

+0

我认为这是一项功课。检查一个简单的Horn子句是否成立,确实不是特别困难。即使是一个HORNSAT也不应该太难以正确 - 但是之后我们需要知道究竟应该实施什么。 – Voo 2011-05-23 01:12:46

+0

非常感谢你,我已经扩展了我对这些技术的理解......但是,我可能不得不在更高级别上进行更多研究,所以Voo说我的作业必须更容易解决,但是我想如果我正在学习某些原因不要学习正确有效的方法,:)谢谢 – doNotCheckMyBlog 2011-05-23 03:10:57

+0

@Voo,是的,你是对的!如果我的上述给定的想法(问题)正确无误,那么实现起来相当容易。 :) 感谢帮助。 – doNotCheckMyBlog 2011-05-23 03:11:56

0

那么还有什么可以帮助的是通过使用:

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

要简单得到var:String value = map.get(impliedBy)。

1

here如何获得向前的线性时间链接工作中的变量的数量(注意片断如何实施遍历议程中每个变量的条款)。它没有代码,但Hornsat真的不难编码。

1

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

两个正向&反向链可以被看作是不同的 策略来处理解决方案。而正向链接 对应于单位分辨率,反向链接将对应于输入分辨率 。

也可以构建可以包括 向后链接内部反向链接的系统,其控制方式为 。一个这样的系统是Jekejeke Minlog

一个可能的实现à马文·明斯基将 作为一个网络看HornClauses。 HornClauses 有一个头X和HornClauses,在身体 X将被连接。

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

现在霍恩子句的身体作为一种与门, 和由于不同的HornClauses可以有相同的头部 也有参与或门。现在尝试编程 ,沿着这些门传播真理。

再见