規則引擎學習分享

對於企業級應用來說,在IT技術領域,很多地方也應用了規則,比如路由表,防火牆策略,乃至角色權限控制(RBAC),或者Web框架中的URL匹配。不管是那種規則,都規定了一組確定的條件和此條件所產生的結果。每條規則都是一組條件決定的一系列結果,一條規則可能與其他規則共同決定最終結果,可能存在條件互相交叉的規則,此時有必要規定規則的優先級。規則的運用過程叫做推理,如果由程序來處理推理過程,那麼這個程序叫做推理引擎。

基於規則的推理機易於理解,易於獲取,易於管理,成爲規則引擎。

1.1   應用場景理解

             應用

             可樂瓶兌換規則,小手上有50塊錢,1元錢可以一瓶冰紅茶,2空瓶可以兌換一瓶飲料,問題是小可以喝多少瓶飲料?

                   規則rule:

                    

1.2  規則引擎相關介紹

         1.2.1   規則引擎介紹

           規則引擎由推理引擎發展而來,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來,並使用預定義的語義模塊編寫業務決策。接受數據輸入,解釋業務規則,並根據業務規則做出業務決策。

          1.2.2   規則引擎應用背景        

             企業級管理者對企業IT系統的開發有着如下的要求:

                  1.爲提高效率,管理流程必須自動化,即使現代商業規則異常複雜。

                  2.市場要求業務規則經常變化,IT系統必須依據業務規則的變化快速、低成本的更新。

                  3.爲了快速、低成本的更新,業務人員應能直接管理IT系統中的規則,不需要程序開發人員參與。

         1.2.3  規則引擎優點

                 使用規則引擎可以通過降低實現複雜業務邏輯的組件的複雜性,降低應用程序的維護和可擴展性成本,其優點如下:

                · 分離商業決策者的商業決策邏輯和應用開發者的技術決策;

                · 能有效的提高實現複雜邏輯的代碼的可維護性;

                · 在開發期間或部署後修復代碼缺陷;

                · 應付特殊狀況,即客戶一開始沒有提到要將業務邏輯考慮在內;

                · 符合組織對敏捷或迭代開發過程的使用;

  1.3  規則引擎的常見的技術

               

   1.4  規則引擎的原理實現

         1.4.1  規則引擎的原理實現

               規則引擎起源於規則的專家系統,基於規則的專家系統又是專家系統的其中一個分支。專家系統屬於人工智能的範疇。

                           

            

             推理引擎(Inference Engine)包括三部分:模式匹配器(Pattern Matcher)、議程(Agenda)和執行引擎(Execution Engine)。推理引擎通過決定哪些規則滿足事實或目標,並授予規則優先級,滿足事實或目標的規則被加入議程。

             在規則引擎中,將知識表達爲規則(rules),要分析的情況定義爲事實(facts)。二者在內存中的存儲分別稱爲Production Memory和Working Memory。

            rules和facts是規則引擎接受的輸入參數,而規則引擎本身包括兩個組成部分:Pattern Matcher和Agenda。Pattern Matcher根據facts找到匹配的rules,Agenda管理PatternMatcher挑選出來的規則的執行次序。在外圍,還會有一個執行引擎(Execution Engine)負責根據Agenda輸出的rules執行具體的操作。

          1.4.2  Rete算法            

            規則引擎的核心是Pattern Matcher(模式匹配器),任何一個規則引擎都需要很好地解決規則的推理機制和規則條件匹配的效率問題,規則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區中的數據對象,從加載的規則集中發現符合條件的規則,生成規則執行實例。常見的模式匹配算法包括Rete、Treat、Leaps等,其中Rete算法使用正向推理,在目前商用/開源規則引擎產品中廣泛使用。Rete算法是目前效率最高的一個前向鍊形推理算法, 其核心思想是將分離的匹配項根據內容動態構造匹配樹, 以達到顯著降低計算量的效果。Rete算法的基本思想是:在模式匹配中利用推理機的時間冗餘性和規則結構的相似性, 通過保存中間去處來提高推理效率的一種模式匹配算法,保存過去匹配過程中留下的全部信息,以空間代價來換取產生式系統的執行效率。

以下面的規則爲例解釋Rete算法:

RULE1:if (A>B) and D or C then E=100

RULE2:if (A>B) and (B<C) then E=200

RULE3:if (! (A>B) or (B<C)) then E=300

若要匹配這3條規則時,,對於表達式A>B要進行三次計算,,對B<C 需要兩次計算。Rete 採用的方法爲:令M1=A>B, M2=B<C;則規則可改爲:

RULE1:if (M1) and  D or C then E=100

RULE2:if (M1) and  (M2) then E=200

RULE3:if (! (M1) or  (M2) ) then E=300

這樣只有當A或B發生變化時,才重新計算M1;同樣當B或C發生變化時,重新計算M2。這樣的推理避免了在每次進行模式匹配都重複計算相同的表達式,而只要檢測相關參數是否變化來決定是否更新表達式,這樣在推理過程中節省了大量時間和開銷,從而提高了推理效率。

RETE推理網絡的生成過程:從規則集{規則1,規則2……..}中拿出一條來,根據一定算法,變成RETE推理網絡的節點。不斷循環將所有規則都處理完,RETE推理網絡就生成了。

           

參考文檔:http://www.cnblogs.com/shangxiaofei/p/6262107.html

       1.4.3   規則引擎的執行過程

          Java規則引擎對提交給引擎的Java數據對象進行檢索,根據這些對象的當前屬性值和它們之間的關係,從加載到引擎的規則集中發現符合條件的規則,創建這些規則的執行實例。這些實例將在引擎接到執行指令時、依照某種優先序依次執行。一般來講,Java規則引擎內部由下面幾個部分構成:工作內存(Working Memory)即工作區,用於存放被引擎引用的數據對象集合;規則執行隊列,用於存放被激活的規則執行實例;靜態規則區,用於存放所有被加載的業務規則,這些規則將按照某種數據結構組織,當工作區中的數據發生改變後,引擎需要迅速根據工作區中的對象現狀,調整規則執行隊列中的規則執行實例。Java規則引擎的結構示意圖如下圖所示。

                       

    1.5  Drools介紹

        1.5.1  Drools的安裝  略

        1.5.2  Drools的介紹

              理解Drools工作過程,通常一個接口來做事,首先傳進去參數,其次要獲取接口實現執行完畢的結果。Drools也是一樣,我們需要傳遞進去數據,用於規則的檢查,調用外部接口,同時還可能需要獲取到規則執行完畢後的結果。在Drools中,傳遞進去的對象,叫做Fact對象,是一個普通的java bean, 規則中科院對當前對象進行任何的讀寫操作,調用該對象提供的方法,當一個java bean插入到workingMemory中,規則使用的是原有對象的引用,規則通過對fact對象的讀寫,實現對應用數據的讀寫,對於其中的屬性,需要提供getter setter訪問器,規則中,可以動態的往當前的workingMemory中插入刪除新的fact對象。

                                            

            1.5.3  Drools源碼分享

                         

                         

                         

                                 

                         

     1.6   規則引擎使用場景          

            積分規則

            計費

            信用風險評估

            監控告警系統

            工作流系統

 

      文章僅作爲學習參考,如有侵權請聯繫作者刪除。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章