<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評論-25  文章-1  trackbacks-0
    轉自:http://www.keyusoft.cn/Contentview.aspx?year=2005&month=$10&day=$6&postid=123

    通過一周左右的研究,對規則引擎有了一定的了解。現在寫點東西跟大家一起交流,本文主要針對RETE算法進行描述。我的文筆不太好,如果有什么沒講明白的或是說錯的地方,請給我留言。
    首先申明,我的帖子借鑒了網上很流行的一篇帖子,好像是來自CSDN;還有一點,我不想做太多的名詞解釋,因為我也不是個研究很深的人,定義的不好怕被笑話。
    好現在我們開始。
    首先介紹一些網上對于規則引擎比較好的帖子。
    1、 來自JAVA視頻網
    http://forum.javaeye.com/viewtopic.php?t=7803&postdays=0&postorder=asc&start=0
    2、? RETE算法的最原始的描述,我不知道在哪里找到的,想要的人可以留下E-mail
    3、? CMU的一位博士生的畢業論文,個人覺得非常好,我的很多觀點都是來自這里的,要的人也可以給我發mail? ?mailto:ipointer@163.com
    ?
    接著統一一下術語,很多資料里的術語都非常混亂。
    1、? facts 事實,我們實現的時候,會有一個事實庫。用F表示。
    2、? patterns 模板,事實的一個模型,所有事實庫中的事實都必須滿足模板中的一個。用P表示。
    3、 ? conditions 條件,規則的組成部分。也必須滿足模板庫中的一條模板。用C表示。我們可以這樣理解facts、patterns、conditions之間的關系。 Patterns是一個接口,conditions則是實現這個接口的類,而facts是這個類的實例。
    4、? rules 規則,由一到多個條件構成。一般用and或or連接conditions。用R表示。
    5、? actions 動作,激活一條rule執行的動作。我們這里不作討論。
    6、? 還有一些術語,如:working-memory、production-memory,跟這里的概念大同小異。
    7、? 還有一些,如:alpha-network、beta-network、join-node,我們下面會用到,先放一下,一會討論。
    ?
    引用一下網上很流行的例子,我覺得沒講明白,我在用我的想法解釋一下。
    ?
    假設在規則記憶中有下列三條規則
    ?
    if A(x) and B(x) and C(y) then add D(x)
    if A(x) and B(y) and D(x) then add E(x)
    if A(x) and B(x) and E(x) then delete A(x)
    ?
    RETE算法會先將規則編譯成下列的樹狀架構排序網絡

    而工作記憶內容及順序為{A(1),A(2),B(2),B(3),B(4),C(5)},當工作記憶依序進入網絡后,會依序儲存在符合條件的節點中,直到完全符合條件的推論規則推出推論。以上述例子而言, 最后推得D(2)。
    ?
    讓我們來分析這個例子。
    ?
    模板庫:(這個例子中只有一個模板,算法原描述中有不同的例子, 一般我們會用tuple,元組的形式來定義facts,patterns,condition)
    P: (?A , ?x)? 其中的A可能代表一定的操作,如例子中的A,B,C,D,E ; x代表操作的參數。看看這個模板是不是已經可以描述所有的事實。
    ?
    條件庫:(這里元組的第一項代表實際的操作,第二項代表形參)
    C1: (A , <x>)
    C2: (B , <x>)
    C3: (C , <y>)
    C4: (D , <x>)
    C5: (E , <x>)
    C6: (B , <y>)
    ?
    事實庫:(第二項代表實參)
    F1: (A,1)
    F2: (A,2)
    F3: (B,2)
    F4: (B,3)
    F5: (B,4)
    F6: (C,5)
    ?
    ?????? 規則庫:
    ?????? ? R1: c1^c2^c3
    ?????? ? R2: c1^c2^c4
    ?????? ? R3: c1^c2^c5
    ?
    ??????
    ?????? 有人可能會質疑R1: c1^c2^c3,沒有描述出,原式中:
    if A(x) and B(x) and C(y) then add D(x),A=B的關系。但請仔細看一下,這一點已經在條件庫中定義出來了。
    ?
    ?????? 下面我來描述一下,規則引擎中RETE算法的實現。
    ?????? 首先,我們要定一些規則,根據這些規則,我們的引擎可以編譯出一個樹狀結構,上面的那張圖中是一種簡易的表現,其實在實現的時候不是這個樣子的。
    ?????? 這就是beta-network出場的時候了,根據rules我們就可以確定beta-network,下面,我就畫出本例中的beta-network,為了描述方便,我把alpha-network也畫出來了。
    ??????
    ?
    上圖中,左邊的部分就是beta-network,右邊是alpha-network,圓圈是join-node.
    從上圖中,我們可以驗證,在beta-network中,表現出了rules的內容,其中r1,r2,r3共享了許多BM和join-node,這是由于這些規則中有共同的部分,這樣能加快match的速度。
    右 邊的alpha-network是根據事實庫構建的,其中除alpha-network節點的節點都是根據每一條condition,從事實庫中 match過來的,這一過程是靜態的,即在編譯構建網絡的過程中已經建立的。只要事實庫是穩定的,即沒有大幅度的變化,RETE算法的執行效率應該是非常 高的,其原因就是已經通過靜態的編譯,構建了alpha-network。我們可以驗證一下,滿足c1的事實確實是w1,w2。
    下 面我們就看一下,這個算法是怎么來運行的,即怎么來確定被激活的rules的。從top-node往下遍歷,到一個join-node,與AM for c1的節點匯合,運行到match c1節點。此時,match c1節點的內容就是:w1,w2。繼續往下,與AM for c2匯合(所有可能的組合應該是w1^w3,w1^w4,w1^w5,w2^w3,w2^w4,w2^w5),因為c1^c2要求參數相同,因此, match c1^c2的內容是:w2^w3。再繼續,這里有一個扇出(fan-out),其中只有一個join-node可以被激活,因為旁邊的AM只有一個非空。 因此,也只有R1被激活了。
    解決扇出帶來的效率降低的問題,我們可以使用hashtable來解決這個問題。
    RETE算法還有一些問題,如:facts庫變化,我們怎么才能高效的重建alpha-network,同理包括rules的變化對beta-network的影響。這一部分我還沒細看,到時候再貼出來吧。
    posted on 2006-05-30 15:30 混沌中立 閱讀(1048) 評論(2)  編輯  收藏 所屬分類: 非技術

    評論:
    # re: RETE算法的描述(轉) 2008-11-23 14:19 | chang
    看完感覺很好!!希望再給我提供一些資料哦!!呵呵,我的郵箱是cwlcwj@163.com。謝謝了哦!!  回復  更多評論
      
    # re: RETE算法的描述(轉) 2009-03-05 12:46 | kangzhen
    看完后很有收獲,希望把你所說的資料發一份。。謝謝。。EMAIL:kangzhen8494@126.com  回復  更多評論
      
    主站蜘蛛池模板: 久久久久久亚洲av成人无码国产| 狠狠色伊人亚洲综合网站色| 日韩在线免费视频| 久久精品无码免费不卡| 亚洲免费福利在线视频| 亚洲av无码不卡| 亚洲人色婷婷成人网站在线观看| 成人毛片免费在线观看| 99久久免费国产精品特黄| 日韩电影免费在线观看| 成人电影在线免费观看| 国产偷国产偷亚洲高清人| 亚洲大尺度无码无码专线一区| 久久夜色精品国产噜噜噜亚洲AV| 亚洲国产成人精品无码区在线观看| 四虎影院免费视频| 成人免费午间影院在线观看| 青青青免费国产在线视频小草| a毛片基地免费全部视频| 4虎1515hh永久免费| 最近中文字幕免费2019| 先锋影音资源片午夜在线观看视频免费播放 | 在线观看免费精品国产| 日韩中文无码有码免费视频| 国产在线观看片a免费观看| 免费AA片少妇人AA片直播| 成人免费无码大片a毛片| 四虎影永久在线高清免费| 曰皮全部过程视频免费国产30分钟 | 久久精品国产亚洲AV网站| 亚洲熟妇无码乱子AV电影| 国产亚洲成av人片在线观看| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲AV一宅男色影视| 亚洲成人黄色网址| 亚洲精品无码专区在线| 一级毛片免费视频网站| 777爽死你无码免费看一二区| 人妻视频一区二区三区免费| 国产国产人免费人成免费视频| 亚洲视频在线一区二区|