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