ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:35.21KB ,
资源ID:8182555      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8182555.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Drools手册译.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Drools手册译.docx

1、Drools手册译Chapter1.The Rule Engine1.1.What is a Rule Engine1.1.1Introduction and BackgroundA.I.(Artificial Intelligence)是一个关注于“使计算机像人类一样思考“的广泛的研究领域,包括Neural Networks(神经网络), Genetic Algorithms(遗传算法), Decision Trees(决策树), Frame Systems(框架系统) and Expert Systems(专家系统)。Knowledge representation(知识表示)是A.I.的

2、一部分,关心怎样表示和操作知识。专家系统使用知识表示把知识编码简化成一个可用于推理的知识库比如,我们可以用知识库处理数据以推出结论。专家系统又叫基于知识的系统、基于知识的专家系统,并被认为是A.I.的一个应用。The process of developing with an Expert System is Knowledge Engineering。EMYCIN是最早的专家系统Shell(外壳)之一,它从医学诊断专家系统MYCIN发展而来。早期的专家系统有自己的logic hard coded shells(逻辑硬件编码外壳),把逻辑与系统相分离,为用户输入提供一个简单的使用环境。Droo

3、ls是一个使用基于规则的方法实现的专家系统的规则引擎,更准确的说属于产生式规则系统。规则引擎这个术语是非常不明确的,因为任何以任意形式使用能够应用于数据生成结果的规则的系统都可以称为规则引擎。规则引擎包括像form validation and dynamic expression engines这样的简单系统。How to Build a Business Rules Engine (2004) by Malcolm Chisholm 例证了这种不明确性。Production Rule System(产生式规则系统)是一种规则引擎,也是专家系统,the validation and expr

4、ession evaluation Rule Engines mention previously are not Expert Systems。一个Production Rule System完全关注于精确表达propositional(命题)和first order logic(一阶逻辑)的知识表示,non ambigious and declarative manner。Production Rule System的核心是一个能够scale to 大量规则和事实的Inference Engine(推理引擎)。Inference Engine将事实、数据与产生式规则(也可以叫做产生式,或干

5、脆叫规则)进行匹配,以推出结论。一个产生式规则分为两部分,用一阶逻辑表示知识。when then 将新的或已存在的事实与产生式规则进行匹配的过程被称为模式匹配,这个过程由推理机完成。推理机使用的用于模式匹配的算法有很多,包括:Linear, Rete, Treat, Leaps。Drools即使用Rete也使用Leaps。Leaps是实验性的,因为它是个新算法。Drools中的Rete算法被称为ReteOO,表示Drools为面向对象系统(Object Oriented systems)增强并优化了Rete算法。其它基于Rete算法的引擎也有他们对Rete算法进行独有增强后的市场术语,比如Re

6、tePlus,ReteIII。要知道象ReteIII这样的名字纯粹是市场性的,不像原始版本的Rete算法,它们没有公布实现细节,这一点很重要;因此,问类似于“Drools是用ReteIII实现的吗?”的问题是没有任何意义的。最寻常的对Rete算法的增强在下面这篇文章中有论述Production Matching for Large Learning Systems (Rete/UL) (1995) by Robert B. Doorenbos规则存在Production Memory(规则库)中,推理机要匹配的facts(事实)存在Working Memory(工作内存)中。事实被插入到工作内

7、存中后,可能被修改或删除。一个有大量规则和事实的系统可能会很多规则被满足,这些规则被称为be in conflict。Agenda(议程)通过Conflict Resolution strategy(冲突决策策略)管理这些conflicting rules的执行顺序。一个产生式规则系统的推理机是stateful(有状态的)并且能够Truth Maintence(真值维护)。一个产生式规则系统有两个执行方法Forward Chaining and Backward Chaining,两种方法都用的系统叫做混合(hybrid)产生式规则系统。理解这两种操作方法是理解产生式规则系统之所以不同和怎样从

8、中选择最好系统的关键。Forward chaing 是 data-driven Drools是Forward chaing引擎。Backward chaining 是 goal-driven Prolog是一个Backward chaining引擎。Drools在其下一个主要版本将加入对Backward chaining的支持。1.2.Why use a Rule Engine1.2.1Summary of advantages of a rule engine逻辑与数据分离1.2.2When should you use a rule engine(译的不完整)对这个问题最简短的回答就是“当

9、没有令人满意的传统的程序设计方法能够解决这个问题时”。如果你曾注意到在你的代码中有很多刚刚觉得不对的”if”else”switch”和其它凌乱的逻辑,你总是要回过头去修改它们(可能是由于提供给你的逻辑是错误的,或是由于逻辑或者你的理解变化了),那么可以考虑使用规则。如果你所面对的问题没有算法能够解决,考虑使用规则1.2.3When not to use a rule engine这里引用Drools邮件发送清单中的话(Dave Hamu):“在我看来,在使用规则引擎的兴奋中,人们忘记了规则引擎只是一个复杂的应用或方法中的一部分。实际上,规则引擎不是用于规则的工作流引擎或进程管理工具。对特定的工

10、作要使用恰当的工具。当然,必要时一对老虎钳可以当作锤子用,但那并不是发明老虎钳的本意。”1.4Rete Algorithm正如所看到的,编译后的Rete网表明,Alpha结点是共享的。但是Beta结点不共享,每一个都有自己的终结点;如果第二个模式相同,也将被共享。1.3.Knowledge Representation1.3.1.Production RulesDrools中的产生式规则(或者说规则)结构分为两部分: Left Hand Side (LHS)和Right Hand Side (RHS),此外,规则可能有如下的属性:salience, agenda-group, auto-foc

11、us, activation-group, no-loop, duration。rule “” when then end规则的LHS包括Conditional Elements (CE) 和 Columns,以简化propositional and first order logic(命题和一阶逻辑)的编码。Colunm表示对一个fact(事实)的Field Constraints(域约束)。目前Drools支持下面的CEs:And, or, not, exitsts,很快还会加上forall和accumulate。允许下面的Field Constraints:Literal Constra

12、int, Bound Variable Constraint, Return Value, Predicate。第三章提供了关于这些内容的深入的学习。规则通过package关键字与一个namespace(命名空间)相关联,其他规则引擎可能称此为Rule Set(规则集)。一个Package声明imports, global variables, functions和rules。规则引擎实现了数据和逻辑的完全解耦。1.3.2.First Order Logic规则用First Order Logic(一阶逻辑)或predicate logic(谓词逻辑)扩展了Propositional Logi

13、c(命题逻辑)书写。命题是一个可以判断真假的陈述。在Java中,一个简单的命题包括variable operator value,这里我们经常把value作为literal value(字面值)。一个命题可以被认为是一个field constraint。命题间可用& and |连接。1.6.The Drools Rule EngineChapter2.Installation and Setup2.1Installing and usingDrools提供了一个基于Eclipse的IDE,但其核心只要求Java1.4(J2SE)。一个简单的开始Drools的方法是下载并安装Eclipse插件。

14、这样将为你提供你需要的所有的东西:可以简单的创建一个新的规则工程并且所的工作都已经做好了。2.1.3Installing IDE(Rule Workbench)Eclipse IDE要求Eclipse3.2或更高版本。既可以通过下载插件来安装,也可以通过Update site安装。2.1.3.1Installing from zip file要从Zip文件安装,需要下载并解压Zip文件。在压缩包里有一个Plugin目录,和Plugin jar。将这个Plugin jar放到Eclipse程序的Plugin目录下,并启动Eclipse。2.1.3.2Installing from the upd

15、ate site使用Update site安装是一个很方便的方法,并能保持最新版本(Eclipse会应需求检查更新)。一些防火墙可能会使在Eclipse中使用Update sites有麻烦,如果遇到这样的问题,请从插件手动安装。同时,如果是手动安装插件,那么也将需要手动从Plugin目录中删除它。Step1.使用Eclipse的Help菜单找到Software Updates/Find and InstallStep2.选择Search for new features to install选项Step3.选择New Remote SiteStep4. 在弹出的New Update Site对

16、话框中Name栏可以填JBoss RulesURL栏填URL: Step5.选择刚刚添加的新的Update site,单击Finish按钮。Step6. 几秒钟后你将看到从Update site得到的Drools IDE,选中其前面的复选框。注意,这时可能会出现出错提示:Drools Rule Workbench (3.0.5) requires feature org.eclipse.gef (3.2.1), or equivalent.解决办法是下载EclipseGEF-ALL-3.2.1.zip压缩包作为Eclipse的插件Step7.接受协议。开始从Update site下载,需要等待

17、一段时间。Step8.确定下载来的正是你想要的Drools IEDStep9.按下Accept按钮,继续安装Step10.重启Eclipse,安装即将生效。Chapter3.The Rule Language3.1.OverviewDrools3有native(自己的) rule language(DRL),它是非XML文本格式的。这种格式就标点而言非常轻便(light),并且通过expander机制支持自然的领域描述语言DSL(这种语言允许问题域形态的描述)。本章主要讲述(native rule format)。如果你使用Rule Workbench,内容帮助已经为你提供了很多规则结构,比如

18、,输入“ru”然后按“ctrl+space”,内容帮助就会为你创建规则结构。3.1.1A rule file一般的,一个规则文件就是一个以.drl为扩展名的文件。在一个drl文件里可以有多条规则,函数等等。也可以将规则展开成多个规则文件(这种情况下,建议使用扩展名.rule,但不是必需的),通过多个文件展开规则对处理大量规则有帮助。简单的说,一个DRL文件就是一个文本文件。3.1.2.What makes a rule规则有下面的大略格式:rulenameATTRIBUTESwhenLHSthenRHSend确实就是这么简单。基本上不需要标点,即使是name的双引号也是可选的(只有当规则名中有

19、空格时才需要引号)。Attributes(也是可选的)提示规则应该怎样运行。LHS是规则的条件部分,遵守下面讲的特定的语法。RHS基本上是一个允许执行的Java语义代码块(不久的将来也将支持其它语义语言,比如groovy, C#)。这里唯一的特定关键词是关于插入,回收,修改事实的。任何在LHS中使用的变量都可以在RHS中使用。注意,空白(whitespace)并不重要,除非是在领域描述语言(DSL)中,在DSL中,每一行都在下一行前执行。3.1.3.Domain Specific LanguageDSL是增强native rule language的工具,它使用expander机制。Expan

20、der机制是一个扩展的API,但是默认的,它能够以.dsl文件工作,dsl文件包含从领域或自然语言到规则语言和领域对象的映射。也可以将这些.dsl文件想像成提供一些隔离的领域模型的映射。DSLs/expanders在被编译时通过执行规则源文件中的一行来工作(这是唯一的newlines是重要的时刻)。这样作是为了有助于可读性和避免需要标点。期望一段时间以后,expanders和DSLs将对不同的领域都有效,并能提供其它形式的自然语言分析。3.1.4.Reserved words在规则语言中有一些保留字。当给你自己的领域对象、属性、方法、函数等在规则文本中使用的对象命名时与这些保留字避免冲突是明智

21、的。下表是应该在规则内容中尽量避免的关键字(一般情况下,能够正常工作,但有时规则可能会被不正确的编译。当然,可能使关键字作为方法名的一部分,如notSomething()。whenthenruleendcontainsmatchesandormodifyretractassertsaliencefunctionqueryexistsevalagenda-groupno-loopduration-notauto-focus3.2.Comments注释是被规则引擎忽略的文本部分。3.2.1.Single line comment以或/开头3.2.2.Multiline comment以/*开头,以

22、*/结束3.3.Package一个Package是一个规则和其它相关结构(如imports, globals)的集合。通常,Package成员互相关联(如HR规则)。一个Package代表一个命名空间(namespace),标志一个特定的规则群。Package name自身只是命名空间,与文件或文件夹没有任何关系。可以将多个规则源文件汇编,那样就会有一个顶级Package configuration,所有的规则都在这个顶级Package下面。然而,通常的结构是,像Package声明一样,一个Package中的所有规则在同一个文件里,这样Package就完全是自限制的。下面的铁路图表示了组成一个

23、Package的所有内容。注意,一个Package必须有一个命名空间,并使用标准Java公约(如不允许有空格,不像规则名是允许空格的)声明Package name。就元素的顺序而言,除了package和expander声明必须在文件顶端、在任何规则出现之前外,其它的在规则文件中可以任何顺序出现。In all cases,半角冒号是可选的。Figure3.3.package3.3.1.import3.3.2.expander3.3.3.global3.4.FuctionFunctions是一种在你的规则文件中插入语义代码的方法,与一般的Java类相对。Functions cant do anyt

24、hing more than what you can do with helper classes(事实上,编译器在后台生成helper class,isnt that helpful。在规则文件中使用functions的最主要的好处是可以使所有逻辑在同一个地方,并且当需要时可以改变functions(这可能是优点也可能是缺点)。Functions对invoke规则的Consequence(then)部分的行为最有帮助,尤其是当某条特定的行为(在不同的规则中)被反复执行时,只需对每条规则区别function的参数。A typical function declaration looks li

25、ke:function String calcSomething(String arg) return hola !;Function的参数和返回类型就像一般的方法(method)一样(如果需要的话,也可以没有参数)。function在规则里调用(call)(就像调用方法一样,使用function名和参数调用)。Function中可以使用helper类中的一个静态方法:Foo.doSomething(),或者3.5.RuleRule结构是最重要的结构。 Rule 使用了形如“ IF ” something “ THEN ” action (当然,我们的关键字是“ when ”和“ then ”

26、)的形式。 一个规则在一个 package 中必须要有唯一的名字。如果一个名字中含有空格,那就需要将名字放在双引号中(最好总是使用双引号)。 Attribute 是可选的(最好是每行只有一个 Attribute )。 规则的 LHS 跟在“ when ”关键字的后面(最好是另起一行),同样 RHS 要跟在“ then ”关键字后面(最好也另起一行)。规则以关键字“ end ”结束。规则不能嵌套。 3.5.1.Left Hand SideLeft Hand Side 其实就是规则的条件部分。3.5.2.Right Hand SideRight Hand Side ( RHS )就是规则的结果(

27、consequence )或者动作( action )部分。 RHS 的目的是 retract 或 add facts 到 WorkingMemory 中,还有invoke针对你的 application 的动作。实际上, RHS 是当规则激发( fire )时执行的代码块。 在 RHS 中,你可以使用几个方便的 method 来改变 WorkingMemory : “ modify(obj) ”:告诉引擎一个对象已经发生变化,规则必须重新匹配( obj 对象必须是出现在 LHS 中的对象); “ assert(new Something() ”:将一个新的 Something 对象加入 Wo

28、rkingMemory ; “ assertLogical(new Something() ”:与 assert 方法类似。但是,当没有 fact 支持当前激发规则的真实性的时候,这个新对象会自动被 retract , “ retract(obj) ”:从 WorkingMemory 中移除一个对象。 这些方法都是宏指令,提供了到 KnowledgeHelper 实例的快捷方式(参考 KnowledgeHelper 接口)。 KnowledgeHelper 接口可以在 RHS 代码块中调用,通过变量“ drools ”。如果你在 assert 进引擎的 JavaBean 中加入“ Proper

29、ty Change Listener ”,在对象发生变化的时候,你就不用调用“ modify ”方法。 3.5.3.RuleAttriutes3.5.3.1.no-loopdefault value : falsetype : Boolean当某个规则结果修改一个事实时,可能引起这个规则的再次被激活,引起递归。设置no-loop为真表示忽略这种试图激活的行为。3.5.3.2.saliencedefault value : 0type : integer每个规则都有一个能够被分配一个整数的salience属性,默认值为0,这个整数可正可负。Salience是一种优先级形式,在规则激活序列中,高S

30、alience的规则被给以高优先级。3.5.3.3.agenda-groupdefault value : MAINtype : StringAgenda group允许用户给Agenda分组以提供更多的执行控制。只有当前组的规则才能被fire。3.5.3.4.auto-focusdefault value falsetype : Boolean当一个auto-focus值为真的规则被激活,并且它所属的Rule Agenda Group当前没有焦点,那么它将被自动聚焦,允许规则potentially fire。3.5.3.5.activation-groupdefault value N/At

31、ype : String属于同一命名activation-group的规则相互间有排它性。换句话说,fire一个activation-group中的第一个规则将取消其它规则的激活。Activation-group属性是任何一个字符串,只要这个字符串有别于同一组中的所有规则。注意:activation-group过去被称为Xor-group,但技术上它不完全是Xor(异或),你可能会听到人们提到Xor-group,那就在你的头脑中用activation-group替换它。3.5.3.6.durationdefault value : no default valuetype : long3.5.4.ColumnCheese( )Cheese( type = stilton, price 10 )一个规则包含一个Field Constraints(域限制)或几个Objec

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1