rete匹配演算法是一種進行大量模式集合和大量物件集合間比較的高效方法,通過這種方法找出所有匹配各個模式的物件。
rete演算法以犧牲記憶體換取高速的策略
rete演算法分為兩個部分:規則編譯(rule compilation)、執行時執行(runtime execution).
規則編譯
功能:如何在production memory中產生乙個有效的辨別網路,它具有過濾資料功能
方法:資料通過在網路中流通被過濾。在頂端節點(rootnode)會有很多匹配的資料,經過中間的一些節點(**node)過濾而變少,最後到達終端節點(terminalnode)。
在2023年forgy的**("rete: a fast algorithm for the many pattern/ many object pattern match problem", charles l. forgy, artificial intelligence 19 (1982), 17-37)中,他描述了4種節點:
rootnode
所有物件進入網路的入口,進入後立即進入objecttypenode。objecttypenode確保引擎接下來只作它需要做的事情,即對對相進行過濾、分揀。objecttypenode後流入:alphanodes, leftinputadapternodes和betanodes。
1-input 通稱alphanode
alphanode用來評估字面條件(literal conditions),當乙個物件有多個字面條件的話,逐條評估順序進入相應alphanode。
drools用雜湊法優化從objecttypenode到alphanode的流向。即以字面值(literal value)為key,以alphanode為value加入hashmap。這樣進入objecttypenode的物件根據hashmap就可以找到確切的alphanode.
2-input 通稱betanode
用來對2個隊形進行比較,他們可以是同種或不同種型別,分別叫作左邊(lhs left-hand-side)和右邊(rhs right-hand-side)。乙個betanode的左邊輸入通常是一組物件,右邊輸入是單個物件。
如果左邊輸入的是單個物件怎麼辦?用介面卡leftinputadapternode。它將單個物件轉化為乙個單物件陣列(single object tuple),然後再作為左邊傳到joinnode。
drools中有兩種:joinnode和notnode。左邊輸入是乙個物件陣列。notnode可以完成「exists」檢查。drools通過將所因應用在betanodes上擴充套件了rete演算法(??)。
terminalnode
用來表明一條規則已經匹配了他的所有條件(conditions),這條規則有了乙個完全的匹配(full match)。
一條規則可以有不止乙個terminalnode,如:帶「or」規則。
多個規則間肯能存在部分相同的條件,在規則引擎編譯過程中就表現為存在相同的節點。為了提高效能,drools進行了節點共享。
執行時執行
當乙個應用assert乙個物件,引擎將資料傳遞到root node,中這裡開始遍歷網路。當物件匹配乙個節點的條件,節點就將它記錄到相應的記憶體中(可以帶來更快的效能)(這裡是不是就是用索引?為了盡量少用記憶體)。
Rete演算法筆記
今天晚上看了一下rete演算法,感覺理解了,記錄如下 1,規則 rule 例如 if p then r 就是一條規則。其中p包含乙個或多個部分,具體表示如下 if p1 p2 p3 then r。其中p1 p2等部分的表現形式被抽象 泛化 為 on 或 and 等一般 形式,類似於c 中的模板類,在...
RETE演算法介紹
rete演算法介紹 一 rete概述 rete演算法是一種前向規則快速匹配演算法,其匹配速度與規則數目無關。rete是拉丁文,對應英文是net,也就是網路。rete演算法通過形成乙個rete網路進行模式匹配,利用基於規則的系統的兩個特徵,即時間冗 余性 temporal redundancy 和結構...
Rete快速匹配演算法
rete 快速匹配演算法 rete 演算法首先是由c.l.forgy在1979年實現的。該演算法是乙個快速的模式匹配演算法,它通過儲存關於規則的資訊而獲得速度。模式匹配的基本概念 可滿足規則 乙個規則稱為可滿足的,若規則的每一模式均能在當前工作儲存器中找到可匹配的事實,且模式之間的同一變數能取得統一...