Jse*_*mol 9 rule-engine prolog backtracking rete
在我的课上,我学习了Prolog回溯算法和Rete forprop算法,但我也被告知Rete可以用来做backprop.
这是如何运作的?它与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
Run Code Online (Sandbox Code Playgroud)
目标是通过以下事实找到外星人的起源:
(F1) fleesWhenSeen
(F2) 4arms
Run Code Online (Sandbox Code Playgroud)
在Prolog中,我们将通过模式匹配origin(X)规则的RHS 的目标来解决它.规则与R1,R2和R3匹配,因此首先会触发R1,我们会尝试解决24fingers and antennas失败的子目标.
然后我们将回溯到开头并触发R2,最终将失败,最后回溯并触发R3,这成功.
因此X,venus在成功查询中结束绑定,算法结束.
现在,我们如何使用rete backprop算法解决相同的练习?
我天真地假设我们将使用一个子目标列表,从origin(X)开始,触发RHS与子目标匹配的规则.
但是,当一些子目标失败时,我不清楚Rete算法如何处理回溯,或者一旦它解决了某个目标子集,它将如何知道它已经成功.
没有用于支持前向链接系统中的后向链接的标准实现。混合工具使用不同的技术实现了此功能。这里描述了一种技术,即数据驱动的反向链接: http: //haleyai.com/wordpress/2008/03/11/goals-and-backward-chaining-using-the-rete-algorithm/。一些附加信息:JESS vs DROOLS:向后链接和 http://herzberg.ca.sandia.gov/docs/70/rules.html。