rete算法(轉)

原文地址:http://sophieling.iteye.com/blog/837926算法

 

 最近在研讀Jena的推理機源代碼,Jena推理機的實現主要也是用的RETE算法,因此研究了RETE算法的基本流程。RETE算法是由Forgy在他的論文《A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem》中提出的。網絡

 

1 RETE算法的基本思想 

RETE算法是一個用於產生式系統的高效模式匹配算法。在一個產生式系統中,被處理的數據叫作working memory,用於斷定的規則分爲兩個部分LHSleft-hand-side)和RHSright hand side),分別表示前提和結論。主要流程能夠分爲如下步驟:ide

(1)Match:找出符合LHS部分的working memory集合spa

(2)Confilict resolution:選出一個條件被知足的規則orm

(3)Act:執行RHS的內容blog

(4)返回1  get

RETE算法主要改進Match的處理過程,經過構建一個網絡進行匹配。

2
算法詳細描述
it

 

RETE網絡主要分爲兩個部分,alpha網絡和beta網絡。以下圖所示。io

 

(1)alpha網絡:過濾working memory,找出符合規則中每個模式的集合,生成alpha memory(知足該模式的集合)。有兩種類型的節點,過濾type的節點和其餘條件過濾的節點(我以爲這兩種是依照須要設定的,也並不必定須要兩種節點)。table

(2)Beta網絡:有兩種類型的節點Beta MemoryJoin Node。前者主要存儲Join完成後的集合。後者包含兩個輸入口,分別輸入須要匹配的兩個集合,由Join節點作合併工做傳輸給下一個節點。

3
 匹配過程描述

 

 

(1)導入須要處理的事實到facts集合中。

(2)若是facts不爲空,選擇一個fact進行處理。不然中止匹配過程。

(3)選擇alpha網的第一個節點運行(創建網絡的時候設定的),經過該節點則進入alpha網的下一個節點,直到進入alpha memory。不然跳轉到下一條判斷路徑。

(4)alpha memory的結果加入到beta memory中,若是不爲Terminal節點,則檢測另外一個輸入集合中是否存在知足條件的事實,知足則執行join,進入到下一個beta memory重複執行(3)。若另外一個輸入集合無知足條件的事實,返回到(2)。若是該節點爲Terminal節點,執行ACT並添加到facts中。


4 用一個例子描述過程

(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節點,匹配結束。這樣就獲得知足規則的集合組合了。

     接下來的時間要研究Jena中Rete算法的具體實現方式。

相關文章
相關標籤/搜索