项目中需要设计开发一个规则引擎服务,于是调研了业界常用的规则引擎。

常见的规则引擎如下:

  Ilog JRules 是最有名的商用BRMS;
  Drools 是最活跃的开源规则引擎;
  Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;

  Visual Rules(旗正规则引擎)国内商业规则引擎品牌,可以认为是ILOG的本土版本。

  Mandarax是一个规则引擎的纯Java实现。基于反向推理(归纳法)。

对比如下

1、四者都主要使用foreward-chaining的Rete引擎,按优先级匹配条件语句,实施规则语句。规则实施后会激发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete的算法保证了服从的最高。

(1). Rete 算法的特点:

a. Rete 算法是一种启发式算法,不同规则之间往往含有相同的模式,因此在 beta-network 中可以共享 BetaMemory 和 betanode。如果某个 betanode 被 N 条规则共享,则算法在此节点上效率会提高 N 倍。

b. Rete 算法由于采用 AlphaMemory 和 BetaMemory 来存储事实,当事实集合变化不大时,保存在 alpha 和 beta 节点中的状态不需要太多变化,避免了大量的重复计算,提高了匹配效率。

c. 从 Rete 网络可以看出,Rete 匹配速度与规则数目无关,这是因为事实只有满足本节点才会继续向下沿网络传递。

(2). Rete 算法的不足:

a. 事实的删除与事实的添加顺序相同, 除了要执行与事实添加相同的计算外, 还需要执行查找, 开销很高 。

b. RETE 算法使用了β存储区存储已计算的中间结果, 以牺牲空间换取时间, 从而加快系统的速度。然而β存储区根据规则的条件与事实的数目而成指数级增长, 所以当规则与事实很多时, 会耗尽系统资源。

(3)针对 Rete 算法的特点和不足,在应用或者开发基于 Rete 算法的规则引擎时,改进方向

a. 容易变化的规则尽量置后匹配,可以减少规则的变化带来规则库的变化。

b. 约束性较为通用或较强的模式尽量置前匹配,可以避免不必要的匹配。

c. 针对 Rete 算法内存开销大和事实增加删除影响效率的问题,技术上应该在 alpha 内存和 beata 内存中,只存储指向内存的指针,并对指针建里索引(可用 hash 表或者非平衡二叉树)。

d. Rete 算法 JoinNode 可以扩展为 AndJoinNode 和 OrJoinNode,两种节点可以再进行组合 。

2、Ilog JRules  和 Visual Rules  是商业版

3、Drools vs ILog vs Jess vs Mandarax

最新文章

  1. Hadoop技巧系列索引
  2. 具备 jQuery 经验的人如何学习AngularJS(附:学习路径)
  3. 关于网络-get/post
  4. STM32 Cube固件库编程之新建工程
  5. java异常处理机制
  6. 161017、SQL必备知识点
  7. GetMemory
  8. Oracle 12c创建用户时出现“ORA-65096: invalid common user or role name”的错误
  9. SQL,学习基础2
  10. 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
  11. React Native学习(七)—— FlatList实现横向滑动列表效果
  12. scrapy爬取小说盗墓笔记
  13. 《ASP.NET MVC 5 高级编程》学习笔记
  14. thinkphp v5.1 开发笔记
  15. 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)
  16. 【AtCoder】ARC071
  17. 渲染函数render和函数式组件
  18. iptables nat 外网nat到内网在只限制外网访问的单一ip地址
  19. lumen 使用 laravel-cors 的时候, 使用 dd 函数的解决方法
  20. windows平台的游戏运行库

热门文章

  1. c语言小项目-使用mysql数据库的图书管理系统
  2. [ZJOI2008]杀蚂蚁
  3. web测试--登录界面怎么测?
  4. 联想 Z5 Pro(L78031)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖ZUI 10.0.355
  5. hashtable的用法
  6. apache自带的ab压力测试工具
  7. Java学习4_一些基础4_输入输出_16.5.7
  8. 音视频】5.ffmpeg命令分类与使用
  9. 梦想CAD控件关于比较问题
  10. 弹性分布式数据集(RDD)