1. 程式人生 > 實用技巧 >rete演算法 模型構建過程

rete演算法 模型構建過程

本文只用於理解rete演算法,通過一個規則的編譯成的網路結構,以及匹配過程去理解rete演算法的核心思想。具體實現,截止寫本文之時,還不瞭解。只是提供一個rete演算法的實現思路。再次重申,只用於理解rete演算法。如有不正確,請交流指正,一定會非常感謝。

  1. 規則內容

IF:
年級是三年級以上,
性別是男的,
年齡小於10歲,
身體健壯,
身高170cm以上,
THEN:
這個男孩是一個籃球苗子,需要培養
  1. 規則編譯網路和匹配過程

匹配過程:

(1)匹配過程中事實在網路節點中的流轉順序為A-->B-->C-->D-->E-->F-->G-->H-->I--->規則匹配通過

(2)從working-Memory中拿出一個待匹配的StudentFact物件,進入根節點然後進行匹配,以下是fact在各個節點中的活動圖

A節點:拿StudentFact的年級數值進行年級匹配,如果年級符合條件,則把該StudentFact的引用記錄到A節點的alpha記憶體區中,退出年級匹配。

B節點:拿StudentFact的性別內容進行性別匹配,如果性別符合條件,則把該StudentFact的引用記錄到B節點的alpha記憶體區中,然後找到B節點左引用的Beta節點,也就是C節點。

C節點:C節點找到自己的左引用也就是A節點,看看A節點的alpha記憶體區中是否存放了StudentFact的引用,如果存放,說明年級和性別兩個條件都符合,則在C節點的Beta記憶體區中存放StudentFact的引用,退出性別匹配。

D節點:拿StudentFact的年齡數值進行年齡條件匹配,如果年齡符合條件,則把該StudentFact的引用記錄到D節點的alpha的記憶體區中,然後找到D節點的左引用的Beta節點,也就是E節點。

E節點:E節點找到自己的左引用也就是C節點,看看C節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放,說明年級,性別,年齡三個條件符合,則在E節點的Beta記憶體區中存放StudentFact的引用,退出年齡匹配。

F節點:拿StudentFact的身體數值進行身體條件匹配,如果身體條件符合,則把該StudentFact的引用記錄到D節點的alpha的記憶體區中,然後找到F節點的左引用的Beta節點,也就是G節點。

G節點:G節點找到自己的左引用也就是E節點,看看E節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放,說明年級,性別,年齡,身體四個條件符合,則在G節點的Beta記憶體區中存放StudentFact的引用,退出身體匹配

H節點:拿StudentFact的身高數值進行身高條件匹配,如果身高條件符合,則把該StudentFact的引用記錄到H節點的alpha的記憶體區中,然後找到H節點的左引用的Beta節點,也就是I節點。

I節點:I節點找到自己的左引用也就是G節點,看看G節點的Beta記憶體區中是否存放了StudentFact的引用,如果存放了,說明年級,性別,年齡,身體,身高五個條件都符合,則在I節點的Beta記憶體區中存放StudentFact引用。同時說明該StudentFact物件匹配了該規則,形成一個議程,加入到衝突區,執行該條件的結果部分:該學生是一個籃球苗子。