這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在上篇部落格中,介紹了策略型商務邏輯處理中幾種選擇,其中有一種選擇就是利用規則引擎來進行邏輯處理。其實藏在規則引擎的底層中還是有很多演算法的,其中有一種演算法是rete演算法,最近正好也關注演算法,就簡單的學習了一下,因為對這個演算法理解的非常清楚,所以如果有有對這個演算法熟悉的朋友,可以給予指正。
RETE演算法是一個用於產生式系統的高效模式比對演算法。在一個產生式系統中,被處理的資料叫做working memory,用於判定的規則分為兩個部分LHS(left-hand-side)和RHS(right hand side),分別表示前提和結論。主要流程可以分為以下步驟:
- Match:找出符合LHS部分的working memory集合
- Confilict resolution:選出一個條件被滿足的規則
- Act:執行RHS的內容
- 返回1
RETE演算法主要改進Match的處理過程,通過構建一個網路進行匹配。
演算法詳細描述
RETE網路主要分為兩個部分,alpha網路和beta網路。如所示(圖片引用其他網站)。
(1)alpha網路:過濾working memory,找出符合規則中每一個模式的集合,產生alpha memory(滿足該模式的集合)。有兩種類型的節點,過濾type的節點和其他條件過濾的節點。
(2)Beta網路:有兩種類型的節點Beta Memory和Join Node。前者主要儲存Join完成後的集合。後者包含兩個輸入口,分別輸入需要匹配的兩個集合,由Join節點做合并工作傳輸給下一個節點。
匹配流程說明
- 匯入需要處理的事實到facts集合中。
- 如果facts不為空白,選擇一個fact進行處理。否則停止匹配過程。
- 選擇alpha網的第一個節點運行(建立網路的時候設定的),通過該節點則進入alpha網的下一個節點,直到進入alpha memory。否則跳轉到下一條判斷路徑
- 將alpha memory的結果加入到beta memory中,如果不為Terminal節點,則檢測另一個輸入集合中是否存在滿足條件的事實,滿足則執行join,進入到下一個beta memory重複執行3。若另一個輸入集合無滿足條件的事實,返回到2。如果該節點為Terminal節點,執行ACT並添加到facts中。
用一個例子描述過程
(1)現在WME中有以下這些事實。
w1:(B1 ^on B2)
w2:(B1 ^on B3)
w3:(B1 ^color red)
w4:(B2 ^on table)
w5:(B2 ^left-of B3)
w6:(B2 ^color blue)
w7:(B3 ^left-of B4)
w8:(B3 ^on table)
w9:(B3 ^color red)
(2)下面描述規則
下面是三條匹配條件
C1: (<x> ^on <y>)
C2:(<y> ^left-of <z>)
C3:(<z> ^color red)
下面是規則要滿足的所有條件,即所有LHS
p1 has conditions C1^C2^C3
p2 has conditions C1^C2^C4^C5
p3 has conditions C1^C2^C4^C3
(3)推理描述
根據Ci,圖中的藍色alpha結點應該有三種,分別判定on,left-of和color。則黃色的alpha memory中包含三個集合,分別是
滿足C1:{w1 w2 w4 w8}
滿足C2:{w5 w7}
滿足C3:{w2 w6 w9}
以p1為例,首先以C1,C2為輸入,在綠色Dummy Input節點中進行操作,並傳入到梅紅色beta momory中,此時這個節點儲存的是(w1^w5,w2^w7)。然後以這個集合和C3為輸入,操作得出w1^w5^w9,此時發現沒有更多的模式需要匹配,到達Terminal節點,匹配結束。這樣就得到滿足規則的集合組合了。
通過這些理論和一個執行個體應該對rete演算法清除了些,下面部落格介紹drools規則引擎工具,它是一個實現Rete演算法的很好的規則引擎架構。