目录
编辑
一、Drools是什么?
二、Drools使用场景
三、Drool架构内容
3.1 总体架构
3.2 构成内容说明
3.2.1 Rules
3.2.2 Production memory
3.2.3 Facts
3.2.4 Working memory
3.2.5 Pattern matcher
3.2.6 Agenda
四、为什么要用规则引擎?
4.1 声明式编程
4.2 逻辑与数据分离
4.3 规则集中管理
4.4 可读性高
五、不同规则引擎的对比
六、Drools规则引擎原理分析
6.1 rete算法介绍
6.2 原理
6.2.1 正向推理(Forward-Chaining)
6.2.2 反向推理(Backward-Chaining)
一、Drools是什么?
规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
Drools 具有一个易于访问企业策略、易于调整以及易于管理的开源业务 规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验已编码的规则是否执行了所需的业务规则。其前身是 Codehaus 的一个开源项目叫 Drools,后被纳入 JBoss 门下,更名为 JBoss Rules,成为了 JBoss 应用服务器的规则引擎。
二、Drools使用场景
业务领域 | 示例 |
财务决策 | 贷款发放,征信系统 |
库存管理 | 及时的供应链路 |
票价计算 | 航空,传播,火车及其他公共汽车运输 |
生产采购系统 | 产品原材料采购管理 |
风控系统 | 风控规则计算 |
促销平台系统 | 满减,打折,加价购 |
三、Drool架构内容
3.1 总体架构
3.2 构成内容说明
3.2.1 Rules
我们自己定义的业务规则,比如我们自己写的规则文件。所有规则必须至少包含触发规则的条件和规则规定的操作。
3.2.2 Production memory
规则存储在 Drools 引擎中的位置。
3.2.3 Facts
输入或更改到 Drools 引擎中的数据,Drools 引擎匹配规则条件以执行适用规则。在规则中修改了Fact对象的值,真实的JavaBean的数据也会发生改变。 比如:当我们调用ksession.insert(对象),那么插入的这个对象就可以理解成Facts对象。
3.2.4 Working memory
facts 在 Drools 引擎中存储的位置。drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规
则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可。
3.2.5 Pattern matcher
匹配器,将Rule Base中所有的规则与Working memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入到Agenda中。
3.2.6 Agenda
议程,用于存放通过匹配器进行模式匹配后被激活的规则。
四、为什么要用规则引擎?
4.1 声明式编程
规则引擎允许您说“该怎么做”,而不是“怎么做”。基于该思想,使用规则可以使表达困难问题的解决方案变得容易,并且规则比代码容易阅读。
4.2 逻辑与数据分离
数据在域对象中,逻辑在规则中,随着将来的变化,逻辑可以更容易维护,可以将逻辑全部组织在一个或多个非常不同的规则文件中,而不是将逻辑分布在许多域对象或控制器中。
4.3 规则集中管理
通过使用规则,可以创建可执行的规则库,并将这些规则集中编写和管理。如存放到某个目录或者数据库。
4.4 可读性高
通过创建对象模型以及(可选)为问题域建模的领域特定语言,可以设置自己编写与自然语言非常接近的规则。他们以自己的语言表达自己的逻辑,这可能是非技术领域的专家可以理解的,并且所有程序都经过检查,而技术知识则隐藏在常规代码中。
五、不同规则引擎的对比
除了Drools以外,还有一些其他规则引擎,包括:
1)CLIPS
2)Jess
3)OpenL Tablets
4)JBoss Rules/Drools Fusion
5)IBM Operational Decision Manager (ODM)
6)Azul Zulu Rule Engine
Feature | Drools | CLIPS | Jess | OpenL Tablets | JBoss Rules/Drools Fusion | IBM ODM | Azul Zulu Rule Engine |
开源/商业 | 商业 | 开源 | 商业 | 商业 | 商业 | 商业 | 商业 |
语言支持 | Java | CLIPS | Jess | Java | Java | Java | Java |
可视化界面 | 支持 | 不支持 | 不支持 | 不支持 | 支持 | 支持 | 支持 |
规则表达式语言 | DSL/FLR | CLIPS | Jess | Excel | DSL/FLR | ODM | PegaRules PRPC |
事实模型 | POJO | 原生类型 | POJO | POJO | POJO | XOM | POJO |
性能 | 中等 | 较高 | 较高 | 中等 | 中等 | 高 | 中等 |
从上表可以看出,Drools和其他规则引擎之间存在一些差异,例如语言支持、可视化界面、规则表达式语言、事实模型等。因此,选择规则引擎时,需要考虑自己的业务需求和技术能力,以及引擎的性能、易用性、可扩展性等因素。此外,也需要考虑预算和开源/商业授权模型等因素。
六、Drools规则引擎原理分析
6.1 rete算法介绍
Rete 算法最初是由卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法 , 该算法提供了专家系统的一个高效实现。自 Rete 算法提出以后 , 它就被用到一些大型的规则系统中 , 像 ILog、Jess、JBoss Rules 等都是基于 RETE 算法的规则引擎 。
Rete 在拉丁语中译为”net”,即网络。Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较的高效方法,通过网络筛选的方法找出所有匹配各个模式的对象和规则。
其核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。Rete 算法可以被分为两个部分:规则编译和规则执行 。当 Rete 算法进行事实的断言时,包含三个阶段:匹配、选择和执行,称做 match-select-act cycle。
6.2 原理
在 AI 领域,产生式系统是一个很重要的理论,产生式推理分为正向推理和逆向推理产生式,其规则的一般形式是:IF 条件 THEN 操作。rete 算法是实现产生式系统中正向推理的高效模式匹配算法,通过形成一个 rete 网络进行模式匹配,利用基于规则的系统的时间冗余性和结构相似性特征 ,提高系统模式匹配效率。
6.2.1 正向推理(Forward-Chaining)
正向推理也叫演绎法,由事实驱动,从一个初始的事实出发,不断地从应用规则得出结论。首先在
候选队列中选择一条规则作为启用规则进行推理,记录其结论作为下一步推理的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。
6.2.2 反向推理(Backward-Chaining)
反向推理也叫归纳法,由目标驱动,首先提出某个假设,然后寻找支持该假设的证据,若所需的证
据都能找到,说明原假设是正确的,若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另作新的假设。
如果觉得对您有帮助,欢迎点赞+收藏+关注!