论文部分内容阅读
drools规则引擎是一款开源的规则引擎项目,它支持jsr94规范,用面向对象方法实现了Rete模式匹配算法,Rete算法是一个的高效的模式匹配算法,这是经过实践证明的,但是这种高效是以消耗大量内存为代价的,即Rete算法记录了所有匹配的中间结果,也就是创建了所有断言的所有元组,将所有的元组保留到缓存中,每声明/撤销/修改一个工作内存中的事实对象时,都要对相关联的元组进行更新和传播,这会对drools规则引擎在性能上产生负的影响。本论文针对Rete算法的这一不足,将处理事实对象的过程采用Leaps算法进行改进,Leaps算法的优点就是不会创建所有断言的元组,它采取了一种折衷的方案,规则引擎在匹对简单的条件约束时不会占用太多资源,所以不会创建元组,即仅仅在必要的时候才创建元组,也就是仅仅存在not和exist条件时才创建元组,缓存匹配的中间结果,当规则引擎操作工作内存中的事实对象时,维护并传播这些元组,这就是Lazy条件评估策略。这样,从理论上是可以提高drools规则引擎的模式匹配算法的效率,并降低内存使用。本设计首先比较Rete算法和Leaps算法的算法模型,然后分析Rete算法的不足和Leaps算法的折衷方案,最后给出Leaps算法的一个设计实现并给出证明。目前应用rete算法的产品比较多,例如CLIPS,Jess,Eclipse和OPS5等,如果leaps算法在优化Rete算法中取得成功,那么将对众多应用Rete算法的产品产生重大影响。