劉晶晶 崔燕 初建民
摘 要:隨著作戰(zhàn)需求的多樣化,一些復(fù)雜的業(yè)務(wù)規(guī)則很難推導(dǎo)出精確的算法或抽象出合適的數(shù)據(jù)模型,因此將業(yè)務(wù)規(guī)則與軟件代碼分開(kāi)引入規(guī)則引擎已成為一種主流趨勢(shì)。Drools規(guī)則引擎作為決策系統(tǒng)的推理機(jī),采用Rete算法實(shí)現(xiàn)推理機(jī)的規(guī)則匹配,有著較高的效率,能夠較好匹配兵力接替系統(tǒng)。本文介紹了基于Drools規(guī)則引擎的兵力接替系統(tǒng)的設(shè)計(jì)方法及實(shí)現(xiàn),具體設(shè)計(jì)了作戰(zhàn)規(guī)則、并提出策略匹配的改進(jìn)沖突消解算法,對(duì)此方法進(jìn)行了實(shí)驗(yàn)比較,實(shí)驗(yàn)證明此方法大大增強(qiáng)了系統(tǒng)的開(kāi)發(fā)效率和后期軟件的維護(hù)成本。
關(guān)鍵詞:Drools;規(guī)則引擎;業(yè)務(wù)規(guī)則;Rete
中圖分類(lèi)號(hào):TP315 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:With the diversification of the battle demands,precise algorithms or data models can hardly be derived from some complicated business rules.Therefore,it has become a mainstream trend to separately import business rules and software code into the rule engine.As the inference engine of the decision-making system,the drools rule engine adopts the rete algorithm to implement the rule-matching of the inference engine,which has high efficiency and appropriately matches the troop patrol system.This paper introduces the design and implementation of the troop patrol system based on the Drools rule engine,including the design of engagement rules.An improved rule-matching algorithm is also proposed.The result of comparison experiment shows that this method greatly improves the software development efficiency and effectively reduces the maintenance costs.
Keywords:drools;rule engine;business rule;rete
1 引言(Introduction)
隨著作戰(zhàn)任務(wù)需求的多樣化,一些復(fù)雜的作戰(zhàn)任務(wù)很難推導(dǎo)出精確的算法或抽象出數(shù)據(jù)模型。對(duì)于指控軟件來(lái)說(shuō)業(yè)務(wù)規(guī)則常常在需求階段還不明確,在設(shè)計(jì)和編碼后還會(huì)發(fā)生變化,但是業(yè)務(wù)規(guī)則往往嵌套在系統(tǒng)的各個(gè)代碼中,使得后期軟件的維護(hù)成本很高[1,2],多空域航空兵兵力接替系統(tǒng)就屬于這樣的情況,如何根據(jù)作戰(zhàn)規(guī)則的不同找出合適的接替兵力列表成為亟須解決的難題。
本文針對(duì)此問(wèn)題,提出應(yīng)用Drools規(guī)則引擎[3-6]構(gòu)建兵力接替系統(tǒng)的方法。由于規(guī)則引擎在維護(hù)軟件時(shí)支持對(duì)作戰(zhàn)規(guī)則的動(dòng)態(tài)增、刪、改,降低了復(fù)雜業(yè)務(wù)邏輯和應(yīng)用程序的維護(hù)成本。本文后面介紹了Drools規(guī)則引擎原理,給出了兵力接替系統(tǒng)模型框架,并通過(guò)系統(tǒng)軟件驗(yàn)證此方法是可行的。
2 兵力接替功能介紹(Features of troop patrol system)
兵力接替功能是根據(jù)當(dāng)前各目標(biāo)信息(包括飛機(jī)的余油、性能、掛載等屬性信息)和巡邏空域的位置等信息確定出的一個(gè)多空域的航空兵接替巡邏出動(dòng)計(jì)劃表。航空兵的出動(dòng)計(jì)劃依據(jù)其后支撐的作戰(zhàn)規(guī)則產(chǎn)生。其中兵力接替系統(tǒng)的流程如圖1所示。
兵力接替系統(tǒng)的輸出是接替列表即航空兵出動(dòng)計(jì)劃表,供指揮員決策使用。
3 Drools 規(guī)則引擎介紹(Drools rules engine introduction)
Drools是一個(gè)采用規(guī)則實(shí)現(xiàn)的專(zhuān)家系統(tǒng)。它的核心是一個(gè)推理引擎,能夠處理大量的規(guī)則和事實(shí)。它采用的匹配算法是改進(jìn)版本的Rete算法[7-11]。Rete算法是一個(gè)目前效率較高的前項(xiàng)鏈推理算法,其根據(jù)規(guī)則庫(kù)構(gòu)建有效的模式匹配網(wǎng)絡(luò),并且記錄匹配中節(jié)點(diǎn)的狀態(tài),從而獲得有效的解析和很高的效率。
Drools中的Rete算法被稱(chēng)為ReteOO,這種方法從一個(gè)初始的事實(shí)觸發(fā),不斷應(yīng)用規(guī)則進(jìn)行推理或執(zhí)行指定的動(dòng)作,逐步匹配運(yùn)算,最終達(dá)到相應(yīng)的結(jié)論。Drools規(guī)則引擎過(guò)程如圖2所示。
Drools規(guī)則引擎推理過(guò)程如下:
(1)加載規(guī)則至規(guī)則庫(kù)。
(2)加載需要匹配的事實(shí)至Working Memory。
(3)對(duì)加載的規(guī)則和事實(shí)在模式匹配器中進(jìn)行匹配。
(4)將多條匹配的規(guī)則加入沖突集合。
(5)根據(jù)沖突解決策略解決沖突,并確定需要激活的規(guī)則及其激活順序,將規(guī)則按順序加入議程中。
(6)按照順序執(zhí)行規(guī)則,并重復(fù)3—6步,直至議程中無(wú)可激活規(guī)則為止。
4 兵力接替系統(tǒng)設(shè)計(jì)(Troop patrol design)
4.1 規(guī)則設(shè)計(jì)
兵力接替系統(tǒng)主要包括三層:
(1)UI應(yīng)用層。用戶從態(tài)勢(shì)圖選擇多空域,設(shè)定優(yōu)選規(guī)則和過(guò)濾條件,將數(shù)據(jù)傳給計(jì)算服務(wù)。
(2)計(jì)算服務(wù)層。計(jì)算服務(wù)接收應(yīng)用層傳入的數(shù)據(jù),根據(jù)過(guò)濾條件計(jì)算出可用的兵力,并將規(guī)范化數(shù)據(jù)轉(zhuǎn)交底層規(guī)則引擎。
(3)規(guī)則引擎決策層。規(guī)則引擎接收從服務(wù)層傳入的數(shù)據(jù),載入到兵力接替模塊對(duì)應(yīng)的Working Memory中,并依據(jù)引擎中配置的決策規(guī)則,進(jìn)行業(yè)務(wù)決策。最終將決策結(jié)果返回結(jié)果給服務(wù)層。
在這三層中最為核心的是規(guī)則引擎決策層,其他兩層主要是為其準(zhǔn)備規(guī)范化數(shù)據(jù)。
在規(guī)則引擎中首先需要添加可配置的規(guī)則。兵力接替的規(guī)則包括:(1)時(shí)間最快優(yōu)先。(2)同一機(jī)場(chǎng)優(yōu)先。(3)同一機(jī)型優(yōu)先。(4)某類(lèi)機(jī)型優(yōu)先。(5)某些空域優(yōu)先。
由于規(guī)則之間可能存在沖突,而且同一個(gè)事實(shí)對(duì)象可能會(huì)觸發(fā)多個(gè)規(guī)則,因此給每條規(guī)則添加了一個(gè)Level屬性,Level值越低其優(yōu)先值越高,此條規(guī)則就越重要。當(dāng)同一事實(shí)對(duì)象觸發(fā)了多個(gè)規(guī)則時(shí),規(guī)則引擎會(huì)將觸發(fā)的所有規(guī)則放入議程中。這時(shí)需要沖突消解策略進(jìn)行沖突消解。
4.2 改進(jìn)策略消解算法
原先采用的方法是根據(jù)每個(gè)規(guī)則中的Level屬性進(jìn)行排序,按照順序逐一執(zhí)行議程中的所有規(guī)則,后一個(gè)規(guī)則執(zhí)行的結(jié)果會(huì)覆蓋前一個(gè)規(guī)則的結(jié)果。由于此方法中會(huì)計(jì)算多次規(guī)則引擎結(jié)果,且結(jié)果不會(huì)使用而是直接拋棄,為了加快效率,采用改進(jìn)版本的匹配方法執(zhí)行規(guī)則。改進(jìn)版方法在一個(gè)事實(shí)觸發(fā)多個(gè)規(guī)則時(shí),會(huì)進(jìn)行邏輯判定,最后只計(jì)算一次完全匹配規(guī)則的結(jié)果,加快了效率,改進(jìn)版本流程圖如圖3所示。
算法會(huì)在議程中循環(huán)判斷是否有與事件對(duì)象完全匹配的規(guī)則,若存在此規(guī)則,則與現(xiàn)有匹配規(guī)則比較其Level值,將Level值小的保留。循環(huán)結(jié)束時(shí)計(jì)算當(dāng)前存在的規(guī)則。
算法結(jié)果時(shí)間比較,接替規(guī)則定義為:時(shí)間優(yōu)先,同一機(jī)場(chǎng)優(yōu)先,同一機(jī)型優(yōu)先,某類(lèi)空域優(yōu)先。實(shí)驗(yàn)所取的規(guī)則一樣,選取典型10個(gè)巡邏區(qū)域進(jìn)行實(shí)驗(yàn)。
實(shí)驗(yàn)所需計(jì)算結(jié)果如表1所示。
為了提高數(shù)據(jù)準(zhǔn)確性,去除用時(shí)最多的H區(qū)域與用時(shí)最少的J區(qū)域,計(jì)算得到結(jié)果為:改進(jìn)前計(jì)算平均值為1217ms,改進(jìn)后計(jì)算平均值為967ms,時(shí)間縮短了21.1%。
為了更直觀表達(dá)出改進(jìn)算法后系統(tǒng)計(jì)算性能的提高,在這里采用折線圖,如圖4所示。
5 結(jié)論(Conclusion)
本文采用Drools規(guī)則引擎將軍事業(yè)務(wù)邏輯從程序邏輯中分離出來(lái),使用貼近軍事描述的語(yǔ)義模塊定義規(guī)范,實(shí)現(xiàn)對(duì)業(yè)務(wù)規(guī)則的集中生成共享和復(fù)用。當(dāng)后期兵力接替業(yè)務(wù)規(guī)則發(fā)生變化之后,只需要修改規(guī)則文件即可,而不需要修改、編譯、測(cè)試、發(fā)布文件,如此將極大降低維護(hù)成本。在使用規(guī)則引擎進(jìn)行計(jì)算時(shí),提出了一種只計(jì)算一次完全匹配結(jié)果的改進(jìn)計(jì)算方法,提高了改進(jìn)效率近21%。
參考文獻(xiàn)(References)
[1] Liu D,Gu T,Xue J P.Rule Engine based on improvement Rete algorithm[C].Apperceiving Computing and Intelligence Analysis(ICACIA),2010 International Conference on.IEEE,2010:346-349.
[2] Liang S,et al.OpenRuleBench:an analysis of the performance of rule engines[J].Aquaculture,2005,249(s1-4):353-365.
[3] Nagl C,Rosenberg F,Dustdar S.VIDRE--A Distributed Service-Oriented Business Rule Engine based on RuleML[C].IEEE International Enterprise Distributed Object Computing Conference.IEEE Computer Society,2006:35-44.
[4]Proctor M.Drools:a rule engine for complex event processing[C]//International Conference on Applications of Graph Transformations with Industrial Relevance,2011.
[5] 陳育謙,等.基于規(guī)則引擎的項(xiàng)目開(kāi)發(fā)環(huán)境訪問(wèn)控制架構(gòu)[J].指揮信息系統(tǒng)與技術(shù),2014(02):5-8.
[6] 藍(lán)雯飛,邢志寶,強(qiáng)小利.一種Drools規(guī)則引擎封裝模型及其實(shí)現(xiàn)[J].中南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2015(03):45-50.
[7] 劉亞琴,譚一兵.基于規(guī)則引擎的應(yīng)用程序開(kāi)發(fā)[J].邵陽(yáng)學(xué)院學(xué)報(bào)(自然科學(xué)版),2006(02):19-23.
[8] 牛凱.規(guī)則引擎Drools在制造業(yè)J2EE系統(tǒng)中的應(yīng)用研究[J].成組技術(shù)與生產(chǎn)現(xiàn)代化,2014(02):5-11.
[9] 顧小東,高陽(yáng).Rete算法:研究現(xiàn)狀與挑戰(zhàn)[J].計(jì)算機(jī)科學(xué),2012(11):9-14.
[10] 宋震,郭福順,李蓮治.IMPR:一種優(yōu)于RETE算法的多模式/多對(duì)象匹配算法[J].小型微型計(jì)算機(jī)系統(tǒng),2002(02):15-18.
[11] 文舉榮,王永利,劉偉.支持多類(lèi)型瑕疵度量的RETE改進(jìn)算法[J].計(jì)算機(jī)工程與應(yīng)用,2015(15):8-13.
作者簡(jiǎn)介:
劉晶晶(1986-),男,碩士,工程師.研究領(lǐng)域:指揮控制系統(tǒng).
崔 燕(1988-),女,碩士,助理工程師.研究領(lǐng)域:指揮控制系統(tǒng).
初建民(1997-),男,本科生.研究領(lǐng)域:算法研究.