Prolog 回溯 VS Rete 回溯

标签 prolog backtracking rule-engine rete

在我的类里面,我学习了 Prolog 回溯算法和 Rete forprop 算法,但我也被告知 Rete 可用于进行反向传播。

这是如何运作的?它在哪些方面与 Prolog 回溯相似/不同?

例如,这是我得到的练习之一:

(R1) 24fingers and antennas => origin(mars)
(R2) shy and 5feet => origin(mars)
(R3) shy and 4arms => origin(venus)
(R4) looksDownWhenTalking => shy
(R5) fleesWhenSeen => shy

目标是根据以下事实找到外星人的起源:
(F1) fleesWhenSeen
(F2) 4arms

在 Prolog 中,我们将通过模式匹配目标 origin(X) 来解决它。违反 RHS 的规则。该规则与 R1、R2 和 R3 匹配,因此将触发第一个 R1,我们将尝试解决子目标 24fingers and antennas这会失败。

然后我们会回溯到开始并触发R2,最终会失败,最后回溯并触发R3,它会成功。

所以X最终绑定(bind)到 venus查询成功,算法结束。

现在,我们将如何使用 rete 反向传播算法解决相同的练习?

我天真地假设我们会使用一个子目标列表,从 origin(X) 开始。 , 开始触发 RHS 与子目标匹配的规则。

但是我不清楚当某些子目标失败时,Rete 算法将如何处理回溯,或者一旦解决了某个目标子集,它如何知道它已经成功。

最佳答案

在前向链接系统中没有支持后向链接的标准实现。混合工具使用不同的技术实现了此功能。这里描述了一种技术,数据驱动的反向链接:http://haleyai.com/wordpress/2008/03/11/goals-and-backward-chaining-using-the-rete-algorithm/ .一些附加信息:JESS vs DROOLS : Backward chaining
http://herzberg.ca.sandia.gov/docs/70/rules.html .

关于Prolog 回溯 VS Rete 回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48486482/

相关文章:

c# - 如何设计规则引擎?

prolog - SWI-Prolog - 断言失败

序言 我必须编写一个程序来计算魔法矩阵排列

list - Prolog 创建列表

java - 在网格中寻找最优路径

python - python 回溯类型错误

prolog - 退出 SICStus - 命令行

java - 数组索引越界?如何?

java - 超能力规则语言: return datafield of class from pattern

c# - 无法访问工作流基础规则集编辑器中的枚举