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

使用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。但是,擁有更快的訪問速度。通常,選擇的標準在於使用鏈表時訪問某個元素的用的時間是否可以承受。

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