Drools入門手冊PPT課件_第1頁
Drools入門手冊PPT課件_第2頁
Drools入門手冊PPT課件_第3頁
Drools入門手冊PPT課件_第4頁
Drools入門手冊PPT課件_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1 Drools入門手冊 2 高爾夫球員的位置 已經(jīng)知道有四個高爾夫球員 他們的名字是Fred Joe Bob Tom 今天他們分別穿著紅色 藍(lán)色 橙色以及格子衣服 并按照從左往右的順序站成一排 我們將最左邊的位置定位1 最右邊的位置定為4 中間依次是2 3位置 現(xiàn)在我們已經(jīng)了解的情況是 1 高爾夫球員Fred 目前不知道他的位置和衣服顏色2 Fred緊挨的右邊球員穿藍(lán)色的衣服3 Joe排在第2個位置4 Bob穿著格子短褲5 Tom沒有排在第1位或第4位 也沒有穿橙色衣服現(xiàn)在要求你根據(jù)上述條件獲得四個球員分別的位置和穿著 如果要求使用編程方式獲得結(jié)果 這顯然是一個很有挑戰(zhàn)性的工作 你可以思考一下 而使用規(guī)則引擎的方式來思考問題 我們其實是要從各種可能的排列中將需要的結(jié)果挑出來因此我們只需要將球員所有可能的排列組合 位置及顏色 出來 放入WorkingMemory中然后讓規(guī)則引擎幫我們挑出來就可以了 If else 咱們習(xí)慣看程序 3 引出話題 drools 人工智能人工智能 ArtificialIntelligence 簡稱AI 是計算機學(xué)科的一個分支 二十世紀(jì)七十年代以來被稱為世界三大尖端技術(shù)之一 空間技術(shù) 能源技術(shù) 人工智能 人工智能是研究使計算機來模擬人的某些思維過程和智能行為 如學(xué)習(xí) 推理 思考 規(guī)劃等 的學(xué)科 專家系統(tǒng)所謂 專家 一般都擁有某一特定領(lǐng)域的大量知識 以及豐富的經(jīng)驗 在解決問題時 專家們通常擁有一套獨特的思維方式 能較圓滿地解決一類困難問題 或向用戶提出一些建設(shè)性的建議等 什么是專家系統(tǒng)呢 簡單地講 專家系統(tǒng)就是一個具有智能特點的計算機程序 它的智能化主要表現(xiàn)為能夠在特定的領(lǐng)域內(nèi)模仿人類專家思維來求解復(fù)雜問題 因此 專家系統(tǒng)必須包含領(lǐng)域?qū)<业拇罅恐R 擁有類似人類專家思維的推理能力 并能用這些知識來解決實際問題 例如 一個醫(yī)學(xué)專家系統(tǒng)就能夠像真正的專家一樣 診斷病人的疾病 判別出病情的嚴(yán)重性 并給出相應(yīng)的處方和治療建議等等 例如個人理財專家系統(tǒng) 尋找油田的專家系統(tǒng) 貸款損失評估專家系統(tǒng) 各類教學(xué)專家系統(tǒng)等 基于規(guī)引擎的專家系統(tǒng) Java規(guī)則引擎 drools 4 基于規(guī)則的專家系統(tǒng)構(gòu)成 知識 事實 推理引擎 演繹法 從一個初始的事實出發(fā) 不斷地應(yīng)用規(guī)則得出結(jié)論 或執(zhí)行指定的動作 歸納法 則是根據(jù)假設(shè) 不斷地尋找符合假設(shè)的事實 Rete算法 以后版本 5 基于規(guī)則的專家系統(tǒng)構(gòu)成 1 初始化事實 2 比較規(guī)則與事實 PatternMatcher 樣品匹配 3 沖突的規(guī)則放入沖突集合 4 解決沖突 將激活的規(guī)則按順序放入Agenda 5 執(zhí)行Agenda中的規(guī)則 6 規(guī)則引擎相關(guān)構(gòu)件 信息元 InformationUnit 信息服務(wù) InformationServices 隊列管理器規(guī)則集 QueueManagerRuleSet 隊列管理器 QueueManager 7 處理過程分為四個階段進(jìn)行 8 規(guī)則引擎工作機制 9 Java規(guī)則引擎工作機制 10 Java規(guī)則引擎API JSR 94 1 Java規(guī)則引擎API體系結(jié)構(gòu) 業(yè)務(wù)規(guī)則引擎架構(gòu) 11 Java規(guī)則引擎API JSR 94 規(guī)則引擎API將管理API和運行時API加以分開 從而為這些包提供了較好粒度的安全控制 規(guī)則引擎API并沒有提供明顯的安全機制 它可以和J2EE規(guī)范中定義的標(biāo)準(zhǔn)安全API聯(lián)合使用 安全可以由以下機制提供 如Javaauthenticationandauthorizationservice JAAS theJavacryptographyextension JCE JavasecureSocketExtension JSSE 或者其它定制的安全API JAAS能被用來定義規(guī)則執(zhí)行集的許可權(quán)限 從而只有授權(quán)用戶才能訪問 2 Java規(guī)則引擎API安全問題 12 Java規(guī)則引擎API JSR 94 3 異常與日志 規(guī)則引擎API定義了javax rules RuleException作為規(guī)則引擎異常層次的根類 所有其它異常都繼承于這個根類 規(guī)則引擎中定義的異常都是受控制的異常 checkedexceptions 所以捕獲異常的任務(wù)就交給了規(guī)則引擎 規(guī)則引擎API沒有提供明確的日志機制 但是它建議將JavaLoggingAPI用于規(guī)則引擎API 13 規(guī)則語言 14 規(guī)則語言 規(guī)則文件通常是以drl擴(kuò)展名結(jié)尾規(guī)則的規(guī)則文件的完整結(jié)構(gòu)packagepackage nameimportsglobalsfunctionsQueriesrules 規(guī)則文件 15 規(guī)則語言 規(guī)則具有如下主體結(jié)構(gòu) rule name attributeswhenLHSthenRHSend兩邊的引號也是可選的ATTRIBUTES 通常是可選項 指出規(guī)則的行為表現(xiàn)LHS是規(guī)則的條件部分RHS是允許Java語義代碼 規(guī)則構(gòu)成 16 規(guī)則語言 盡力避免使用的 rulequerywhenthenendnullandornotexistscollectaccumulatefromforalltruefalseeval避免使用packagefunctionglobalimporttemplateattributesenabledsaliencedurationinitactionreverseresultcontainsexcludesmemberOfmatchesindate effectivedate expiresno loopauto focusactivation groupagenda groupdialectrule flow group 規(guī)則保留字 17 規(guī)則語言 單行注釋 thisisasinglelinecomment thisisalsoasinglelinecomment多行注釋 thisisamulti linecomment 注釋 18 規(guī)則語言 Package 19 Import標(biāo)記就像java中的含義一樣 對于任何要用在規(guī)則中的對象 你需要指定完整的路徑和類型名 Drools從同名的java包中自動導(dǎo)入類 expanderExpander標(biāo)記是可選的 用來指定DSL配置 通常保存在獨立文件中 這為解析器提供了如何理解你自定義的規(guī)則語言 API允許用編程方式附加DSL模板 如果expander沒有聲明在源文件中 規(guī)則語言 20 Global不會插入到WorkingMemory中 因此當(dāng)全局變量發(fā)生改變時 引擎不會得知 因為這個原因 全局變量不能用在條件約束上 除非這個值不會發(fā)生改變 在條件約束中錯誤使用全局變量會導(dǎo)致意想不到的結(jié)果 引擎不會通知和跟蹤全局變量的值變更 不正確的在約束中使用全局變量會帶來讓人驚訝的結(jié)果 糟糕的驚訝 就像醫(yī)生對你的X光片說 那里有些有趣的東西 一樣 如果多個Package聲明了同樣的全局變量 那么它們必須有相同的類型 并指向同一個全局變量 規(guī)則語言 global全局變量 為了使用全局變量 你必須 在規(guī)則文件中聲明全局變量并使用它globaljava util ListmyGlobalList rule Usingaglobal wheneval true thenmyGlobalList add HelloWorld end 在workingmemory上設(shè)置全局變量的值 最好是在將fact插入workingmemory之前設(shè)置完所有全局變量Listlist newArrayList WorkingMemorywm rulebase newStatefulSession wm setGlobal myGlobalList list 21 規(guī)則語言 Function 函數(shù)最大的用處是被規(guī)則的推論 then 部分中的行為所調(diào)用 特別是當(dāng)一個行為操作需要反復(fù)被調(diào)用時 如發(fā)送郵件 典型的函數(shù)聲明如下所示 functionStringhello Stringname return Hello name Drools4 0支持靜態(tài)方法導(dǎo)入importstaticmy package Foo hellorule usingastaticfunction wheneval true thenSystem out println hello Bob end 22 規(guī)則語言 Rule LHS 規(guī)則指定 when 作為一系列條件的集合RHS 指定一系列操作規(guī)則不能進(jìn)行嵌套 規(guī)則語法rule when then end 規(guī)則示例rule Approveifnotrejected salience 100agenda group approval whennotRejection p Policy approved false policyState status existsDriver age 25 Process status policyState thenlog APPROVED duetonoobjections p setApproved true end 23 規(guī)則語言 Rule屬性 要從Drools中獲得最大的收獲 你必須十分的了解每一個屬性 24 N A是指表格中空出的地方要填的一欄 與你的情況不合 例如 有的表格問你有幾個孩子 你連結(jié)婚都沒有結(jié) 自然填N A 注釋 25 規(guī)則語言 LHS when 條件元素 LHS是空的 那它被重寫為eval true rule noCEs whenthen end rule noCEs wheneval true then end 26 規(guī)則語言 LHS when 條件元素 模式實體關(guān)系圖 27 規(guī)則語言 LHS when 條件元素 Compound 復(fù)合的Restriction 限制 約束Constraint 約束 強制Pattern 模范 式樣 模式 樣品 28 字段約束分為單值約束 復(fù)合值約束和多重約束 規(guī)則語言 LHS when 條件元素 FieldConstraints字段約束 29 規(guī)則語言 LHS when 條件元素 單值約束 操作符 正則表達(dá)式約束 字段匹配 Matches 用于任何有效的Java正則表達(dá)式 Cheese typematches Buffalo S Mozerella Cheese typenotmatches Buffulo S Mozerella contains 用來檢查是否字段的集合或數(shù)組包含指定的對象 CheeseCounter cheesescontains stilton containswithaStringliteralCheeseCounter cheesescontains var containswithavariablenotcontaints用來檢查是否字段的集合或數(shù)組不包含指定的對象 CheeseCounter cheesesnotcontains cheddar notcontainswithaStringliteralCheeseCounter cheesesnotcontains var notcontainswithavariable注意 為向后兼容性 excludes 作為 notcontains 的一個同義字提供 30 memberof 用來檢查字段是否是集合或數(shù)組的成員 集合必須是綁定的變量 CheeseCounter cheesememberof matureCheeses notmemberof 用來檢查字段是否不是集合或數(shù)組的成員 集合必須是綁定的變量 CheeseCounter cheesenotmemberof matureCheeses 字符串約束字符串約束是最簡單的約束格式 將字段與指定的字符串求值 數(shù)值 日期 string或者boolean Cheese quantity 5 數(shù)值Cheese bestBefore 27 Oct 2007 日期Cheese type stilton 字符串Cheese smelly true boolean 注不允許Cheese smelly Cheese smelly SomeClass TRUE boolean綁定變量約束 這通常用來顯示變量與字段的區(qū)別Person likes favouriteCheese 任何匹配的Person實例的favouriteCheese字段Cheese type likes stilton Cheese type stilton Cheesery cheesescontains stilton 規(guī)則語言 LHS when 條件元素 31 返回值約束Person girlAge age sex F Person age girlAge 2 sex M 復(fù)合值約束復(fù)合值約束用在可能有多個允許值的時候 當(dāng)前只支持 in 和 notin 兩個操作 in 和 notin 運算式實際上被語法分析器重寫成多個 and 組成的多重約束 Person cheese favouriteCheese Cheese typein stilton cheddar cheese 多重約束Person age 30 30 20 30 40 location london 內(nèi)聯(lián)的Eval約束Inline eval約束可以使用任何有效的語言表達(dá)式 只要它最終能被求值為boolean元數(shù)據(jù)類型 避免使用任何Drools關(guān)鍵字作為聲明 自動代入 autovivification 機制用來自動建立字段綁定變量 當(dāng)構(gòu)建器發(fā)現(xiàn)標(biāo)識不是當(dāng)前定義的變量名是 它將嘗試將它作為對象的字段來問 這種情況下 構(gòu)建器自動在inline eval中建立該字段的同名變量Person girlAge age sex F Person eval girlAge boyAge 2 sex M 規(guī)則語言 LHS when 條件元素 32 嵌套訪問 and 符合作為 and 的同義選擇 不推薦使用Or 符號作為or的同義操作 不推薦使用 只是因為歷史的原因在語法中保留 Eval本質(zhì)上是一個大雜燴 catchall 它允許任何語義代碼被執(zhí)行 只要最后返回一個boolean值 notnotBus color red not Bus color red number 42 not Bus color red andBus color blue existsexistsBus color red exists Bus color red number 42 bracketsareoptionalexists Bus color red andBus color blue 規(guī)則語言 LHS when 條件元素 33 ForallForall條件元素在Drools中完全支持一階邏輯 Forall條件元素在所有匹配最初模式的fact也同時匹配后面的模式的情況下為true rule Allenglishbusesarered whenforall bus Bus type english Bus this bus color red then allenglishbusesareredend 規(guī)則語言 LHS when 條件元素 34 規(guī)則語言 注釋 35 規(guī)則語言 注釋 36 RHS是對于規(guī)則的推論或操作部分的簡稱 這部分應(yīng)當(dāng)包含一系列需要執(zhí)行的操作 在RHS中使用命令式或條件式代碼是不好的習(xí)慣 因為規(guī)則應(yīng)當(dāng)是原子態(tài)的 什么時候這樣 然后就做這些 不是 什么時候這樣 可能做這些 規(guī)則的RHS部分應(yīng)該保持簡短的 這保持它是聲明性和可讀性的 如果你發(fā)現(xiàn)你需要在RHS中使用命令式或and or條件代碼 那你可能需要將規(guī)則拆分為多個規(guī)則 RHS的主要目的是插入 刪除修改workingmemory數(shù)據(jù) 這里有一些方法幫助你用來修改workingmemory 不需要首先引用workingmemory實例 規(guī)則語言 TheRightHandSide then 37 update object handle 將告訴引擎對象已經(jīng)改變 已經(jīng)被綁定到LHS中的那一個 并且規(guī)則需要重新檢查 insert newSomething 將在workingmemory中放置一個你新建的對象 insertLogical newSomething 與insert類似 但是當(dāng)沒有更多的fact支持當(dāng)前激發(fā)規(guī)則的真值狀態(tài)時 對象自動刪除 retract handle removesanobjectfromworkingmemory 如果你為插入引擎的javabean對象提供屬性變更監(jiān)聽器 那么當(dāng)對象改變時可以不用調(diào) update 查閱KnowledgeHelper接口獲得更多高級操作KnowledgeHelper接口在RHS代碼塊中可以通過一個名稱是drools的變量訪問 規(guī)則語言 TheRightHandSide then 38 對自動封箱 拆箱現(xiàn)在的jdk1 5和jdk5規(guī)則自動在這種情況下進(jìn)行封箱 拆箱處理 當(dāng)進(jìn)行字段約束的求值時

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論