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

2021-04-27 16:24:33 字數 1404 閱讀 9468

4.6  連線節點(join node)

當乙個連線節點的alpha記憶體中加入乙個事實時,將引發此連線節點的right activation,當乙個連線結點的beta記憶體中加入乙個token時,將引發此連線節點的left activation。

連線節點的資料結構包括:指向其alpha記憶體和beta記憶體的指標,變數連線檢測的說明,指向子節點的指標。

當乙個連線節點的alpha記憶體中加入某個事實時,引發right activation。此處,因為right activation 的順序不同,有可能產生冗餘tokens(即在同乙個beta記憶體裡儲存有兩個或以上的相同的token)。結果這個問題的方法有:每次在beta記憶體中加入乙個新的token時,都檢測是否已存在相同的token。這個方法的缺點就是使系統的處理速度變慢。另外乙個較好的方法是把right activation的順序確定下來。

4.7  去除事實(removals of facts)

當某個事實從工作記憶體總刪除時,需要更新含有此事實的alpha記憶體和beta記憶體,有以下幾種方法。

在原始的rete演算法中,刪除操作和新增操作採用同一種方式。稱此方式為rematch-based removal。主要思想是給每個新增或刪除操作乙個tag,用來表明此操作是新增事實或刪除事實。刪除操作的具體執行過程同上面討論的新增乙個事實的過程類似。此方法與其他方法相比,速度較慢。因為刪除操作與新增操作的工作量幾乎相同。在新增事實過程中所獲得的資訊並沒有在執行刪除操作時加以利用。下面有三種改進的演算法。

在scan-based removal中,當乙個連線節點的alpha記憶體中的某個事實w被去除時,把w傳給此連線節點的輸出記憶體,在此記憶體中尋找最後乙個元素為w的tokens,將這些tokens刪除,並且把這些tokens傳給此連線節點的子節點。在在子節點中做類似刪除操作。(scales,1986)通過使用此方法代替原有方法,獲得28%的加速。(barachini,1991)獲得了10%的加速。

在list-base removal和tree-based removal中使用了這樣乙個原理,即給事實集合以及tokens的資料結構上增添額外的指標,當某個事實被刪除時,可以沿著這些指標刪除需要刪除的元素。

在list-based removal(scales ,1986)中,把每個事實w上新增乙個包含此事實的tokens的鍊錶。當w被刪除時,只要沿著此鍊錶刪除這些tokens。缺點就是需要大量的空間來儲存鍊錶,同時在建立乙個新token時也可能花費大量的額外時間。

在tree-base removal中,在每個事實w上新增乙個鍊錶,這些鍊錶指向把w作為最後乙個元素的tokens。同時,在每個tokens上,新增乙個指向此tokens的子節點的鍊錶。當w被刪除時,遍歷以tokens為根的子樹,刪除子樹上的所有元素。當然,這些額外指標將占用更多記憶體,同時,建立這些指標也耗費時間。經驗表明,採用此方法比原始方法要節省時間。

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

使用rete演算法的模組系統,有四個入口,分別是新增事實 add wme 去除事實 remove wme 新增規則 add production 去除規則 remove production 上面的主要介紹了建立rete網路後新增事實的過程。下面先具體介紹alpha網路的建立和新增事實的過程,然後再...

drools規則引擎3rete演算法

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

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

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