<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 19, 文章 - 93, 評論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    Java規(guī)則引擎工作原理及其應(yīng)用

    摘 要 Java規(guī)則引擎是一種嵌入在Java程序中的組件,它的任務(wù)是把當(dāng)前提交給引擎的Java數(shù)據(jù)對象與加載在引擎中的業(yè)務(wù)規(guī)則進(jìn)行測試和比對,激活那些符合當(dāng)前數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則,根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,觸發(fā)應(yīng)用程序中對應(yīng)的操作。 引言目前,Java社區(qū)推動并發(fā)展了一種引人注目的新技術(shù)——Java規(guī)則引擎(Rule Engine)。利用它就可以在應(yīng)用系統(tǒng)中分離商業(yè)決策者的商業(yè)決策邏輯和應(yīng)用開發(fā)者的技術(shù)決策,并把這些商業(yè)決策放在中心數(shù)據(jù)庫或其他統(tǒng)一的地方,讓它們能在運(yùn)行時可以動態(tài)地管理和修改,從而為企業(yè)保持靈活性和競爭力提供有效的技術(shù)支持。

    規(guī)則引擎的原理
    1、基于規(guī)則的專家系統(tǒng)(RBES)簡介Java規(guī)則引擎起源于基于規(guī)則的專家系統(tǒng),而基于規(guī)則的專家系統(tǒng)又是專家系統(tǒng)的其中一個分支。專家系統(tǒng)屬于人工智能的范疇,它模仿人類的推理方式,使用試探性的方法進(jìn)行推理,并使用人類能理解的術(shù)語解釋和證明它的推理結(jié)論。為了更深入地了解Java規(guī)則引擎,下面簡要地介紹基于規(guī)則的專家系統(tǒng)。RBES包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和Inference Engine。它們的結(jié)構(gòu)如下系統(tǒng)所示:

    圖1 基于規(guī)則的專家系統(tǒng)構(gòu)成如圖1所示,推理引擎包括三部分:模式匹配器(Pattern Matcher)、議程(Agenda)和執(zhí)行引擎(Execution Engine)。推理引擎通過決定哪些規(guī)則滿足事實(shí)或目標(biāo),并授予規(guī)則優(yōu)先級,滿足事實(shí)或目標(biāo)的規(guī)則被加入議程。模式匹配器決定選擇執(zhí)行哪個規(guī)則,何時執(zhí)行規(guī)則;議程管理模式匹配器挑選出來的規(guī)則的執(zhí)行次序;執(zhí)行引擎負(fù)責(zé)執(zhí)行規(guī)則和其他動作。和人類的思維相對應(yīng),推理引擎存在兩者推理方式:演繹法(Forward-Chaining)和歸納法(Backward-Chaining)。演繹法從一個初始的事實(shí)出發(fā),不斷地應(yīng)用規(guī)則得出結(jié)論(或執(zhí)行指定的動作)。而歸納法則是根據(jù)假設(shè),不斷地尋找符合假設(shè)的事實(shí)。Rete算法是目前效率最高的一個Forward-Chaining推理算法,許多Java規(guī)則引擎都是基于Rete算法來進(jìn)行推理計算的。推理引擎的推理步驟如下:(1)將初始數(shù)據(jù)(fact)輸入Working Memory。(2)使用Pattern Matcher比較規(guī)則庫(rule base)中的規(guī)則(rule)和數(shù)據(jù)(fact)。(3)如果執(zhí)行規(guī)則存在沖突(conflict),即同時激活了多個規(guī)則,將沖突的規(guī)則放入沖突集合。(4)解決沖突,將激活的規(guī)則按順序放入Agenda。(5)使用執(zhí)行引擎執(zhí)行Agenda中的規(guī)則。重復(fù)步驟2至5,直到執(zhí)行完畢所有Agenda中的規(guī)則。上述即是規(guī)則引擎的原始架構(gòu),Java規(guī)則引擎就是從這一原始架構(gòu)演變而來的。2、規(guī)則引擎相關(guān)構(gòu)件規(guī)則引擎是一種根據(jù)規(guī)則中包含的指定過濾條件,判斷其能否匹配運(yùn)行時刻的實(shí)時條件來執(zhí)行規(guī)則中所規(guī)定的動作的引擎。與規(guī)則引擎相關(guān)的有四個基本概念,為更好地理解規(guī)則引擎的工作原理,下面將對這些概念進(jìn)行逐一介紹。1)信息元(Information Unit)信息元是規(guī)則引擎的基本建筑塊,它是一個包含了特定事件的所有信息的對象。這些信息包括:消息、產(chǎn)生事件的應(yīng)用程序標(biāo)識、事件產(chǎn)生事件、信息元類型、相關(guān)規(guī)則集、通用方法、通用屬性以及一些系統(tǒng)相關(guān)信息等等。 2)信息服務(wù)(Information Services)信息服務(wù)產(chǎn)生信息元對象。每個信息服務(wù)產(chǎn)生它自己類型相對應(yīng)的信息元對象。即特定信息服務(wù)根據(jù)信息元所產(chǎn)生每個信息元對象有相同的格式,但可以有不同的屬性和規(guī)則集。需要注意的是,在一臺機(jī)器上可以運(yùn)行許多不同的信息服務(wù),還可以運(yùn)行同一信息服務(wù)的不同實(shí)例。但無論如何,每個信息服務(wù)只產(chǎn)生它自己類型相對應(yīng)的信息元。3)規(guī)則集(Rule Set)顧名思義,規(guī)則集就是許多規(guī)則的集合。每條規(guī)則包含一個條件過濾器和多個動作。一個條件過濾器可以包含多個過濾條件。條件過濾器是多個布爾表達(dá)式的組合,其組合結(jié)果仍然是一個布爾類型的。在程序運(yùn)行時,動作將會在條件過濾器值為真的情況下執(zhí)行。除了一般的執(zhí)行動作,還有三類比較特別的動作,它們分別是:放棄動作(Discard Action)、包含動作(Include Action)和使信息元對象內(nèi)容持久化的動作。前兩種動作類型的區(qū)別將在2.3規(guī)則引擎工作機(jī)制小節(jié)介紹。4)隊(duì)列管理器(Queue Manager)隊(duì)列管理器用來管理來自不同信息服務(wù)的信息元對象的隊(duì)列。下面將研究規(guī)則引擎的這些相關(guān)構(gòu)件是如何協(xié)同工作的。如圖2所示,處理過程分為四個階段進(jìn)行:信息服務(wù)接受事件并將其轉(zhuǎn)化為信息元,然后這些信息元被傳給隊(duì)列管理器,最后規(guī)則引擎接收這些信息元并應(yīng)用它們自身攜帶的規(guī)則加以執(zhí)行,直到隊(duì)列管理器中不再有信息元。

    圖2 處理過程協(xié)作圖3、規(guī)則引擎的工作機(jī)制下面專門研究規(guī)則引擎的內(nèi)部處理過程。如圖3所示,規(guī)則引擎從隊(duì)列管理器中依次接收信息元,然后依規(guī)則的定義順序檢查信息元所帶規(guī)則集中的規(guī)則。如圖所示,規(guī)則引擎檢查第一個規(guī)則并對其條件過濾器求值,如果值為假,所有與此規(guī)則相關(guān)的動作皆被忽略并繼續(xù)執(zhí)行下一條規(guī)則。如果第二條規(guī)則的過濾器值為真,所有與此規(guī)則相關(guān)的動作皆依定義順序執(zhí)行,執(zhí)行完畢繼續(xù)下一條規(guī)則。該信息元中的所有規(guī)則執(zhí)行完畢后,信息元將被銷毀,然后從隊(duì)列管理器接收下一個信息元。在這個過程中并未考慮兩個特殊動作:放棄動作(Discard Action)和包含動作(Include Action)。放棄動作如果被執(zhí)行,將會跳過其所在信息元中接下來的所有規(guī)則,并銷毀所在信息元,規(guī)則引擎繼續(xù)接收隊(duì)列管理器中的下一個信息元。包含動作其實(shí)就是動作中包含其它現(xiàn)存規(guī)則集的動作。包含動作如果被執(zhí)行,規(guī)則引擎將暫停并進(jìn)入被包含的規(guī)則集,執(zhí)行完畢后,規(guī)則引擎還會返回原來暫停的地方繼續(xù)執(zhí)行。這一過程將遞歸進(jìn)行。

    圖3 規(guī)則引擎工作機(jī)制Java規(guī)則引擎的工作機(jī)制與上述規(guī)則引擎機(jī)制十分類似,只不過對上述概念進(jìn)行了重新包裝組合。Java規(guī)則引擎對提交給引擎的Java數(shù)據(jù)對象進(jìn)行檢索,根據(jù)這些對象的當(dāng)前屬性值和它們之間的關(guān)系,從加載到引擎的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,創(chuàng)建這些規(guī)則的執(zhí)行實(shí)例。這些實(shí)例將在引擎接到執(zhí)行指令時、依照某種優(yōu)先序依次執(zhí)行。一般來講,Java規(guī)則引擎內(nèi)部由下面幾個部分構(gòu)成:工作內(nèi)存(Working Memory)即工作區(qū),用于存放被引擎引用的數(shù)據(jù)對象集合;規(guī)則執(zhí)行隊(duì)列,用于存放被激活的規(guī)則執(zhí)行實(shí)例;靜態(tài)規(guī)則區(qū),用于存放所有被加載的業(yè)務(wù)規(guī)則,這些規(guī)則將按照某種數(shù)據(jù)結(jié)構(gòu)組織,當(dāng)工作區(qū)中的數(shù)據(jù)發(fā)生改變后,引擎需要迅速根據(jù)工作區(qū)中的對象現(xiàn)狀,調(diào)整規(guī)則執(zhí)行隊(duì)列中的規(guī)則執(zhí)行實(shí)例。Java規(guī)則引擎的結(jié)構(gòu)示意圖如圖4所示。

    圖4 Java規(guī)則引擎工作機(jī)制當(dāng)引擎執(zhí)行時,會根據(jù)規(guī)則執(zhí)行隊(duì)列中的優(yōu)先順序逐條執(zhí)行規(guī)則執(zhí)行實(shí)例,由于規(guī)則的執(zhí)行部分可能會改變工作區(qū)的數(shù)據(jù)對象,從而會使隊(duì)列中的某些規(guī)則執(zhí)行實(shí)例因?yàn)闂l件改變而失效,必須從隊(duì)列中撤銷,也可能會激活原來不滿足條件的規(guī)則,生成新的規(guī)則執(zhí)行實(shí)例進(jìn)入隊(duì)列。于是就產(chǎn)生了一種“動態(tài)”的規(guī)則執(zhí)行鏈,形成規(guī)則的推理機(jī)制。這種規(guī)則的“鏈?zhǔn)健狈磻?yīng)完全是由工作區(qū)中的數(shù)據(jù)驅(qū)動的。 任何一個規(guī)則引擎都需要很好地解決規(guī)則的推理機(jī)制和規(guī)則條件匹配的效率問題。規(guī)則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區(qū)中的數(shù)據(jù)對象,從加載的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,生成規(guī)則執(zhí)行實(shí)例。1982年美國卡耐基·梅隆大學(xué)的Charles L. Forgy發(fā)明了一種叫Rete算法,很好地解決了這方面的問題。目前世界頂尖的商用業(yè)務(wù)規(guī)則引擎產(chǎn)品基本上都使用Rete算法。

    posted on 2006-12-15 15:19 BPM 閱讀(532) 評論(0)  編輯  收藏 所屬分類: 規(guī)則引擎

    主站蜘蛛池模板: 国产做床爱无遮挡免费视频| 在线中文高清资源免费观看| 亚洲天堂电影在线观看| 99热在线精品免费全部my| 国产亚洲日韩在线a不卡| 亚洲日本va在线视频观看| 皇色在线视频免费网站| 成人a毛片免费视频观看| 久久精品国产亚洲av影院| 国产成人高清精品免费软件| a级毛片免费播放| 亚洲乱理伦片在线观看中字| 久久亚洲AV永久无码精品| 日韩在线免费视频| yellow视频免费在线观看| 亚洲国产精品网站久久| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲高清无在码在线无弹窗| 热久久精品免费视频| 国产免费一区二区三区不卡| 亚洲乱码中文字幕在线| 亚洲国产综合专区在线电影| 四虎影视永久免费观看地址| 1000部羞羞禁止免费观看视频| 黄页免费视频播放在线播放| 国产极品美女高潮抽搐免费网站| jizz免费在线观看| 亚洲AV成人噜噜无码网站| 亚洲香蕉网久久综合影视| 一二三四在线播放免费观看中文版视频 | 国产色无码精品视频免费| 亚洲砖码砖专无区2023| 亚洲国产精品va在线播放| 国产一级淫片a免费播放口之| 99久久免费看国产精品| 好猛好深好爽好硬免费视频| 亚洲欧美精品午睡沙发| 亚洲的天堂av无码| 好看的电影网站亚洲一区| 国产真实伦在线视频免费观看| 亚欧人成精品免费观看|