1. 程式人生 > >幾個常用規則引擎的簡單介紹和演示

幾個常用規則引擎的簡單介紹和演示

規則引擎 drools ilog odm

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

Visual Rules(旗正規則引擎)國內商業規則引擎品牌。

今天對比了一下這四個頗有代表性的規則引擎的規則語言。其中Ilogvisual rules是商業產品,沒有機會實戰。

1.一樣的If--Then 句式與Rete引擎

四者都邑把原本雜亂不勘的if---else---elseif----else,拆成N條帶優先級的

"If 前提語句 then 實施語句" 的句式。

四者都主要使用foreward-chaining的Rete引擎,按優先級匹配條件語句,實施規則語句。

規則實施後會激發事實的變化,引擎又會重新進行條件匹配,直到不能再匹配為止,Rete的算法保證了服從的最高。

2.開辟人員操縱的規則語言

2.1 Drools的XML框架+Java/Groovy/Python嵌入語言

Drools的用XML的、 節點表達If--Then句式,而裏面可以嵌入上述語言的代碼作為判斷語句和實施語句。
其中Java代碼會操縱Antlr進行解釋,而Groovy和Python自己即是腳本語言,可以直接調用。
Drools的聰明之處在於,用XML節點來典型If--Then句式和事實定義,使引擎幹起活來很舒服。
而操縱Java,Groovy等原生語言來做判斷和執行語句,讓程序員很輕易過渡、移植,學習曲線很低。


hello.equals("Hello")


helloWorld( hello );

2.2 ILog的IRL(ILog Rule Language)

IRL用When{}Then{}表達If--Then句式

When
{
?customer:Customer(totalTime >=1000);
}
Then
{
execute{?customer.setAmount(getAmount()-20.00);
}
文檔稱IRL的語法是Java Syntax-like的,但我怎麽也看不出兩者是類似的。不過他因為是商業產品,有很強大的編輯器和管理工具,編寫規則的速度應該有一定效率。

2.3 Jess的CLIPS
jess用 => 表達 If-Then句式。 這CLIPS是真正的程序員專用語言,而且還若是很專業的程序員才習慣的工具。但這種原本即是用來做專家系統的AI語言,對規則的表達本事也應該是最強的。
教學一下下面這段代碼,airplane有一個屬性--name,有兩個子類--噴氣式和螺旋槳飛機,其中螺旋槳飛機可以適用任意跑道,而噴氣式飛機不能使用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 - " ?ncrlf))

(defrule can-use-asphalt-runway
(airplane (name ?n))
=>
(printout t "Aircraft can use asphalt - " ?ncrlf))

3.客戶使用的規則語言

若是客戶可以自己盡情編寫規則,無疑是產品一個很大的賣點。大部分客戶都愛這樣的東西。而且也只有把規則編寫交給客戶,才達到了規則引擎的全數意義。

3.1 Drools的 DSL
Drools
的最新版Drools2.0Rc2裏,House和Conwaysgame of Live兩個例子有DSL的版本
對比一下Java版本,功效如下:




20



vs


room.getName( ).equals( "calvin" )


convertToCelsius( room.getTemperature() ) > 20

但這種XML Base的DSL語法實在好不了多少,而且實現的代價一點不少,要自己實現Conditons和Consequence Factory類,自行解釋那段XML,根柢上沒有什麽便利的底層支持。
實在,一不做二不竭,爽性用Antlr來界說真正的DSL,同樣是實現Conditons和ConsequenceFactory類概略更好。只不外解釋XML誰都會,Antlr就沒什麽人用而已。

3.2 ILog的BAL(Business ActionLanguage)-已改名ODM,最強王者
從文檔來看,配合Ilog的編纂器,簡直即是很完美的規則語言了,價格貴了點。

If
the call destination number is the preferred number
Then
apply the preferred number rate

3.3 Visual Rules(旗正規則引擎)--國內商業規則引擎代表:

完全本土化的國內規則引擎,有自主知識產權,全中文操作,比較適合國人習慣,在處理速度、內存占用方面都擁有一定的優勢,感覺有些ILOG的翻譯版本的意思,算是良心之作了。看看表現形式:

如果

用戶名 = "admin"

那麽

顯示 = "你好," + 用戶名

全中文操作界面,看起來比較親切,規則表現形式也更為簡潔。因為收費,所以沒有太多資料展示,希望商家能提供基礎功能版本供大家免費使用。


本文出自 “13184590” 博客,請務必保留此出處http://13194590.blog.51cto.com/13184590/1976794

幾個常用規則引擎的簡單介紹和演示