【发布时间】:2018-07-07 06:37:46
【问题描述】:
在我的课堂上,我学习了 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 在成功的查询中最终绑定到venus,算法结束。
现在,我们将如何使用 rete 反向传播算法解决相同的练习?
我天真地假设我们会使用以origin(X) 开头的子目标列表来开始触发 RHS 与子目标匹配的规则。
但我不清楚 Rete 算法在某些子目标失败时如何处理回溯,或者在解决某个目标子集后如何知道它已经成功。
【问题讨论】:
-
rete 算法是严格的前向链接。也许一些主要基于rete的引擎,也支持backward-chaining,但是使用的算法不能是rete算法。你能添加一些链接到声称使用rete和反向链接的资源吗?
-
@CoronA 这是在我的大学练习中,当我问我的老师如何使用类似 Prolog 的回溯来解决这些练习时,这只会让我更加困惑。如果您有信心使用 rete 回溯不是我满意的答案。
-
@Jsevillamol:我认为大多数基于 RETE 的系统都支持反向链接查询,但是这些查询不是用 RETE 算法处理的,而是其他的(SLD-Resolution as in Prolog, Semi- Naive-Bottom-Up-Evaluation 或 Magic-Sets-Evaluation,如演绎数据库)
-
@G_V:RETE-Algorithm 和 SLD-Resolution 都是演绎算法。 Backward-Chaining 和 Forward-Chaining 都是演绎的。归纳推理是超越 Rete 和 Prolog 的主题。通过归纳推理得出的所有事实都可能是错误的(演绎推理并非如此)。
-
@G_V:前向链接允许您从其他事实中得出事实。归纳推理允许您猜测事实。那是完全不同的。一条规则
frog => green意味着所有的青蛙都是绿色的。在这个世界上没有棕色的青蛙。对这条规则的归纳推理会提出给定的绿色物体可能(!)是一只青蛙。然而,在这个世界上可能还存在其他绿色的物体,并且不是青蛙的绿色物体与基于此规则的世界完全一致。
标签: prolog backtracking rule-engine rete