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

问题描述 投票:0回答:5

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

我们已经获得了喇叭形式的知识库,其中有一组陈述。

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

我的理解:

到目前为止我想我会阅读每个句子(Horn-Form)并创建它的一个对象。每个句子类对象都将具有关系变量,当我向知识库询问后向或前向链时,它将检查这些对象的数组并构造我想要的链。

 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");

我是否走在正确的轨道上,抱歉,我对这种复杂的编程很菜鸟,根据我的预测,我可能需要大量优化才能在非常高的水平上运行这些推理。但似乎我需要有人的充分理解,谢谢你们,如果你们中的一些人能帮忙的话……

谢谢!

java algorithm artificial-intelligence inference reasoning
5个回答
5
投票

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

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


0
投票

嗯,也可能有帮助的是使用:

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

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


0
投票

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


0
投票

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

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

还可以构建包含以下内容的系统: 受控中的前向链接内的后向链接 方式。其中一个系统是Jekejeke Minlog

马文·明斯基(Marvin Minsky)的可能实现是 将 HornClauses 视为一个网络。霍恩条款 有头部 X 和角子句,主体有 X 将连接。

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

现在 HornClause 的主体充当一种 AND 门, 并且由于不同的 HornClause 可以有相同的中心词 还涉及一个或门。现在尝试编程 沿着这些大门传播真理的东西。

再见


0
投票

以下是可能对您有所帮助的前向链接算法。

函数 FOL-FC-ASK(KB,α) 返回替换或 false 输入:KB、知识库、一组 if 一阶定子句 α,查询,原子句子

虽然确实如此 new ← {} // 每次迭代推断的新句子集 对于 KB 中的每条规则执行 (p1 ∧...∧ pn ⟹ q) ← 标准化 - 变量(规则) 对于每个 θ,使得 SUBST (θ,p1 ∧...∧ pn) = SUBST(θ,p'1 ∧ ... ∧ p'n) 对于某些 p'1,...,p'n KB q' ← SUBST(θ,q) 如果 q' 与 KB 或新中已有的某些句子不统一那么 将 q' 添加到新的 ∅ ← 统一 (q',α) 如果 ∅ 没有失败则返回 ∅ 如果 new = {} 则返回 false 添加新内容到知识库

点击这个网站。这里对前向链接的解释更好了。

© www.soinside.com 2019 - 2024. All rights reserved.