規則引擎研究 Rete演算法(2)

2021-08-27 06:32:53 字數 2787 閱讀 3182

使用rete演算法的模組系統,有四個入口,分別是新增事實(add-wme)、去除事實(remove-wme)、新增規則(add-production)、去除規則(remove-production)。

上面的主要介紹了建立rete網路後新增事實的過程。下面先具體介紹alpha網路的建立和新增事實的過程,然後再介紹另外三個過程。

4.4 alpha網路

當事實新增到工作記憶體後,alpha網路對事實進行必要的型別檢測並把事實存放到相應的alpha記憶體裡。有幾種方法來尋找合適的alpha記憶體節點。

4.4.1 資料流網路

最直接的方式就是使用乙個簡單的資料流網路。

下圖就是乙個採用資料流網路建立的alpha網路。

上面的alpha網路僅僅檢測條件中的常量,如attribute項上的常量有on,color,left-of;value項上的常量red maize blue green white。

4.4.2 帶hashing的資料流網路

上面的資料流網路的乙個最大的缺點就是,當某個節點的扇出(fan-out)很大時,將會做大量的無用功(wasted work)。比如上圖中對顏色的測試,某些專家系統可能含有大量的顏色,那麼將會有大量的比較操作,從而造成匹配操作變慢。

乙個解決這個問題的方法就是對於那些帶有很大扇出的節點,採用hash表(或者平衡二叉樹)來判斷。

從上面的討論可知,alpha網路非常有效,隨著事實集合的變化,alpha網路可以幾乎可以馬上作出相應處理。beta節點的處理佔到了整個系統匹配的絕大部分時間。所以一般研究的都針對網路中的beta節點進行。

4.5 記憶體節點

alpha記憶體儲存事實集合,beta記憶體儲存tokens(tokens指規則中已經匹配好的事實繫結)。

4.5.1 事實集合的結構

事實集合最簡單的結構是採用鍊錶結構。但是為了獲得更高的效率,一般也給每個事實記憶體加上索引(indexing)。最常用的索引方法是採用hash表。也可以採用樹,但在多數rete演算法實現上並不常用,(barachini,1991)發現hash表一般比非平衡二叉樹的效能好。索引方法的缺點有兩個:新增刪除元素費時,降低了節點的復用度。所以索引方法在那些節點記憶體中並不包含很多元素的系統中不適用。

4.5.2 token的結構

可以使用陣列或鍊錶來儲存token。使用陣列需要更多的空間,同時需要更多的時間來建立token。但是,擁有更快的訪問速度。通常,選擇的標準在於使用鍊錶時訪問某個元素的用的時間是否可以承受。

使用rete演算法的模組系統,有四個入口,分別是新增事實(add-wme)、去除事實(remove-wme)、新增規則(add-production)、去除規則(remove-production)。

上面的主要介紹了建立rete網路後新增事實的過程。下面先具體介紹alpha網路的建立和新增事實的過程,然後再介紹另外三個過程。

4.4 alpha網路

當事實新增到工作記憶體後,alpha網路對事實進行必要的型別檢測並把事實存放到相應的alpha記憶體裡。有幾種方法來尋找合適的alpha記憶體節點。

4.4.1 資料流網路

最直接的方式就是使用乙個簡單的資料流網路。

下圖就是乙個採用資料流網路建立的alpha網路。

上面的alpha網路僅僅檢測條件中的常量,如attribute項上的常量有on,color,left-of;value項上的常量red maize blue green white。

4.4.2 帶hashing的資料流網路

上面的資料流網路的乙個最大的缺點就是,當某個節點的扇出(fan-out)很大時,將會做大量的無用功(wasted work)。比如上圖中對顏色的測試,某些專家系統可能含有大量的顏色,那麼將會有大量的比較操作,從而造成匹配操作變慢。

乙個解決這個問題的方法就是對於那些帶有很大扇出的節點,採用hash表(或者平衡二叉樹)來判斷。

從上面的討論可知,alpha網路非常有效,隨著事實集合的變化,alpha網路可以幾乎可以馬上作出相應處理。beta節點的處理佔到了整個系統匹配的絕大部分時間。所以一般研究的都針對網路中的beta節點進行。

4.5 記憶體節點

alpha記憶體儲存事實集合,beta記憶體儲存tokens(tokens指規則中已經匹配好的事實繫結)。

4.5.1 事實集合的結構

事實集合最簡單的結構是採用鍊錶結構。但是為了獲得更高的效率,一般也給每個事實記憶體加上索引(indexing)。最常用的索引方法是採用hash表。也可以採用樹,但在多數rete演算法實現上並不常用,(barachini,1991)發現hash表一般比非平衡二叉樹的效能好。索引方法的缺點有兩個:新增刪除元素費時,降低了節點的復用度。所以索引方法在那些節點記憶體中並不包含很多元素的系統中不適用。

4.5.2 token的結構

可以使用陣列或鍊錶來儲存token。使用陣列需要更多的空間,同時需要更多的時間來建立token。但是,擁有更快的訪問速度。通常,選擇的標準在於使用鍊錶時訪問某個元素的用的時間是否可以承受。

規則引擎研究(一) Rete演算法(3)

4.6 連線節點 join node 當乙個連線節點的alpha記憶體中加入乙個事實時,將引發此連線節點的right activation,當乙個連線結點的beta記憶體中加入乙個token時,將引發此連線節點的left activation。連線節點的資料結構包括 指向其alpha記憶體和beta...

drools規則引擎3rete演算法

本人初次了解,歡迎指正 1.規則編譯 指根據規則集生成推理網路的過程 2.執行執行 指將資料送入推理網路進行篩選的過程。舉個栗子 rule 規則 賬戶餘額小於100的北苑路姓張的學生 when account account balance 100,type account.type.學生 cust...

java規則引擎 之Drools之Rete演算法

一 規則引擎 規則引擎的核心是pattern matcher 模式匹配器 不管是正向推理還是反向推理,首先要解決乙個模式匹配的問題。對於規則的模式匹配,可以定義為 乙個規則是一組模式的集合。如果事實 假設的狀態符合該規則的所有模式,則稱為該規則是可滿足的。模式匹配的任務就是將事實 假設的狀態與規則庫...