Drools入门手册

上传人:san****glu 文档编号:49466273 上传时间:2018-07-28 格式:PPT 页数:42 大小:537.50KB
返回 下载 相关 举报
Drools入门手册_第1页
第1页 / 共42页
Drools入门手册_第2页
第2页 / 共42页
Drools入门手册_第3页
第3页 / 共42页
Drools入门手册_第4页
第4页 / 共42页
Drools入门手册_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Drools入门手册》由会员分享,可在线阅读,更多相关《Drools入门手册(42页珍藏版)》请在金锄头文库上搜索。

1、Drools入门手册 -许建辉高尔夫球员的位置?已经知道有四个高尔夫球员,他们的名字是 Fred,Joe,Bob,Tom; 今天他们分别穿着红色,蓝色,橙色以及格 子衣服。并按照从左往右的顺序站成一排。 我们将最左边的位置定位1,最右边的位置定 为4,中间依次是2,3位置。 现在我们已经了解的情况是: 1)高尔夫球员Fred,目前不知道他的位置 和衣服颜色 2)Fred紧挨的右边球员穿蓝色的衣服 3)Joe排在第2个位置 4)Bob穿着格子短裤 5)Tom没有排在第1位或第4位,也没有穿 橙色衣服 现在要求你根据上述条件获得四个球员分别 的位置和穿着。 如果要求使用编程方式获得结果,这显然是

2、一个很有挑战性的工作,你可以思考一下。 而使用规则引擎的方式来思考问题,我们其 实是要从各种可能的排列中将需要的结果挑 出来 因此我们只需要将球员所有可能的排列组合 (位置及颜色)出来,放入Working Memory中 然后让规则引擎帮我们挑出来就可以了。 If() else 咱们习惯看程序!引出话题-drools人工智能人工智能(Artificial Intelligence,简称AI)是 计算机学科的一个分支,二十世纪七十年代以来被称 为世界三大尖端技术之一(空间技术、能源技术、人 工智能)。人工智能是研究使计算机来模拟人的某些 思维过程和智能行为(如学习、推理、思考、规划等 )的学科。

3、专家系统 所谓“专家”,一般都拥有某一特定领域的大量 知识,以及丰富的经验。在解决问题时,专家 们通常拥有一套独特的思维方式,能较圆满地 解决一类困难问题,或向用户提出一些建设性 的建议等。什么是专家系统呢?简单地讲,专家系统就是 一个具有智能特点的计算机程序,它的智能化 主要表现为能够在特定的领域内模仿人类专家 思维来求解复杂问题。因此,专家系统必须包 含领域专家的大量知识,拥有类似人类专家思 维的推理能力,并能用这些知识来解决实际问 题。例如,一个医学专家系统就能够像真正的 专家一样,诊断病人的疾病,判别出病情的严 重性,并给出相应的处方和治疗建议等等。 例 如个人理财专家系统、寻找油田的

4、专家系统、 贷款损失评估专家系统、各类教学专家系统等。 基于规引擎的专家系统Java规则引擎 -drools 基于规则的专家系统构成知识事实推理引擎演绎法:从一个初始的事实出发,不断地应用规则得出结论(或执行指定的动作)。 归纳法:则是根据假设,不断地寻找符合假设的事实。 Rete算法 以后版本基于规则的专家系统构成(1)初始化事实(2)比较规则与事实Pattern Matcher :样品匹配(3)冲突的规则 放入冲突集合(4)解决冲突,将 激活的规则按顺序放 入Agenda。 (5)执行Agenda 中的规则规则引擎相关构件 信息元(Information Unit)信息服务(Informa

5、tion Services)队列管理器规则集( Queue Manager Rule Set) 队列管理器(Queue Manager)处理过程分为四个阶段进行 规则引擎工作机制 Java规则引擎工作机制 Java规则引擎APIJSR-941Java规则引擎API体系结构业务规则引擎架构Java规则引擎APIJSR-94 规则引擎API将管理API和运行时API加 以分开,从而为这些包提供了较好粒度 的安全控制.规则引擎API并没有提供 明显的安全机制,它可以和J2EE规范中 定义的标准安全API联合使用.安全可 以由以下机制提供,如Java authentication and author

6、ization service (JAAS),the Java cryptography extension (JCE),Java secure Socket Extension (JSSE),或者其它定制的安全API.JAAS 能被用来定义规则执行集的许可权限, 从而只有授权用户才能访问。2Java规则引擎API安全问题 Java规则引擎APIJSR-943异常与日志 规则引擎API定义了javax.rules.RuleException 作为规则引擎异常层次的根类.所有其 它异常都继承于这个根类.规则引擎中 定义的异常都是受控制的异常(checked exceptions),所以捕获异常的

7、任务就交给了 规则引擎。规则引擎API没有提供明确 的日志机制,但是它建议将Java Logging API用于规则引擎API。 规则语言 规则语言 规则文件通常是以drl扩展名结尾规则 的 规则文件的完整结构 package package-nameimportsglobalsfunctionsQueriesrules规则文件规则语言 规则具有如下主体结构:rule “name“attributeswhenLHSthenRHSend 两边的引号也是可选的 ATTRIBUTES(通常是可选项)指出规 则的行为表现 LHS是规则的条件部分 RHS是允许Java语义代码 规则构成 规则语言尽力避免

8、使用的: rulequerywhen thenendnull andornot existscollect accumulate fromforalltrue falseeval 避免使用 packagefunctionglobal importtemplate attributesenabled saliencedurationinit actionreverseresult containsexcludesmemberOf matchesin date-effective date-expiresno-loop auto-focus activation-group agenda-grou

9、pdialect rule-flow-group规则保留字 规则语言 单行注释 # this is a single line comment/ this is also a single line comment 多行注释/*this is a multi-line comment*/注释规则语言Package Import标记就像java中的含义一样。对于任何要用在规则中的 对象,你需要指定完整的路径和类型名。Drools从同名 的java包中自动导入类。 expander Expander标记是可选的,用来指定DSL配置(通常保存在 独立文件中)。这为解析器提供了如何理解你自定义的 规则

10、语言。 API允许用编程方式附加DSL模板,如果expander没有声 明在源文件中。规则语言Global不会插入到Working Memory中,因此当全局 变量发生改变时,引擎不会得知;因为这个原因,全局 变量不能用在条件约束上,除非这个值不会发生改变。 在条件约束中错误使用全局变量会导致意想不到的结果 。引擎不会通知和跟踪全局变量的值变更。不正确的在 约束中使用全局变量会带来让人惊讶的结果糟糕的 惊讶,就像医生对你的X光片说“那里有些有趣的东西” 一样。 如果多个Package声明了同样的全局变量,那么它们 必须有相同的类型,并指向同一个全局变量。规则语言global全局变量 为了使用全

11、局变量,你必须 在规则文件中声明全局变量并使用它 global java.util.List myGlobalList; rule “Using a global“ wheneval( true ) then myGlobalList.add( “Hello World“ ); end在working memory上设置全局变量 的值。最好是在将fact插入working memory之前设置完所有全局变量 List list = new ArrayList(); WorkingMemory wm =rulebase.newStatefulSession(); wm.setGlobal( “m

12、yGlobalList“, list );规则语言Function 函数最大的用处是被规则的推论( then)部分中的行为所调用,特别是 当一个行为操作需要反复被调用时 如发送邮件。典型的函数声明如下所示: function String hello(String name) return “Hello “+name+“!“; Drools4.0支持静态方法导入 import static my.package.Foo.hello rule “using a static function“ when eval( true ) thenSystem.out.println( hello( “B

13、ob“ ) ); end规则语言Rule LHS:规则指定 “when”作为一系 列条件的集合 RHS :指定一系列 操作 规则不能进行嵌 套 规则语法 rule “* when* then* end规则示例 rule “Approve if not rejected“salience -100 agenda-group “approval“whennot Rejection() p : Policy(approved = false, policyState:status)exists Driver(age 25)Process(status = policyState)thenlog(“A

14、PPROVED: due to no objections.“); p.setApproved(true); end 规则语言Rule 属性 要从Drools中获得最大的收获,你必须十分的了解每一个属性。 N/A是指表格中空出的地方要填的一栏,与你的情况不合。例如:有的表格问你有几个孩子,你连结婚都没有结,自然填N/A。 注释关键字默认 值 类型描述no-loop false Boolean 当规则在推论中对fact进行修改后,可能会导致该规则的重新激活,引起递归。设置no- loop为true可以阻止该规则被再次激活。salience 0integer 每一个规则有一个整数类型的优先级属性,

15、默认为0,这个整数可以使正负数。优先级数 字高的规则会比优先级低的规则先执行。agenda-group MAIN String Agenda group允许用户对分隔Agenda执行区提供更多的控制。只有在具有焦点的 agenda group中的规则才能够激发。auto-focusfalse Boolean 自动获取焦点 。 当规则的auto-focus属性为true时,如果该规则符合激活条件,则该规则所在agenda- group自动获得焦点,允许规则激发。activation-group N/A String 在同名activation-group中的规则将以互斥的方式激发。这个意思时在这

16、个组中第一条被 激发的规则将取消其它规则的激发,即使它们已经在激发队列中。Activation-group属性 可以是任何字符,只要所有你需要放在同一个组中的规则中的activation-group属性是相 同的即可。 注:这个组之前被称为Xor-group,但是从技术上来说它与Xor并不完全一样,但是当你 听到别人说xor-group时,你知道这就是activation-group。dialect 由Package指定 默认值 可能值: “java“ or “mvel“String Dialect指定在LHS代码表达式或RHS代码块中使用的语言。当前两种语言有效,Java和 MVEL。Dialect可以在Package级别统一指定,而Rule属性中指定的dialect将局部覆盖掉 Pac

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 经济/贸易/财会 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号