Rete算法是符合产生式规则系统的模式匹配算法。开发该算法是为了有效地将规则或模式应用于知识库中的对象。它根据存储数据及事实来确定应触发哪些系统规则。
Rete算法如何实现
Rete网络是Rete算法的核心。Rete网络由节点组成,每个节点都包含一个满足相关条件的对象列表。Rete网络是在编译规则项目时构建的,仅在启动该服务时构建一次,然后在所有调用中共享。
判别树是Rete网络的第一部分,它从与类关联的Alpha节点开始。给定类的所有实例都将列在给定的Alpha节点中。通过将条件附加到Alpha节点或另一个父节点的单个节点来进行区分。
如何创建Rete网络
在没有Rete算法的情况下,传统方法是对规则的IF-THEN-ELSE语句进行排序和嵌套,以便测试评估。而使用Rete网络它类似于以图形形式或更可能以直接代码形式创建尽可能精简的决策树。
什么是Rete树
Rete算法以树状结构组织数据。树中的每个节点代表一个测试,该测试将针对从内存中添加或删除的数据执行。每个节点将有一个或两个输入,可能还会有很多输出。
Rete树中的路径以某种确定的方式遍历,当一条新数据进入Rete树时,它会通过Rete树进行过滤,直到到达终端节点。如果到达终端节点,这意味着将创建一个新的激活记录,其中包含规则为真的所有数据点。如果这些数据点能尽可能明确,Rete系统中的规则就最有效。这意味着您应该编写规则来查找给定数据中非常详细的项目。
Rete算法替代方案
Non-Rete算法(NRE)是Rete算法的替代方案,它比Rete算法消耗更少的内存。对于许多业务规则用例,它还会提高性能。NRE算法的核心是一种新的规则条件评估方法。
以下是有关Non-Rete算法的一些要点:
- 更简单的内部规则表示。
- 为规则测试、规则操作和用户定义的函数生成的字节码。
- 更高效的修改操作。
- 在包含规则集位于堆栈顶部之前,不会评估规则条件。初始评估后,根据需要对事实操作进行重新评估。
- 当规则集在规则执行期间仅出现在规则集堆栈上一次时,能够避免不必要的重新评估。