黃麗
摘 要規(guī)則引擎技術有吸引力,且應用廣泛。本文主要是對規(guī)則引擎等方面的概念以及其實現(xiàn)原理進行闡述,然后深入探究Drools 中規(guī)則沖突方面的相關處理,最后提出了借助于 Drools規(guī)則引擎來如何解決實際應用方面的探究,旨在促進其技術應用的更加廣泛。
【關鍵詞】規(guī)則引擎 Drools 規(guī)則沖突
1 闡述基于規(guī)則的專家系統(tǒng)
專家系統(tǒng)里面有不少的劃分方法,例如:神經(jīng)網(wǎng)絡、案例推理以及基于規(guī)則的系統(tǒng)等等。其中,規(guī)則引擎為在規(guī)則的專家系統(tǒng)內(nèi)的一個組成部分。有關Java的規(guī)則引擎的構成, 圖1是基于規(guī)則的專家系統(tǒng)(簡稱RBES)的結構圖。
2 分析Drools項目的具體
Drools項目的本質(zhì)是Bob 開發(fā)的開源項目,是通過Java語言進行實現(xiàn)的,也是對Rete算法進行的增強。Rete算法位于模塊的核心位置,被Drools封裝成Rete-OO,繼而再利用一些外圍模塊的添加來拓展其功能。其中,Rete算法是在上個世紀70年代被發(fā)明的,到現(xiàn)在為止,在現(xiàn)代生產(chǎn)系統(tǒng)中,被稱為效率最高的算法,除Rete II外。但是,Rete是唯一一個效率和執(zhí)行規(guī)則數(shù)目無關聯(lián)的算法。
3 分析Drools中規(guī)則沖突方面的相關處理
在同一規(guī)則集里面如果同時有多項規(guī)則滿足了這些情況,它就會被觸發(fā),另外對于執(zhí)行次序來說,其順序不同,執(zhí)行結果各異,就是所謂的規(guī)則沖突。因此,在Drools當中專門設立其對應的沖突處理機制,主要原理就是借助沖突處理策略鏈路這種方法來處理其沖突。而且,對于沖突處理策略來說,它會形成一個隊列,如果位于前面的沖突策略沒有被解決的話,沖突規(guī)則會發(fā)揮其作用將其轉到后面進行處理,直到所有的沖突都被解決完畢為止。那么,可以將Drools的沖突處理劃分為如下七種處理策略,具體為:優(yōu)先級策略、廣度策略、復雜度優(yōu)先策略、裝載序號策略、簡單性優(yōu)先策略、深度策略以及隨機策略。
4 Drools規(guī)則引擎方面的運用
借助于一個相對簡單的電話費用優(yōu)惠模型來說,分析實際項目中Drools工具的具體應用。通信運營商為了爭奪各大客戶,時常推出各種優(yōu)惠套餐,有套餐類別各異,針對各種人群所需,例如,折扣、固定折扣,保底以及封頂、按時間區(qū)間優(yōu)惠以及超過一定消費總額給予的特殊優(yōu)惠等等。根據(jù)往常常用的優(yōu)惠規(guī)則,現(xiàn)制定如下優(yōu)惠方案:
(1)用戶的每月使用總額比上月提高1成,就對多出的部分給予6折優(yōu)惠;
(2)長途話費超出200的,可以優(yōu)惠超出部分的2成;
(3)網(wǎng)費超出200的,市話可以享受5折優(yōu)惠,但有一個最高上限,即最多優(yōu)惠50元;
(4)使用增值服務的用戶,每月月租減少10元;
(5)對于月消費不確定的用戶可以簽訂保底合同,即每月必須要消費到一定的額度,如果不足將以保底額度來進行計算,超出的費用可以給予半價優(yōu)惠。
對于以上優(yōu)惠規(guī)則,必須提前設定優(yōu)先項。即,要首先確定用戶是否能夠享受第四條優(yōu)惠,如果已經(jīng)享受了該優(yōu)惠就不能再享受其他優(yōu)惠方案了。第一項優(yōu)惠方案執(zhí)行必須在其他優(yōu)惠之后,即核算出其他優(yōu)惠規(guī)則已經(jīng)優(yōu)惠的之后,如果還滿足第一條就可以再進行優(yōu)惠計算。雖然規(guī)則就這五條,編程得話會有很多的if語句,而且很難實現(xiàn)且難維護。但是利用 drools 來實現(xiàn)的話,會有有一個封裝用戶各種費用的類 UserCharge,然后再跟進實際來調(diào)用以上規(guī)則,這樣優(yōu)惠費用的代碼就非常得簡單。
5 結語
綜上所述,利用 Drools java 的規(guī)則引擎,與普通配置文件以及腳本語言定制相對比,規(guī)則引擎靈活且能夠適用于多規(guī)則的共同約束,進而快速的實現(xiàn)規(guī)則篩選,將技術實現(xiàn)與規(guī)則約束進行有效分離,尤其是適用于變動多且復雜頻繁的應用。但是,Drools 也存在一定的缺陷,尤其是面對業(yè)務規(guī)則復雜程度的不斷提高,規(guī)則定義文件的難度也會提高。Dro ols缺少可視化工具以及能夠自動生成各種語義規(guī)則的生成和測試工具。同時,當前的使用版本還有一定的問題,版本低不穩(wěn)定,文檔也有一定的問題。因此,隨著計算機科技的快速發(fā)展,Java規(guī)則引擎發(fā)展一定會愈發(fā)成熟,應用愈發(fā)廣泛,這樣對于一些復雜的實際問題解決也是行之有效的。
參考文獻
[1]http://baike.baidu.com/view/1495.htm 2009.
[2]J os uttis N M. SOA in practice[M].S outheast Universit y,2007.
[3]張淵,夏清國.基于Rete算法的java規(guī)則引擎[J].科學技術與工程,2006(06).
[4]http://soft.chinabyt e.com/dat abase/ 351/118948512.shtml.2011.
[5]http://baike.baidu.com/view/1636209.htm.
[6]繳明洋,譚慶平.Java 規(guī)則引擎工作原理以及應用[J].計算機與信息技術,2006(06).
[7]http://www.blogjava.net/guangnian0412/archive/2006/06/09/ 51756.html.
[8]陶曉俊,朱敏.基于規(guī)則引擎的企業(yè)服務開發(fā)模式[J].計算機技術與發(fā)展,2006.
[9]http://wenku.baidu.com/view/ 719f6a3e0912a216147929fe.htm.
作者單位
中華女子學院 北京市 100101