前邊說了,,Drools采用的是RETE算法,。那啥是rete算法。 定義:Rete算法由 Carnegie Mellon University 的Dr Charles L. Forgy設(shè)計(jì)發(fā)明,,是一個(gè)用來實(shí)現(xiàn)產(chǎn)生式規(guī)則系統(tǒng)(前邊提到的production/inference好像就該翻譯為產(chǎn)生式規(guī)則)的高效模式匹配算法,。它可以被分為兩部分:規(guī)則編譯和運(yùn)行時(shí)執(zhí)行。規(guī)則編譯是指根據(jù)規(guī)則集生成推理網(wǎng)絡(luò)的過程,,運(yùn)行時(shí)執(zhí)行指將數(shù)據(jù)送入推理網(wǎng)絡(luò)進(jìn)行篩選的過程,。 相關(guān)概念: (1)事實(shí)(Fact):對(duì)象之間及對(duì)象屬性之間的關(guān)系 (2)規(guī)則(rule):是由條件和結(jié)論構(gòu)成的推理語句,一般表示為if...Then,。一個(gè)規(guī)則的if部分稱為LHS,,then部分稱為RHS。 (3)模式(module):就是指IF語句的條件,。這里IF條件可能是有幾個(gè)更小的條件組成的大條件,。模式就是指的不能在繼續(xù)分割下去的最小的原子條件。 RETE推理網(wǎng)絡(luò)的生成過程: 簡單點(diǎn)說,,就是從規(guī)則集{規(guī)則1,,規(guī)則2........}中拿出一條來,,根據(jù)一定算法,變成RETE推理網(wǎng)絡(luò)的節(jié)點(diǎn),。不斷循環(huán)將所有規(guī)則都處理完,,RETE推理網(wǎng)絡(luò)就生成了。 這里的一定算法具體過程如下: 1,、創(chuàng)建root節(jié)點(diǎn)(根節(jié)點(diǎn)),,推理網(wǎng)絡(luò)的入口。 2,、拿到規(guī)則1,,從規(guī)則1中取出模式1(前面說了,模式就是最小的原子條件,,所以規(guī)則模式的關(guān)系是1:n),。 a)檢查模式1中的參數(shù)類型,如果是新類型,,添加一個(gè)類型節(jié)點(diǎn),。 b)檢查模式1對(duì)應(yīng)的Alpha節(jié)點(diǎn)是否存在,如果存在記錄下節(jié)點(diǎn)的位置,;如果沒有,,將模式1作為一個(gè)Alpha節(jié)點(diǎn)加入到網(wǎng)絡(luò)中。同時(shí)根據(jù)Alpha節(jié)點(diǎn)建立Alpah內(nèi)存表,。 c)重復(fù)b,,直到處理完所有模式。 d)組合Beta節(jié)點(diǎn): Beta(2)左輸入節(jié)點(diǎn)為Alpha(1),,右輸入節(jié)點(diǎn)為Alpha(2) Beta(i)左輸入節(jié)點(diǎn)是Beta(i-1),右輸入節(jié)點(diǎn)為Alpha(i) e)重復(fù)d,,直到所有Beta節(jié)點(diǎn)處理完畢 f)將動(dòng)作Then部分封裝成最后節(jié)點(diǎn)做為Beta(n) 3、重復(fù)2,,直到所有規(guī)則處理完畢 下面是一個(gè)從網(wǎng)上找得例子: 規(guī)則P1: LHS: C1:(年紀(jì):研2) C2:(性別:男) C3:(身材:較瘦) C4:(身高:大于175cm) RHS: 韓啟超 RETE圖如下: 圖中各圖形與節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系是:
TypeNode: AlphaNode: BetaNode: 有關(guān)RETE正式的解釋,,到http://docs./drools/release/6.0.0.Final/drools-docs/html/HybridReasoningChapter.html#ReteOO。 |
|