规则是什么
现实生活中,规则无处不在。法律、法规和各种制度均是;对于企业级应用来说,在 IT 技术领域,很多地方也应用了规则,比如路由表,防火墙策略,乃至角色权限控制(RBAC),或者 Web 框架中的 URL 匹配。不管是那种规则,都规定了一组确定的条件和此条件所产生的结果。
举一个例子:
IF
- 汽车是红色
- 车是运动型的
- 驾驶员是男性
- 驾驶员在 16-25 岁之间
THEN
- 保险费用增加 20%
从这个例子可以看出:
- 每条规则都是一组条件决定的一系列结果
- 一条规则可能与其他规则共同决定最终结果。比如例子中的规则只产生了增量,还需要与确定基数的规则共同作用才能决定最终的费率
- 可能存在条件互相交叉的规则,此时有必要规定规则的优先级
规则作为一种知识,其典型运用就是通过实际情况,根据给定的一组规则,得出结论。这个结论可能是某种静态的结果,也可能是需要进行的一组操作。这种 规则的运用过程叫做推理。如果由程序来处理推理过程,那么这个程序就叫做推理机/推理引擎。推理引擎根据知识表示的不同采取的控制策略也是不同的,常见的 类型包括基于神经网络、基于案例和基于规则的推理机。其中,基于规则的推理机易于理解、易于获取、易于管理,被广泛采用。这种推理引擎被称为“规则引 擎”。
规则引擎产生的背景
一个业务规则包含一组条件和在此条件下执行的操作.它们表示业务规则应用程序的一段业务逻辑。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。企业为适应市场的多变性,它的业务逻辑也必然是多变的。理想情况下,业务逻辑的改变应该能够实时的反映在企业信息系统中。但是,传统的方法往往会使这种反映出现滞后,进而可能使企业错过市场机遇。
引入业务规则技术的目的 -> 解放生产力
对系统的使用人员
- 把业务策略(规则)的创建、修改和维护的权利交给业务经理
- 提高业务灵活性
- 加强业务处理的透明度,业务规则可以被管理
- 减少对 IT 人员的依赖程度
- 避免将来升级的风险
对 IT 开发人员
- 简化系统架构,优化应用
- 提高系统的可维护性和维护成本
- 方便系统的整合
- 减少编写“硬代码”业务规则的成本和风险
传统 IT 项目实施与引入规则进行项目实施的比较
传统做法的缺点
在传统的 IT 项目实施中业务与 IT 间存在的“矛盾”
引入规则引擎之后的系统架构
矛盾场景
当业务规则总是在改变时。。。
引入规则引擎后
如何做到鱼和熊掌兼得?
- 规则更改不重启,即改即用
- 数据库访问可随意更改,即改即用
- 业务服务层可以随意更改,即改即用
- 开发人员不需要关心底层 API,他只需要懂 JSON(加快开发)
规则引擎
规则引擎起源于基于规则的专家系统(专家系统 CLIPS: 源于 1984 年 NASA 的人工智能项目,现已开源,由 C 编写。),而基于规则的专家系统又是专家系统的其中一个分支。专家系统属于人工智能的范畴,它模仿 人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。基于规则的专家系统(RBES)包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和 Inference Engine。它们的结构如下系统所示:
推理引擎组成
推理引擎(Inference Engine)包括三部分:模式匹配器(Pattern Matcher)、议程(Agenda)和执行引擎(Execution Engine)。推理引擎通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。
- 模式匹配器决定选择执行哪个规则,何时执行规则;
- 议程管理模式匹配器挑选出来的规则的执行次序;
- 执行引擎负责执行规则和其他动作。
推理方式
正向推理(Forward-Chaining)
反向推理(Backward-Chaining)
正向推理也叫演绎法,由事实驱动,从 一个初始的事实出发,不断地应用规则得出结论。首先在候选队列中选择一条规则作为启用规则进行推理,记录其结论作为下一步推理时的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。
反向推理也叫归纳法,由目标驱动,首先提出某个假设,然后寻找支持该假设的证据,若所需的证据都能找到,说明原假设是正确的;若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另做新的假设。将事实与规则进行匹配的算法。
归纳法得出的结论并不一定正确
常见的模式匹配算法有 RETE,LFA,TREAI,LEAPS。Rete 算法是目前效率最高的一个演绎法推理算法,许多规则引擎都是基于 Rete 算法来进行推理计算的。
推理步骤
- 将初始数据(fact)输入 Working Memory 。
- 使用 Pattern Matcher 比较规则库(rule base)中的规则(rule)和数据(fact)。
- 如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。
- 解决冲突,将激活的规则按顺序放入 Agenda。
- 使用执行引擎执行 Agenda 中的规则。重复步骤 2 至 5,直到执行完毕所有 Agenda 中的规则。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于