在我的课堂上,我学习了Prolog回溯算法和Rete前向传播算法,但也被告知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)
与规则的右侧进行模式匹配来解决它。该规则与R1、R2和R3匹配,因此首先会触发R1,并尝试解析子目标24fingers
和antennas
,但这将失败。然后我们会回溯到开始并触发R2,最终会失败,最后回溯并触发R3,这将成功。
因此,在成功查询中,
X
绑定到venus
,算法结束。
现在,我们如何使用rete backprop算法解决相同的练习?
我天真地认为,我们会使用一个子目标列表,从
origin(X)
开始,以触发其RHS与子目标匹配的规则。但是我不清楚当某些子目标失败时,Rete算法如何处理回溯,或者它如何知道一旦解决了某个子目标集合就已经成功。