Rete算法


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)

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM