规则引擎
Linear
Rete
Treat
LeapsDrools 实现Rete和Leaps算法,Leaps 是经过试验证明的,尽管它还非常新。Drools 's Rate被为是Rete算法的一个面向对象的Java实现。市面上还有其他几种经过增强的Rete的商业Rete算法引擎,例如:RetePlus 和Rete III 。Rete III不像原始的Rete算法一样,它是完全商业化的产品,并不公开算法的重要细节。提出“为什么Drools不使用Rete III 算法”是非常无趣的。更多的详细内容请参阅<< Production Matching for Large Learning Systems (Rete/UL)">>(1995) by Robert B. Doorenbos。 将多个规则( Rules) 存储在Production Memory里,初始数据(facts的)接口引擎输入到Working Memory(工作内存区)。Working Memory里的 初始数据(Facts)是可以更改和替换的。一个系统里有一定数量的rules 和 facts,并且根据rules判断的出相同的结果,则可以说这些 rules是冲突的(执行规则冲突)。Agenda管理使用多次规则匹配规则冲突策略来确定执行命令。 Figure 1.1. ABasic Rete network 一个规则引擎系统的的接口引擎应该是声明式的,并且能够根据声明的事实来执行。它被称为Truth Maintence。执行的动作的逻辑关系是确定好的,当根据逻辑关系推论出action的状态值为真便执行动作。如果不符合条件则不执行动作。下面“真实的政客”就是Truth Maintence的一个例子。当政客存在时候,总是只有确保希望存在条件下才执行动作。
规则引擎有两种推理方式。Forward Chaining (推理)和Backward Chaining(归纳法)。实现两种算法的规则引擎称为混合型规则系统。理解两种方式操作上的不同是理解不同的规则引擎的优点。Forward chaing是数据驱动的,当把数据放入working memory 得到一个或多个执行结果。当有多个多个规则匹配时候,就用使用Agenda执行定义好的动作,直到全部执行完成。Drools 属于Forward Chaining 推理引擎。
Backward chaining 是根据假设目标来驱动的。开始后试图不断找到符合的结论,如果不能找到符合的规则时候,则设定下一个子假设来帮助当前的假设来找到符合的规则,这样重复不断查找,直到找完全部的结论或者没有子假设时候才停止。Backward Chaining 的规则引擎的例子是Prolog 。Drools将在下一个发行版加入 Backward Chaining。
Powered by: BlogJava Copyright © 哈迪尤