Java 规则引擎学习总结

本贴最后更新于 2298 天前,其中的信息可能已经天翻地覆

规则是什么

现实生活中,规则无处不在。法律、法规和各种制度均是;对于企业级应用来说,在 IT 技术领域,很多地方也应用了规则,比如路由表,防火墙策略,乃至角色权限控制(RBAC),或者 Web 框架中的 URL 匹配。不管是那种规则,都规定了一组确定的条件和此条件所产生的结果。

举一个例子:

IF

  • 汽车是红色
  • 车是运动型的
  • 驾驶员是男性
  • 驾驶员在 16-25 岁之间

THEN

  • 保险费用增加 20%

从这个例子可以看出:

  1. 每条规则都是一组条件决定的一系列结果
  2. 一条规则可能与其他规则共同决定最终结果。比如例子中的规则只产生了增量,还需要与确定基数的规则共同作用才能决定最终的费率
  3. 可能存在条件互相交叉的规则,此时有必要规定规则的优先级

规则作为一种知识,其典型运用就是通过实际情况,根据给定的一组规则,得出结论。这个结论可能是某种静态的结果,也可能是需要进行的一组操作。这种 规则的运用过程叫做推理。如果由程序来处理推理过程,那么这个程序就叫做推理机/推理引擎。推理引擎根据知识表示的不同采取的控制策略也是不同的,常见的 类型包括基于神经网络、基于案例和基于规则的推理机。其中,基于规则的推理机易于理解、易于获取、易于管理,被广泛采用。这种推理引擎被称为“规则引 擎”。

规则引擎产生的背景

一个业务规则包含一组条件和在此条件下执行的操作.它们表示业务规则应用程序的一段业务逻辑。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。企业为适应市场的多变性,它的业务逻辑也必然是多变的。理想情况下,业务逻辑的改变应该能够实时的反映在企业信息系统中。但是,传统的方法往往会使这种反映出现滞后,进而可能使企业错过市场机遇。

引入业务规则技术的目的 -> 解放生产力

对系统的使用人员

  • 把业务策略(规则)的创建、修改和维护的权利交给业务经理
  • 提高业务灵活性
  • 加强业务处理的透明度,业务规则可以被管理
  • 减少对 IT 人员的依赖程度
  • 避免将来升级的风险

对 IT 开发人员

  • 简化系统架构,优化应用
  • 提高系统的可维护性和维护成本
  • 方便系统的整合
  • 减少编写“硬代码”业务规则的成本和风险

传统 IT 项目实施与引入规则进行项目实施的比较

8d824eeb876d4b4d9e99ab8fb99ab24a-20161017102042322.png

传统做法的缺点

eb18baecbc2949c384a46a199e1da27d-20161017131657809.png

在传统的 IT 项目实施中业务与 IT 间存在的“矛盾”

84a4e824d55a42aca9311dbd0f20e082-20161017102337095.png

2ac856c613694447834b21e365340efa-20161017102344314.png

引入规则引擎之后的系统架构

a4e569d9457b41ed91d04dc81af121fa-20161017102415127.png

947d877586e64f25b26a6ce6dc9d4f02-20161017102448640.png

矛盾场景

当业务规则总是在改变时。。。

d7261f877f8d4c6aba1c2f348c8c6098-20161017104430574.png

引入规则引擎后

8646de4536db4e60b5427bebb096adc1-20161017104457309.png

如何做到鱼和熊掌兼得?

6647edfb340e49b8bf16262064cd0e58-20161017104601028.png

  • 规则更改不重启,即改即用
  • 数据库访问可随意更改,即改即用
  • 业务服务层可以随意更改,即改即用
  • 开发人员不需要关心底层 API,他只需要懂 JSON(加快开发)

规则引擎

规则引擎起源于基于规则的专家系统(专家系统 CLIPS: 源于 1984 年 NASA 的人工智能项目,现已开源,由 C 编写。),而基于规则的专家系统又是专家系统的其中一个分支。专家系统属于人工智能的范畴,它模仿 人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。基于规则的专家系统(RBES)包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和 Inference Engine。它们的结构如下系统所示:
1d458ccf9afa41caafece6d84f78f16b-645085201701081536253622075637560.jpg

推理引擎组成

推理引擎(Inference Engine)包括三部分:模式匹配器(Pattern Matcher)、议程(Agenda)和执行引擎(Execution Engine)。推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。

  1. 模式匹配器决定选择执行哪个规则,何时执行规则;
  2. 议程管理模式匹配器挑选出来的规则的执行次序;
  3. 执行引擎负责执行规则和其他动作。

推理方式

正向推理(Forward-Chaining)
反向推理(Backward-Chaining)

正向推理也叫演绎法,由事实驱动,从 一个初始的事实出发,不断地应用规则得出结论。首先在候选队列中选择一条规则作为启用规则进行推理,记录其结论作为下一步推理时的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。

8fe9458322314a8984cd1974ec38a186-14d41365c1d8343fcac42872.jpgcustom660.jpg

反向推理也叫归纳法,由目标驱动,首先提出某个假设,然后寻找支持该假设的证据,若所需的证据都能找到,说明原假设是正确的;若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另做新的假设。将事实与规则进行匹配的算法。

b54933cf0aa3420cbe2a9cfccf900a08-14d41365c547993fc9aa6406.jpgcustom660.jpg

归纳法得出的结论并不一定正确

0271f4a7eb164ac995e1d72496f88df4-14d413665447f83fc9aac3f7.jpgcustom660.jpg

常见的模式匹配算法有 RETE,LFA,TREAI,LEAPS。Rete 算法是目前效率最高的一个演绎法推理算法,许多规则引擎都是基于 Rete 算法来进行推理计算的。

推理步骤

  1. 将初始数据(fact)输入 Working Memory 。
  2. 使用 Pattern Matcher 比较规则库(rule base)中的规则(rule)和数据(fact)。
  3. 如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。
  4. 解决冲突,将激活的规则按顺序放入 Agenda。
  5. 使用执行引擎执行 Agenda 中的规则。重复步骤 2 至 5,直到执行完毕所有 Agenda 中的规则。

Drools 规则引擎框架 Demo

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...