Drools等規則引擎技術對比分析


項目中需要設計開發一個規則引擎服務,於是調研了業界常用的規則引擎。

常見的規則引擎如下:

  Ilog JRules 是最有名的商用BRMS;
  Drools 是最活躍的開源規則引擎;
  Jess 是Clips的java實現,就如JRuby之於Ruby,是AI系的代表;

  Visual Rules(旗正規則引擎)國內商業規則引擎品牌,可以認為是ILOG的本土版本。

  Mandarax是一個規則引擎的純Java實現。基於反向推理(歸納法)。

 

對比如下

1、四者都主要使用foreward-chaining的Rete引擎,按優先級匹配條件語句,實施規則語句。規則實施后會激發事實的變化,引擎又會重新進行條件匹配,直到不能再匹配為止,Rete的算法保證了服從的最高。

(1). Rete 算法的特點:

a. Rete 算法是一種啟發式算法,不同規則之間往往含有相同的模式,因此在 beta-network 中可以共享 BetaMemory 和 betanode。如果某個 betanode 被 N 條規則共享,則算法在此節點上效率會提高 N 倍。

b. Rete 算法由於采用 AlphaMemory 和 BetaMemory 來存儲事實,當事實集合變化不大時,保存在 alpha 和 beta 節點中的狀態不需要太多變化,避免了大量的重復計算,提高了匹配效率。

c. 從 Rete 網絡可以看出,Rete 匹配速度與規則數目無關,這是因為事實只有滿足本節點才會繼續向下沿網絡傳遞。

(2). Rete 算法的不足:

 a. 事實的刪除與事實的添加順序相同, 除了要執行與事實添加相同的計算外, 還需要執行查找, 開銷很高 。

        b. RETE 算法使用了β存儲區存儲已計算的中間結果, 以犧牲空間換取時間, 從而加快系統的速度。然而β存儲區根據規則的條件與事實的數目而成指數級增長, 所以當規則與事實很多時, 會耗盡系統資源。

(3)針對 Rete 算法的特點和不足,在應用或者開發基於 Rete 算法的規則引擎時,改進方向

a. 容易變化的規則盡量置后匹配,可以減少規則的變化帶來規則庫的變化。

b. 約束性較為通用或較強的模式盡量置前匹配,可以避免不必要的匹配。

c. 針對 Rete 算法內存開銷大和事實增加刪除影響效率的問題,技術上應該在 alpha 內存和 beata 內存中,只存儲指向內存的指針,並對指針建里索引(可用 hash 表或者非平衡二叉樹)。

d. Rete 算法 JoinNode 可以擴展為 AndJoinNode 和 OrJoinNode,兩種節點可以再進行組合 。

 

2、Ilog JRules  和 Visual Rules  是商業版

3、Drools vs ILog vs Jess vs Mandarax

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM