【java規則引擎】簡單規則的rete網路示意圖

Love Lenka發表於2017-02-07

一個Fact透過Session新增到規則網路中,如何進行規則匹配的大致過程如下

(1)透過根結點物件從EntryPointNode的Map集合中找到相應的EntryPointNode物件

(2)EntryPointNode物件有一個ObjectTypeNode的Map集合,把fact的class轉化成ClassObjectType,從該集合中找到ObjectTypeNode

(3)OjectTypeNode物件的sink屬性引用著這個fact事實的規則網路

(4)從sink屬性中的連結串列中拿出一個alphaNode進行匹配,遞迴遍歷所有alphaNode的子節點(sink屬性),根據alphaNode中的條件對Fact資料進行比較。

  ==>(向下(子節點)是試圖完整匹配一條規則),如果向下有不匹配的,表示該規則不符合當前fact,退出遞迴,開始向右匹配。

  ==>(向右(nextRightTupleSinkNode屬性)開始試圖匹配另一條規則)。

  ===>向下(當前AlphaNode子節點代表的規則的所有條件模式)匹配,如果所有的子節點alphaNode中隱藏的條件都符合,則完全匹配一條規則,形成議程加入衝突集合,待匹配完所有的規則,再根據規則的優先順序執行匹配上的規則的結果部分,更改Fact的資料。

  ===>向右(進行另一個規則的匹配),如果所有的子節點alphaNode中隱藏的條件都符合,則完全匹配一條規則,形成議程加入衝突集合,待匹配完所有的規則,再根據規則的優先順序執行匹配上的規則的結果部分,更改Fact的資料。

 

相關文章