RETE演算法介紹

2021-06-18 21:58:20 字數 2631 閱讀 4958

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演算法筆記

今天晚上看了一下rete演算法,感覺理解了,記錄如下 1,規則 rule 例如 if p then r 就是一條規則。其中p包含乙個或多個部分,具體表示如下 if p1 p2 p3 then r。其中p1 p2等部分的表現形式被抽象 泛化 為 on 或 and 等一般 形式,類似於c 中的模板類,在...

Rete快速匹配演算法

rete 快速匹配演算法 rete 演算法首先是由c.l.forgy在1979年實現的。該演算法是乙個快速的模式匹配演算法,它通過儲存關於規則的資訊而獲得速度。模式匹配的基本概念 可滿足規則 乙個規則稱為可滿足的,若規則的每一模式均能在當前工作儲存器中找到可匹配的事實,且模式之間的同一變數能取得統一...

Rete演算法初解

rete匹配演算法是一種進行大量模式集合和大量物件集合間比較的高效方法,通過這種方法找出所有匹配各個模式的物件。rete演算法以犧牲記憶體換取高速的策略 rete演算法分為兩個部分 規則編譯 rule compilation 執行時執行 runtime execution 規則編譯 功能 如何在pr...