1、规则引擎解决方案调研报告V10中国XXXXXXXX系统 for J2EE规则引擎解决方案调研报告Version 1.0Revision HistoryDateVersionDescriptionAuthor4/21/20041.0-目录1. 规则引擎 41.1 概述 42. 应用方案的一般实现 42.1 建立规则集 42.2 部署规则集 42.3 规则服务接口JSR94 52.4 对规则的计算 52.5 规则的过滤 52.6 使用计算结果 53. 现有的商业解决方案 63.1 新产品 63.2 操作人员已经显示提单列表 64. 其它解决方案 64.1 提单和报检单完成对碰 65. 评估 6规则
2、引擎解决方案调研报告 1. 规则引擎 规则引擎是解决可变的商业规则的问题的概述规则引擎(Rules Engine)的运作机制是在内存中向对象应用一套规则。首先内存使用来自调用对象的输入,例如用户档案请求会话。这样,在任何规则实际激活之前,在内存中就已经有了一份用户档案的内容。规则只能在一个上下文环境中执行,上下文环境把规则集和内存关联起来。该环境提供了到Rules Engine的接口,Rules Engine控制着应用程序的规则部分与内存之间的关系。内存由生产规则(production rules)负责操作,生产规则包含在规则集里。,依照规则的左半边(left-hand sides,LHS)针
3、对内存中的对象进行计算。如果内存中的对象与LHS中描述的模式匹配,就会触发规则的右半边(right-hand side,RHS)指定的操作。 此外某些操作可能会在内存中加入新的对象。例如,规则 Classifier 对用户年龄进行测试,如果 USER.age 45,就在内存中加入一个新的Classification 对象。生产系统的运行,要执行以下操作:1. 匹配: 估计规则的LHS,判断哪个规则与当前内存中的内容匹配。 2. 冲突解决:选择一个LHS匹配的规则。如果没有规则匹配,就停止解释。 3. 操作: 执行选中规则RHS中指定的动作。 4. 返回第1步。 规则会一直在内存中执行,直到冲突
4、解决集变为0时才停止(也就是没有规则能激活了)。在Rules Engine停止之后,规则管理器组件会返回一个对象列表,列表中包含内存中仍然存在的对象。一个可能的场景就是,还剩下一个类型为“Classification”或“ContentQuery”的对象。Rules Manager接着对剩下的对象进行迭代,用可选的对象过滤器过滤它们。过滤器可以有选择地忽略某些对象或者对某些对象进行变换。规则引擎分类值得注意的是,存在不同类型的规则引擎,在决定如何应用一种工具之前理解这种工具的用途是极其重要的。当您跨业务规则领域进行调查研究时,您将注意到这些工具可以分为以下几类: 简单业务规则(simple b
5、usiness rule) 通过一张简化的、直观的词汇表来表达并且是在应用程序或业务流程的可变性情况下调用的一种业务规则。这种规则引擎的一个很好的例子就是 ilog、Blaze 和 IBM 的 BRBeans。 人工智能规则(artificial intelligence rule) 管理 AI 和数据挖掘(Data Mining)产品中算法行为的规则。这种类型的规则引擎的一个例子就是 DB2 Intelligent Miner 产品。 事件相关规则(event correlation rule) 在事件相关性中用到的规则,用于将一套各自独立的事件聚合成一种聚合的(aggregated)有意义
6、的形态。这种类型的规则的一个很好的例子就是 Tivoli Event Console 系统管理产品。 数据为中心的规则(data-centric rule) 这些是约束对数据的检索和更新的规则。这些约束控制着如何转换数据以及谁可以访问数据,并通过加强语法、语义和上下文保留了数据的完整性。这种规则引擎的一个很好的例子就是 Versata。 转换和验证规则(transformation & validation rules) 这些是应用集成或信息集成场景中定义对数据的修改的规则。这些规则定义数据是如何修改、净化或验证的。提供了这种规则的产品包括 WebSphere Business Integra
7、tion 和 DB2 Warehouse Manager。2. 应用方案的一般实现要使用规则服务(Rules Service),有几个步骤。首先,必须预先建立规则,然后把规则部署到一个正在运行的规则服务器实例中。接着,规则被计算,而计算结果在返回用户之前,有可能先被过滤。最后,用户在应用程序代码里利用经过规则处理的结果。一般的应用环境:J2EE应用环境:建立规则集规则集是符合特定模式的规则文件或者规则库。部署规则集每个应用程序都与自己的数据实例相关联,这些数据的可以存储于文件,或者数据库系统。这些数据,都能通过数据同步机制进行部署。作为最佳实践,大型的规则应用系统采用数据库存储规则。规则服务使
8、用数据同步机制(Data Sync)来把规则集部署到运行服务器。也就是说,用户只需把规则集保存在规则库,规则集就会自动被部署。如果规则库里已经存在相同的规则集,那么数据同步机制会自动检查规则集的变化,规则服务数据库会自动刷新规则集的实例。 这意味着我们可以在服务器运行的时候调整规则,或者对解析错误进行调试。修改规则集之后,无需重新启动服务器。规则服务接口JSR94规则引擎的调用接口可以参照对规则的计算对规则集进行计算,可以考虑通过以下步骤: 规则引擎初始化,建立“内存”。 规则控件指明要使用哪个规则集,并且还可以进一步指定要对哪个规则进行计算 (默认是全部规则都计算),以及是否过滤计算结果。所
9、有这些参数都可以通过Rules控件进行配置,并传递给规则引擎,用于对规则进行计算。 开发人员建立对象,并把对象加入“内存”。示例对象可能是用户的档案、Request对象等。 这些参数会作为变量传递给规则控件的evaluate() 方法 通过RulesExecutorControl调用规则引擎。 规则引擎根据输入的规则集和输入的对象创建工作区 规则引擎反复触发,根据输入对象的状态和规则条件执行规则。 当规则引擎遇到没有规则可以触发的时候,计算结果和所有的原始输入对象一起存在于内存里。 由于输入对象也是结果的一部分,因此可以根据一个类对结果进行过滤。规则的过滤假如现在已经有了一个规则,就像前面例子
10、里的简单规则一样。应用程序的目标是输入用户的档案,检查用户的某些属性,根据这些属性来触发一些规则,如果规则的计算结果为真,则初始化一个新的Integer对象。然后在页面流(page flow)里,可以使用Integer值进行决策。在规则引擎已经触发完所有规则并完成所有预定工作结束之后,会返回一个 Iterator对象,它描述了仍然保留在内存里的所有对象。可能没有必要关注内存里有哪些对象,例如用户档案、Request对象等,真正想从结果中得到的,可能只是Integer对象。所以我们需要对结果进行过滤。对象过滤器是一个参数,可以在计算规则时传递给规则。如果使用规则控件,参数在控件的属性里指定。如果
11、直接使用控制管理器 ,参数在 evaluate() 方法的参数中指定。使用计算结果现在,假设你已经建立了上面的简单规则,用RulesExecutorControl计算了规则,而且还过滤了计算结果。那么,就可以在程序中直接使用该结果了。3. 现有的商业解决方案公司的新产品ILOG JRules(商业规则工具) 提供一个软件组件,用户可以用规则来描述他的商业逻辑, 并且可以正确运行这些规则。ILOG JRules利用五个功能组件来构建整套业务管理系统。一是规则开发环境,用于完整的开发、调试、发布和管理商务规则系统的图形环境;二是商务规则库,存 放规则及其相关数据,它是商务规则管理的基石,能根据工业
12、标准被扩展;三是商务规则的管理,能够实现规则查询、规则历史读取、规则版本控制、规则读写权限 设置以及规则状态管理;四是商务规则语言,让用户使用习惯的商务语言预定义商务规则;五是规则编辑器,它具有直观友好图形界面,非技术人员可以通过非常简 单的操作等方式创建或修改商务规则。案例:Resource at JESSJess是1995年由美国Sandia国家实验室分布式系统计算组成员Ernest J. Friedman-Hill用Java实现的一个经过扩充的CLIPS版本。它以CLIPS的设计原理为基础进行编写,除继承了CLIPS的优点外,还具 有许多自己独特的特征,如支持正向和逆向推理,可以在系统运
13、行环境下直接调用Java的类库等,这些特点将专家系统的开发过程同功能强大的Java语言结 合起来,使采用Jess语言开发的专家系统具有良好的移植性、嵌入性,可以方便地应用到网络上的不同机器中。另外,Java多线程机制使Jess可以与其 他应用程序并发执行,同步机制保证了对共享数据的正确操作,通过使用不同的线程完成特定的行为,就可以很容易地实现网络上的实时交互行为。目前,Jess 被广泛用于学术、工业、商业等领域,是一个有着广阔发展前景的专家系统开发平台。 Jess的基本组成和知识表示同大多数专家系统工具一样,Jess的核心也是由事实库、规则库、推理机三大部分组成,并采用产生式规则作为基本的知识
14、表达模式。在Jess中,事实包括简单事实和对象事实。简单事实就是一个描述事物的断言,而对象事实除此之外还封装了方法,可以接受外界信息改变自身的特征。这一概 念本身并不是Jess首次提出的,ART-IM、CLIPS都支持这一概念。但Jess表达对象事实的方法确实别具一格:它用Java而非系统本身的语言 来定义对象。在CLIPS 6.0中,对象事实通过系统本身的语句defclass和make-instance来定义,但在Jess中,类的定义由Java语言书写,编译通过后即 可动态地加入系统中。用Java虚拟机编译通过后,通过defclass命令将该类加入系统,它就可以执行类似于CLIPS中对类的各
15、种操作,如生成它的 一个实例、调用它的方法等。由此可见,Jess可以方便地调用Java中的类库,使用Java中的各种数据结构和方法,从而具备其他系统不可比拟的优良的 嵌入能力。Jess通过模式匹配语言对事实进行操作。在Jess中,模式匹配操作符的类型有很多,从可以同任意事实进行匹配的单一操作符到只能同满足特定约束值的事 实进行匹配的复杂操作符。特别要指出的是,Jess中有“unique”条件元素,它告诉系统同该模式匹配的事实是惟一的。这样,当模式发现一条事实同它 匹配后,就会停止对事实库的检索,在实际应用中,这可以将系统的性能提高2030,而CLIPS系统不支持这一条件元素。在Jess中,规则
16、的表达形式沿用了CLIPS的语法结构,通过对规则前件和后件的限定,它可以支持内容丰富的模式匹配语言。另外,Jess支持面向过程 的编程方式,它提供了一些语句来控制规则后件的操作流程,如使用ifthenelse和whiledo语句,这样它就能很有效地利用面向过程编程 的优势。总之,Jess的这些特性使系统拥有很强的知识表示能力。2Jess的推理机制Jess支持前向和逆向推理两种方式,前向推理同CLIPS的原理相同,逆向推理则是Jess不同于CLIPS的一个显著特征。在Jess的逆向推理中, 规则仍采用ifthen结构,但是在逆向推理时,推理引擎执行的是前件没有得到满足的规则,这种行为常常被称为目
17、标寻找。显然,Jess同时支持前向 和逆向推理的特点使其推理能力得到了加强。推理的效率很大程度上依赖于匹配算法的效率。Jess通过实现Rete匹配算法来提供非常高效的前向和逆向推理。Rete算法利用了专家系统中时间冗余性 和结构相似性这两个特点,有效地减少了用于匹配操作的次数。因此,当系统的性能是由匹配算法的质量决定时,Jess的优点将更为明显。应当指出的是, Rete算法是一个以空间换取时间的算法,所以,应用Jess时应当考虑内存的消耗。3开发环境和文档支持Jess提供了一个交互式的、命令行的开发环境,但也可以使用文本编辑器编辑代码,然后再通过系统命令以批处理的方式载入到系统中。同时它还提供
18、了一个简 单的图形开发环境。类似于CLIPS,Jess非常重视系统调试工具和错误跟踪这两方面。它的调试命令可以帮助使用者监视事实库、知识库中的内容,以及议 程表中被激活规则的情况,也可以监视某一规则前件的部分匹配的情况。在错误跟踪方面,Jess中的JessException类提供了丰富的错误信息,包 含了对出错问题的解释和堆栈跟踪表中的信息,如出错子函数的名字、相关的语句、出错的行数等,可以很好地帮助开发人员发现错误原因。Jess提供了一个非常完备的电子文档,它可以帮助开发人员很快查询到需要的信息,将Jess嵌入到Java应用程序中。由于Jess在很大程度上是CLIPS的克隆版本,感兴趣的读者可参考CLIPS用户手册和参考手册。Resource at http:/herzberg.ca.sandia.gov/jess/IBM CommonRulesResource at 4. 其它解决方案Mandarax开源的规则引擎.Drools开源的规则引擎.5. 评估商业化的规则引擎一般都具有良好的开发工具包,相关的文档,和技术支持.但是,这些规则引擎都是重量型的解决方案,并且都是来自于人工智能的相关技术.强调逻辑推理能力.针对质检业务的相关规则,应该是属于相对特殊的特定规则,并且规则之中很少有推理的过程,大多是数值比较和逻辑判断.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1