【java规则引擎】之规则引擎解释

转载:http://www.open-open.com/lib/view/open1417528754230.html

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

举一个例子:

IF

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

保险费用增加20%

从这个例子可以看出:

每条规则都是一组条件决定的一系列结果
一条规则可能与其他规则共同决定最终结果。比如例子中的规则只产生了增量,还需要与确定基数的规则共同作用才能决定最终的费率
可能存在条件互相交叉的规则,此时有必要规定规则的优先级
规则作为一种知识,其典型运用就是通过实际情况,根据给定的一组规则,得出结论。这个结论可能是某种静态的结果,也可能是需要进行的一组操作。这种 规则的运用过程叫做推理。如果由程序来处理推理过程,那么这个程序就叫做推理机/推理引擎。推理引擎根据知识表示的不同采取的控制策略也是不同的,常见的 类型包括基于神经网络、基于案例和基于规则的推理机。其中,基于规则的推理机易于理解、易于获取、易于管理,被广泛采用。这种推理引擎被称为“规则引 擎”。

规则引擎起源于基于规则的专家系统(专家系统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中的规则。
规则引擎的作用:

规则外部化,即有利于规则知识的复用,也可避免改变规则时带来的代码变更问题
由规则引擎使用某种算法进行推理过程,不需要编写复杂晦涩的逻辑判断代码
开发人员的不需要过多关注逻辑判断,可以专注于逻辑处理

RETE算法

Rete在拉丁语中是“net”,有网络的意思。Rete算法由Carnegie Mellon University的Dr Charles L. Forgy设计发明,是一个用来实现产生式规则系统(production/inference)的高效模式匹配算法。

RETE算法可以分为两部分:规则编译(rule compilation)和运行时执行(runtime execution)。

规则编译===>是指根据规则集生成推理网络的过程。

运行时执行===>指将数据送入推理网络进行筛选的过程。

相关概念:

事实(Fact):对象之间及对象属性之间的关系
规则(rule):是由条件和结论构成的推理语句,一般表示为if…Then。一个规则的if部分称为LHS(left-hand-side),then部分称为RHS(right hand side)。
模式(module):就是指IF语句的条件。这里IF条件可能是有几个更小的条件组成的大条件。模式就是指的不能在继续分割下去的最小的原子条件。

时间: 2024-10-06 11:14:22

【java规则引擎】之规则引擎解释的相关文章

Apache Camel v2.8.0发布 非常强大的规则路由及媒介引擎

Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其异常强大且十分易用的API (可以说是一种Java的领域定义语言 Domain Specific Language)来配置其路由或者中介的规则. 通过这种领域定义语言,你可以在你的IDE中用简单的Java Code就可以写出一个类型安全并具有一定智能的规则描述文件.这与那种复杂的XML配置相比极大简

工作流引擎 和 规则引擎 区别?

问题描述 请问大家,我们公司在开发一套复杂的系统,前期业务逻辑不能准确确定下来,而且开发过程中,业务需求变化也是会有的.这种情况下,应该结合工作流引擎还是规则引擎来开发?我对这两个引擎都不是很熟悉,只是有个概念性的理解,工作流引擎一般用于逐级审批,规则引擎没有用过. 解决方案 解决方案二:工作流引擎现在演化为业务过程管理,最基本的概念还是业务过程的流转,而业务规则侧重业务逻辑的控制,比如零售行业的价格规则,它会针对客户商品/品类地理位置等设计一个非常复杂的价格管理体系:与业务规则非常紧密的是事件

Java 8的Nashorn脚本引擎教程

本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Google Chrome 和Node.js的引擎)的独立引擎相互竞争. Nashorn 扩展了Java在JVM上运行动态JavaScript脚本的能力. 在接下来的大约15分钟里,您将学习如何在 JVM 上动态运行 JavaScript. 通过一些简短的代码示例演示最近 Nashorn 的语言特性. 学习

java-使用方法求解规则图形面积,其中规则图形包括圆,三角形,矩形以及梯形。

问题描述 使用方法求解规则图形面积,其中规则图形包括圆,三角形,矩形以及梯形. 使用方法求解规则图形面积,其中规则图形包括圆,三角形,矩形以及梯形. 解决方案 俗话说得好:自己动手,丰衣足食 解决方案二: http://zhidao.baidu.com/link?url=SUZPhFGpbHHMxyjBRBeGqeuXDkJfRYyX6BUCFyGyXdq0G-_vyw-HGWt1HGhY5RPPpaNQgNNob6VaQ8115M9Ba_ 解决方案三: 给出什么条件了吗?比如到底是按照圆的周长

ThinkPHP支持3.1.3的SAE引擎和云引擎版本更新

ThinkPHP支持3.1.3的SAE引擎和云引擎版本更新发布: 云引擎扩展 ThinkPHP的云引擎扩展是为云平台服务的ThinkPHP扩展.通常所说的云平台是指PaaS类型的http://www.aliyun.com/zixun/aggregation/13423.html">云计算平台(服务),他们的名称一般叫App Engine .如新浪的有SAE(Sina App Engine) ,百度有 BAE(Baidu App Engine),等等.可以看到当今云计算已经十分流行,但是云计

java static问题 求大神解释

问题描述 java static问题 求大神解释 求解 错误在哪里 求大神帮忙 凑字数凑字数凑字数 凑字数凑字数凑字数 解决方案 static的方法 不能使用非静态的方法.你把Circle c = new Circle();这一句放在 method2 里面.就可以了 解决方案二: static的方法或者变量不能访问非static的方法或变量 解决方案三: 类的静态方法只能访问静态成员变量,而不能访问非静态成员变量,你的c是非静态成员.这是Java的语法,也容易理解,Java中静态成员变量又成为类

【java规则引擎】规则引擎RuleBase中利用观察者模式

(1)当RuleBase中有规则添加或删除,利用观察者模式实现,一旦有变动,规则引擎其他组件也做出相应的改变.(2)学习思想:当一个应用中涉及多个组件,为了实现易扩展,解耦思想.可以利用观察者模式实现.基于易变动的数据结构中加入监听者,监听者依据被监听者的变动动作,定义自己的动作.在监听者内部通知其他组件做出相应改变.实现面向对象的思想.组建之间实现了解藕.   一:被监听数据,也就是规则网络RuleBase的接口定义 1 package com.nonbankcard.commons.door

OpenRules v5.4.1发布 java开放源代码商业规则管理框架

OpenRules基于java完全开放源代码的商业规则管理框架.它有效的利用了MS Excel, Eclipse IDE 和其它java开源类库去构造,维护,部署,执行不同的复杂商业逻辑的规则引擎. OpenRules® Release 5.4.1 introduces a new version of Rule Solver for defining and solving constraint satisfaction and optimization problems. Rule Solv

为Java应用程序加入脚本引擎

前言 现代许多流行的应用程序,越来越多的使用了脚本引擎,最典型的有 Microsoft Office中的VBA等.脚本引擎能提供应用程序极大的可扩展性,也是 被许多热忠于二次开发的使用者所乐意看到的.本文主要讲解 BeanShell----这 样一个Java应用程序脚本引擎,你会了解它的基本特性,及如何将它嵌入到你的 应用程序中.你将看到,为自己的应用程序加上脚本引擎是多么容易的一件事情 . 常见的脚本引擎 现在网络上流行着许多种脚本语言,如TCL,Perl, JavaScript,Python

Java SE 6之脚本引擎 让程序如虎添翼

现在Java SE 5已经发布,在明年Java SE 6也将发布.Java SE 6较Java SE5有了很大的改进,它的功能更强,而且是专为Vista所设计,这就意味着Java SE 6将是Vista上的最佳选择.而Java SE 6所提供的最众多的新功能必将成为它的最大卖点. Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE 6中提供了一些接口