【采用】规则引擎Pyke与PyClips对比研究报告(高大上啊,第一次听说pyke和pyclips这俩词~)
1.?背景綜述
?
規則引擎主要實現的功能是存儲、分類和管理規則,執行規則、推斷其它事實的應用程序。其中的規則主要是指企業或商務業務邏輯、法律條款等。在規則引擎發展的過程中,Rete算法和Prolog語言是兩個重要的理論分支,多數規則引擎都是基于以上二者擴展而來的。在工業活動鑄造中,發展時間較長、應用廣泛的兩個體系是Clips體系和Prolog體系。
Clips是美國航空航天局NASA- JOHNSON太空中心為彌補LISP 語言的不足而開發的C語言內核的專家系統。它的推理機是基于正向推理(Rete算法)的控制策略,即在事實的基礎上通過設定的規則推演新的事實。因為LISP語言編寫規則復雜、引擎不支持反向推理等原因也在一定程度限制了它的發展,但在其他語言開發(javaEE、Python等)的規則引擎仍有很多參考、引用了Clips,包括Drools、Jess、PyClips等。
Prolog語言基于謂詞邏輯的理論。最基本的寫法是定立物件與物件之間的關系,之后可以用詢問目標的方式來查詢各種物件之間的關系,進行匹配及回溯,找出所詢問的答案。因而Prolog具備作為規則引擎的充分條件,也有若干開源項目(java為主)沿用其思路設計規則引擎,如tuProlog、jena等。下文所提到的Pyke,普遍說法其前身也是Prolog。此外,有文獻提到prolog基于Markov算法。Markov算法可以作為規則引擎的基本準則,但是如果系統中存在著大量的規則,那么效率就會變低。
?
針對項目開發的實際需要,依據?“Python語言驅動引擎、規則語言語義全面、時間開銷適中”的原則選取規則引擎,具體操作過程中選擇了Pyke和PyClips分別進行研究,二者分別對應上文提到的Prolog體系和Clips體系,有一定代表性。經過手冊研讀和實驗測試,目前可得到的結論是:PyClips在規則表達和性能效率方面優于Pyke,更符合應用開發的需要。具體分析見下文。
?
2.PyClips與Pyke的規則表達方式比較
?
2.1 Pyke的規則描述方式和特性
?
Pyke的優勢、特點:
l?支持正向推理和反向推理兩種推理方式,可以針對不同問題選用不同方式定義規則;
l?可以在規則中嵌入Python代碼段補充描述;
l?專用謂詞較多,如first,notany等可以簡化表達。
?
Pyke的不便、局限:
l?數據傾倒方式單一,只顯式支持將結果推送到控制臺輸出(只能間接從其內部取得數據List);
l?不支持批量的事實導入;
l?正反向推理不能在同一個規則庫中并存。
?
2.2 PyClips的規則描述方式和特性
?
PyClips的優勢、特點:
l?在規則定義環節,支持聲明函數。支持OO(面向對象):包括類的定義,模板(類似C++中的template)的定義。針對未來復雜的規則描述可能適用;
l?規則定義時,支持事件觸發;
l?支持動態地撤銷事實或規則(不可逆,需謹慎)。
l?互動性良好,方法完全“繼承”自0Clips。PyClips相當于對Clips做了Python的“客戶端”封裝。運行時,在內存中既有PyClips的存在,也有Clips的存在。因而只要Clips支持的功能,都可以由PyClips發送指令操作Clips。
?
PyClips的不便、局限:
l?規則描述使用LISP語言,上手難度較高(例如數值計算式的書寫、各關鍵字的語法格式);
l?只顯式支持正向推理。相關英文文獻也指出Clips本身不能使用反向推理,只有部分中文文獻給出了通過事件觸發來自定義反向推理的方案,但可重現性都很差,沒有一個完備的解決方案目前。所以保留意見認為,PyClips不支持反向推理;
l?不支持批量的事實或規則導入;
?
3.?PyClips與Pyke的性能比較
?
3月20日-3月22日,Pyke性能測試數據截取,見表1、表2:
|
| 側重較多事實 |
|
| 規則數 | 事實數 | 時間開銷(秒) |
| 5 | 10000 | 21 |
| 10 | 10000 | 27 |
| 5 | 20000 | 65 |
| 10 | 20000 | 96 |
|
| 側重較多規則 |
|
| 規則數 | 事實數 | 時間開銷(秒) |
| 500 | 500 | 23 |
| 600 | 500 | 28 |
| 700 | 500 | 32 |
| 800 | 500 | 37 |
| 900 | 500 | 42 |
| 1000 | 500 | 46 |
| 1100 | 500 | 51 |
| 1200 | 500 | 55 |
|
| 均等 |
|
| 規則數 | 事實數 | 時間開銷(秒) |
| 500 | 500 | 23 |
| 600 | 600 | 34 |
| 700 | 700 | 46 |
| 800 | 800 | 59 |
| 900 | 900 | 73 |
| 1000 | 1000 | 88 |
表1
?
| 規則數 | 事實數 (運行時加載) | 事實 加載時間(秒) | 反向推理 時間(秒) |
| 1 | 20000 | 16.656 | 1.18 |
| 5 | 20000 | 16.828 | 1.40 |
| 10 | 20000 | 18.588 | 1.678 |
| 15 | 20000 | 17.996 | 1.92 |
| 20 | 20000 | 17.987 | 2.324 |
| 25 | 20000 | 16.021 | 2.434 |
| 30 | 20000 | 15.959 | 2.699 |
表2
?
3月27日,PyClips性能測試,見表3:
| 規則數 | 事實數 (運行時加載) | 事實 加載時間(秒) | 正向推理 時間(秒) |
| 1 | 20000 | 3.516 | 5.514 |
| 5 | 20000 | 3.314 | 6.024 |
| 10 | 20000 | 2.892 | 6.566 |
| 15 | 20000 | 2.934 | 7.244 |
| 20 | 20000 | 3.445 | 7.472 |
| 25 | 20000 | 2.832 | 7.918 |
| 30 | 20000 | 3.116 | 9.168 |
表3
?
將3張表中紅色的數據行進行對比可以發現:
l?在事實加載環節上,兩種引擎都只能逐條加載,?PyClips的加載效率遠高于Pyke;
l?客觀環境不變,推理方式及引擎算法不同的情況下,推理效率排序應為:
Pyke反向推理時間開銷?< ?PyClips正向推理時間開銷?<< Pyke正向推理時間開銷
雖然Pyke在推理階段(2萬條事實數據)可以通過推理方式同比節約4-6秒,但它在事實加載階段比PyClips慢12-14秒。
時間開銷應是所有環節消耗時間的總和,故而在實際使用中能明顯感覺到PyClips的運行速度優于Pyke。
?
原文鏈接:https://blog.csdn.net/u010159842/article/details/78889576
總結
以上是生活随笔為你收集整理的【采用】规则引擎Pyke与PyClips对比研究报告(高大上啊,第一次听说pyke和pyclips这俩词~)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【风险管理】风控一二三
- 下一篇: 【采用】信用评分卡模型-数据缺失值处理