第26卷第6期2005年11月微计算机应用MICROCOMPUIERAPPLICATIONSVol.26No.6Nov.2005本文于2004-12-13收到。Java规则引擎)))Drools的介绍及应用刘伟(中国科技大学合肥230026)摘要:规则引擎技术是一项很有吸引力的技术。首先介绍了规则引擎的相关概念及其实现原理。然后重点介绍了Java规则引擎技术的规范和一个采用XML和java语言实现的规则引擎)))Drools。最后给出了利用Drools解决实际问题的范例并探讨了该技术的不足和发展前景。关键词:规则引擎,JSR94,DroolsIntroductionandImplementationofDrools)))aRuleEngineBasedJavaLIUWei(UnivofSci&TechofChina,Hefei,230026,China)Abstract:RuleEngineisamagnetictechnologyintheareaofsoftwaredevelopingnow.Inthispaper,firstly,theconceptandimplementingprincipleofRuleEngineisintroduced,andthenJSR94,theJavaprogramingspecificationofRaleEngineispresented.AsaproductofJavaRuleEngine,Drools,isemphasizedsmbsequently.providinganactualexample,thepaperdescribesthedetailsoftheusageofDrodsfinally.Keywords:RuleEngine,JSR94Drools1基于规则的专家系统简介Java规则引擎是推理引擎的一种,它起源于基于规则的专家系统。专家系统是人工智能的一个分支,它模仿人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。专家系统有很多分类:神经网络、基于案例推理和基于规则系统等。规则引擎则是基于规则的专家系统的一部分。为了更深入的了解Java规则引擎,下面简要地介绍一下基于规则的专家系统(RBES)。RBES的结构如图1所示。图1基于规则的专家系统其中知识库是中心数据库,存储各类模拟人类问题求解的产生式规则。一个规则分为前件部分和后件部分。前件(Antecedent):又称条件部分、模式部分或左部(Left-hand-side,LHS),是规则触发的条件。单独的条件称为条件元素或一个模式。后件(Consequent):又称右部(Right-handside,RHS),是规则触发时将要执行的一系列行为。工作内存是应用于规则的事实的全局数据库,它保存系统的当前状态。推理机(Inferenceengine):通过决定哪些规则满足事实或目标,并授予规则优先级,满足事实或目标的规则被加入议程。推理机有两种推理方式:正向链和反向链。正向链是从事实到结论的推理。反向链则是从假设,即要证明的结论,到事实的推理。模式匹配器(patternmatcher):通过比较事实和规则的模式部分,决定选择执行哪个规则,何时执行规则。模式匹配是基于规则的推理机的关键,它决定了推理机的推理效率。议程(Agenda):由推理机创建的一个规则优先级表,这些规则都匹配工作内存中的事实。如果同时有多个规则和事实匹配,则优先级最高的被触发。被触发规则的动作可能会产生新的事实,新的事实也被加入工作内存。执行引擎(ExecutionEngine):负责执行议程中的规则和微计算机应用2005年其他动作。知识获取机(Knowledgeacquisitionfacility):是为用户建立的一个知识自动输入方法,以直观易懂的方式帮助用户建立知识(规则),以代替技术人员去编码知识(规则)。解释机(Explanationfacility):负责把系统的推理解释给用户,实现专家系统的输出。与人类的思维相对应,规则引擎的两种推理方式:正向链法(Forward-Chaining)和反向链法(Backward-Chaining)对应人类思维的两种方式:演绎法和归纳法。Rete算法是目前效率最高的一个Forward-Chaining推理算法,绝大多数java的推理引擎都采用这一算法。规则引擎的推理步骤:①将初始数据(fact)输入工作内存。②使用模式匹配器比较规则(rule)和数据(fact)。③如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合。④解决冲突,将激活的规则按顺序放入议程。⑤使用规则引擎执行议程中的规则。重复步骤②至⑤,直到执行完毕所有议程中的规则。2JSR94(Java规则引擎API规范)介绍JSR-94规范定义了独立于厂商的标准API,开发人员可以通过这个标准的API使用Java规则引擎规范的不同产品实现。但值得注意的是,这个规范并没有强制统一规则定义的语法,因此,当需要将应用移植到其他的Java规则引擎实现时,可能需要变换规则定义。Java规则引擎API由javax...