在我的类里面,我学习了 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/