python3 规则引擎_几个常见规则引擎的简单介绍和演示
Ilog JRules?是最有名的商用BRMS;
Drools?是最活躍的開(kāi)源規(guī)則引擎;
Jess?是Clips的java實(shí)現(xiàn),就如JRuby之于Ruby,是AI系的代表;
Visual Rules(旗正規(guī)則引擎)國(guó)內(nèi)商業(yè)規(guī)則引擎品牌。
今天對(duì)比了一下這四個(gè)頗有代表性的規(guī)則引擎的規(guī)則語(yǔ)言。其中Ilog和visual rules是商業(yè)產(chǎn)品,沒(méi)有機(jī)會(huì)實(shí)戰(zhàn)。
1.一樣的If--Then 句式與Rete引擎
四者都邑把原本雜亂不勘的if---else---elseif----else,拆成N條帶優(yōu)先級(jí)的
"If? 前提語(yǔ)句? then? 實(shí)施語(yǔ)句" 的句式。
四者都主要使用foreward-chaining的Rete引擎,按優(yōu)先級(jí)匹配條件語(yǔ)句,實(shí)施規(guī)則語(yǔ)句。
規(guī)則實(shí)施后會(huì)激發(fā)事實(shí)的變化,引擎又會(huì)重新進(jìn)行條件匹配,直到不能再匹配為止,Rete的算法保證了服從的最高。
2.開(kāi)辟人員操縱的規(guī)則語(yǔ)言
2.1 Drools的XML框架+Java/Groovy/Python嵌入語(yǔ)言
Drools的用XML的、?節(jié)點(diǎn)表達(dá)If--Then句式,而里面可以嵌入上述語(yǔ)言的代碼作為判斷語(yǔ)句和實(shí)施語(yǔ)句。
其中Java代碼會(huì)操縱Antlr進(jìn)行解釋,而Groovy和Python自己即是腳本語(yǔ)言,可以直接調(diào)用。
Drools的聰明之處在于,用XML節(jié)點(diǎn)來(lái)典型If--Then句式和事實(shí)定義,使引擎干起活來(lái)很舒服。
而操縱Java,Groovy等原生語(yǔ)言來(lái)做判斷和執(zhí)行語(yǔ)句,讓程序員很輕易過(guò)渡、移植,學(xué)習(xí)曲線很低。
hello.equals("Hello")
helloWorld( hello );
2.2 ILog的IRL(ILog Rule Language)
IRL用When{}Then{}表達(dá)
If--Then句式
When
{
?customer:
Customer(totalTime >=1000);
}
Then
{
execute
{?customer.setAmount(getAmount()-20.00);
}
文檔稱IRL的語(yǔ)法是Java Syntax-like的,但我怎么也看不出兩者是類似的。不過(guò)他因?yàn)槭巧虡I(yè)產(chǎn)品,有很強(qiáng)大的編輯器和管理工具,編寫(xiě)規(guī)則的速度應(yīng)該有一定效率。
2.3 Jess的CLIPS
jess用? =>? 表達(dá) If-Then句式。 這CLIPS是真正的程序員專用語(yǔ)言,而且還若是很專業(yè)的程序員才習(xí)慣的工具。但這種原本即是用來(lái)做專家系統(tǒng)的AI語(yǔ)言,對(duì)規(guī)則的表達(dá)本事也應(yīng)該是最強(qiáng)的。
教學(xué)一下下面這段代碼,airplane有一個(gè)屬性--name,有兩個(gè)子類--噴氣式和螺旋槳飛機(jī),其中螺旋槳飛機(jī)可以適用任意跑道,而噴氣式飛機(jī)不能使用Grass跑道。
; Fact templates
(deftemplate airplane (slot name))
(deftemplate jet extends airplane)
(deftemplate prop extends airplane) ;
Rules
(defrule can-use-grass-runway
(prop (name ?n))
=>
(printout t "Aircraft can use grass - " ?n
crlf))
(defrule can-use-asphalt-runway
(airplane (name ?n))
=>
(printout t "Aircraft can use asphalt - " ?n
crlf))
3.客戶使用的規(guī)則語(yǔ)言
若是客戶可以自己盡情編寫(xiě)規(guī)則,無(wú)疑是產(chǎn)品一個(gè)很大的賣點(diǎn)。大部分客戶都愛(ài)這樣的東西。而且也只有把規(guī)則編寫(xiě)交給客戶,才達(dá)到了規(guī)則引擎的全數(shù)意義。
3.1 Drools的 DSL
Drools的最新版Drools2.0Rc2里,House和Conways
game of Live兩個(gè)例子有DSL的版本
對(duì)比一下Java版本,功效如下:
20
vs
room.getName( ).equals( "calvin" )
convertToCelsius( room.getTemperature() ) > 20
但這種XML Base的DSL語(yǔ)法實(shí)在好不了多少,而且實(shí)現(xiàn)的代價(jià)一點(diǎn)不少,要自己實(shí)現(xiàn)Conditons和Consequence Factory類,自行解釋那段XML,根柢上沒(méi)有什么便利的底層支持。
實(shí)在,一不做二不竭,爽性用Antlr來(lái)界說(shuō)真正的DSL,同樣是實(shí)現(xiàn)Conditons和Consequence
Factory類概略更好。只不外解釋XML誰(shuí)都會(huì),Antlr就沒(méi)什么人用而已。
3.2 ILog的BAL(Business Action
Language)-已改名ODM,最強(qiáng)王者
從文檔來(lái)看,配合Ilog的編纂器,簡(jiǎn)直即是很完美的規(guī)則語(yǔ)言了,價(jià)格貴了點(diǎn)。
If
the call destination number is the preferred number
Then
apply the preferred number rate
3.3 Visual Rules(旗正規(guī)則引擎)--國(guó)內(nèi)商業(yè)規(guī)則引擎代表:
完全本土化的國(guó)內(nèi)規(guī)則引擎,有自主知識(shí)產(chǎn)權(quán),全中文操作,比較適合國(guó)人習(xí)慣,在處理速度、內(nèi)存占用方面都擁有一定的優(yōu)勢(shì),感覺(jué)有些ILOG的翻譯版本的意思,算是良心之作了。看看表現(xiàn)形式:
如果
用戶名 = "admin"
那么
顯示 = "你好," + 用戶名
全中文操作界面,看起來(lái)比較親切,規(guī)則表現(xiàn)形式也更為簡(jiǎn)潔。因?yàn)槭召M(fèi),所以沒(méi)有太多資料展示,希望商家能提供基礎(chǔ)功能版本供大家免費(fèi)使用。
總結(jié)
以上是生活随笔為你收集整理的python3 规则引擎_几个常见规则引擎的简单介绍和演示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 游戏玩家的情人节礼物?AMD 锐龙 70
- 下一篇: python 数据分析排名_2018年上