規則引擎研究(一)——Rete算法(1)

RETE算法介紹
一、 rete概述
Rete算法是一種前向規則快速匹配算法,其匹配速度與規則數目無關。Rete是拉丁文,對應英文是net,
也就是網絡。Rete算法通過形成一個rete網絡進行模式匹配,利用基於規則的系統的兩個特徵,即時間冗餘性(Temporal redundancy)和結構相似性(structural similarity),提高系統模式匹配效率。
二、 相關概念
2.1 事實(fact):
事實:對象之間及對象屬性之間的多元關係。爲簡單起見,事實用一個三元組來表示:(identifier
^attribute value),例如如下事實:
w1:(B1 ^ on B2) w6:(B2 ^color blue)
w2:(B1 ^ on B3) w7:(B3 ^left-of B4)
w3:(B1 ^ color red) w8:(B3 ^on table)
w4:(B2 ^on table) w9:(B3 ^color red)
w5:(B2 ^left-of B3)
2.2 規則(rule):
由條件和結論構成的推理語句,當存在事實滿足條件時,相應結論被激活。一條規則的一般形式如下:
(name-of-this-production
LHS /*one or more conditions*/
-->
RHS /*one or more actions*/
)
其中LHS爲條件部分,RHS爲結論部分。
下面爲一條規則的例子:
(find-stack-of-two-blocks-to-the-left-of-a-red-block
(^on)
(^left-of)
(^color red)
-->
...RHS...
)
2.3 模式(patten):
模式:規則的IF部分,已知事實的泛化形式,未實例化的多元關係。
(^on)
(^left-of)
(^color red)
三、 模式匹配的一般算法
規則主要由兩部分組成:條件和結論,條件部分也稱爲左端(記爲LHS, left-hand side),結論部分也
稱爲右端(記爲RHS, right-hand side)。爲分析方便,假設系統中有N條規則,每個規則的條件部分平均有P個模式,工作內存中有M個事實,事實可以理解爲需要處理的數據對象。
規則匹配,就是對每一個規則r, 判斷當前的事實o是否使LHS(r)=True,如果是,就把規則r的實例r(o)加
到衝突集當中。所謂規則r的實例就是用數據對象o的值代替規則r的相應參數,即綁定了數據對象o的規則r。
規則匹配的一般算法:
1) 從N條規則中取出一條r;
2) 從M個事實中取出P個事實的一個組合c;
3) 用c測試LHS(r),如果LHS(r(c))=True,將RHS(r(c))加入衝突集中;
4) 取出下一個組合c,goto 3;
5) 取出下一條規則r,goto 2;
四、 RETE算法
Rete算法的編譯結果是規則集對應的Rete網絡,如下圖。Rete網絡是一個事實可以在其中流動的圖。Rete
網絡的節點可以分爲四類:根節點(root)、類型節點(typenode)、alpha節點、beta節點。其中,根結點是一個虛擬節點,是構建rete網絡的入口。類型節點中存儲事實的各種類型,各個事實從對應的類型節點進入rete網絡。

4.1 建立rete網絡
Rete網絡的編譯算法如下:
1) 創建根;
2) 加入規則1(Alpha節點從1開始,Beta節點從2開始);
a. 取出模式1,檢查模式中的參數類型,如果是新類型,則加入一個類型節點;
b. 檢查模式1對應的Alpha節點是否已存在,如果存在則記錄下節點位置,如果沒有則將模式1作爲一個
Alpha節點加入到網絡中,同時根據Alpha節點的模式建立Alpha內存表;
c. 重複b直到所有的模式處理完畢;
d. 組合Beta節點,按照如下方式:
   Beta(2)左輸入節點爲Alpha(1),右輸入節點爲Alpha(2)
   Beta(i)左輸入節點爲Beta(i-1),右輸入節點爲Alpha(i) i>2
並將兩個父節點的內存表內聯成爲自己的內存表;
e. 重複d直到所有的Beta節點處理完畢;
f. 將動作(Then部分)封裝成葉節點(Action節點)作爲Beta(n)的輸出節點;
3) 重複2)直到所有規則處理完畢;
可以把rete算法類比到關係型數據庫操作。
把事實集合看作一個關係,每條規則看作一個查詢,將每個事實綁定到每個模式上的操作看作一個Select
操作,記一條規則爲P,規則中的模式爲c1,c2,…,ci, Select操作的結果記爲r(ci),則規則P的匹配即爲r(c1)◇r(c2)◇…◇(rci)。其中◇表示關係的連接(Join)操作。


使用一個rete的過程:
1) 對於每個事實,通過select 操作進行過濾,使事實沿着rete網達到合適的alpha節點。
2) 對於收到的每一個事實的alpha節點,用Project(投影操作)將那些適當的變量綁定分離出來。使各個新的變量綁定集沿rete網到達適當的bete節點。
3) 對於收到新的變量綁定的beta節點,使用Project操作產生新的綁定集,使這些新的變量綁定沿rete網絡至下一個beta節點以至最後的Project。
4) 對於每條規則,用project操作將結論實例化所需的綁定分離出來。

4.2 使用rete網絡進行匹配

下面爲的圖示顯示了連接(Join)操作和投影(Project)的執行過程。

 


Rete算法有兩個特點使其優於傳統的模式匹配算法。
1、狀態保存
事實集合中的每次變化,其匹配後的狀態都被保存再alpha和beta節點中。在下一次事實集合發生變化時
,絕大多數的結果都不需要變化,rete算法通過保存操作過程中的狀態,避免了大量的重複計算。Rete算法主要是爲那些事實集合變化不大的系統設計的,當每次事實集合的變化非常劇烈時,rete的狀態保存算法效果並不理想。
2、節點共享
另一個特點就是不同規則之間含有相同的模式,從而可以共享同一個節點。Rete網絡的各個部分包含各種
不同的節點共享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章