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