劉健++房志奇++康衛



摘 要:規則引擎是業務規則管理系統的核心環節,它通過模式匹配器實現事實庫與規則庫的快速匹配,因此,一個準確高效的模式匹配器決定了這個規則引擎的整體性能。將規則引擎應用在工業防危系統中,同時利用位圖矩陣算法對規則引擎的模式匹配器進行優化,從而使得規則引擎準確高效的工作。實驗結果表明在相同條件下,位圖矩陣算法相對于直接匹配的方法效率平均提高了88.04%。
關鍵詞:工業防危系統;規則引擎;模式匹配器;位圖矩陣
中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2015)05-00-03
0 引 言
隨著工業化水平的不斷提高,控制技術難度逐漸增加,工業生產系統變得越來越復雜,一旦發生工業生產安全事故,將會造成極其嚴重的后果。因此,近年來工業生產過程中的安全問題受到了廣泛關注。為了降低企業生產過程中的安全隱患,減少企業安全事故的發生,防危系統被應用在電力、水利、核工業、石化、冶煉等領域。
目前大多數學術和工業都是針對如何提高規則引擎的匹配效率進行研究。Rete算法是一種用于產生式系統的高效模式匹配算法,通過在內存中建立一個Rete網絡,以空間換取時間,充分共享匹配結果,從而實現高效匹配[1]。Drools是采用JAVA實現的一種基于Rete算法的面向對象的規則引擎,同時利用XML的Conditons→Consequence節點表達If-Then句式[2]。在本文的研究中也是采用XML文件來存儲If-Then形式的專家規則。龐偉正等人[3]在Rete算法、Rete-OO算法的基礎上提出了一種改進的 Rete網絡結構, 并對運用此 Rete 網絡來執行推理任務的過程進行了優化,明顯提高了匹配效率。
本文將規則引擎應用在工業防危系統(例如,石灰石鍛燒系統)中,它的工作效率對這個系統的整體性能起到了至關重要的作用。因此,我們的工作重點是優化匹配算法,在保證匹配準確率的前提下,最大限度的提高規則引擎的匹配效率。
1 規則引擎介紹
規則引擎的主要功能是實現事實庫與規則集的匹配,然后執行那些由當前數據對象激活的專家規則。規則引擎的結構圖如圖1所示。它主要包括規則集容器、工作存儲器、模式匹配器和執行器[4]。數據采集模塊能夠得到對象的數據值,根據數據值通過條件庫模塊獲得對象所對應的狀態,將“對象→狀態”加載到工作存儲器。
圖1 規則引擎結構圖
2 規則引擎功能模塊
由于匹配器的性能決定著規則引擎的整體性能,我們的研究主要是針對匹配器性能的優化,因此需要詳細介紹匹配器的設計原理、工作模式等。
2.1 工作存儲器
工作存儲器存儲當前系統中的事實庫,每條事實由對象名和狀態構成,每條事實能夠為模式匹配器提供匹配條件。同時,工作存儲由條件庫模塊以及數據采集模塊支撐。如圖2所示,為了簡單處理,在我們仿真系統中共設置a-f 6個對象,它們分為開關量和模擬量:如果是開關量,那么采集的數值只有0(關閉)和1(開啟);如果是模擬量,它們的值分布在0~800之間,如果超過這個范圍系統會給出警告。然后把對象名和數據傳給條件庫模塊進行匹配,系統中條件庫模塊總共分為9個區域,分別對應低危險、低臨界、低警告、正常、高警告、高臨界、高危險、關閉和開啟,并且每個區域都有自己對應的取值區間。
2.2 規則集容器
在程序運行的開始首先需要解析XML文件,將解析出來的規則加載到內存中的規則集容器中。另外,在專家規則制定時,需要處理冗余、沖突等錯誤,然后將化簡后的最終結果存儲到XML文件中。因此,在規則引擎匹配得到要執行的規則結論時,一般規則引擎需要處理可能存在的沖突問題,而在系統中是將這些處理放在了專家規則庫的制定過程中,所以得到的規則結論都是最簡的且不存在沖突等問題的,當然要考慮規則結論執行的優先級問題。
圖2 工作存儲器結構
2.3 模式匹配器
模式匹配器是規則引擎中的核心組件,它聯系著工作存儲器和規則集容器,完成事實條件在規則集容器中的匹配工作,同時將匹配成功的規則結論傳送給執行器,供其完成相應的操作。
在我們的規則引擎系統中實現了三種匹配算法,位圖矩陣匹配,二階矩陣匹配,直接匹配。
如表1所示,給出了規則集示例,各個條件之間都是并且的關系,用&&表示,那么就會有If(a低危險 && b開啟 && c高臨界 && f高危險),Then 結論A。
表1 規則集示例
結論 條件
a b c d e f
A 低危險 開啟 高臨界 無關 無關 高危險
B 無關 關閉 低警告 無關 正常 無關
C 低警告 無關 低臨界 高臨界 無關 正常
2.3.1 直接匹配
在規則庫的制定過程中,會用&&對規則條件部分進行切分,例如規則1可以切分成“a低危險”,“b開啟”,“c高臨界”,“無關”“無關”,“f高危險”,然后存儲到XML文件中。在直接匹配過程中,規則引擎首先會將XML文件之前保存的這些切分元素加載到二維數組中,然后從工作存儲器中得到采集點a,b,c,d,e,f 所對應的狀態,將這些采集點對應的狀態與這個二維數組依次比對,并將匹配成功的規則結論返回給執行器。在直接匹配算法中采用的是字符串間的直接比較,由于某些規則與采集點無關,所以在比較每個采集點時,首先判斷規則與這個采集點是不是無關,然后再判斷兩者之間的關系。因此,如果規則集中有規則N條,那么總共的比較次數是12*N次。
如表2所示,為了形成規則集矩陣,需要對規則條件做一下轉換。表的第一行對應的是狀態,第二行是各個狀態所對應的數值。那么表1中的規則集就可以轉換成表3所示的二階矩陣。在規則庫制定過程中,將這個二階矩陣存儲到XML文件中。
表2 規則條件轉換
狀
態 關
閉 開
啟 低
危
險 低
臨
界 低
警
告 正
常 高
警
告 高
臨
界 高
危
險 無
關
轉換 0 1 2 3 4 5 6 7 8 9
表3 規則集矩陣
結論 條件
a b c d e f
A 2 1 7 9 9 8
B 9 0 4 9 5 9
C 4 9 3 7 9 5
2.3.2 二階矩陣匹配
規則引擎首先從XML文件中將這個二階矩陣加載到一個二維數組中,然后從事實庫中調出采集點a,b,c,d,e,f所對應的狀態,并根據表2將各個狀態轉換成對應數值,與二階矩陣數組進行比較。直接比較采用的是字符串間的比較,每次要比較的字節數較多,而二階矩陣是字符間的比較,每次只比較一個字節,比較的字節數要少很多。同樣,如果規則集中有規則N條,那么二階矩陣總的比較次數也是12*N。
將表3轉換成位圖矩陣,如表4所示。表4的左欄對應0~8九個狀態,然后分別用這些狀態與表3中的值進行比對,遇到相同值或者9那么對應的結果都為1,否則為0。例如,狀態0與表3中的a所對應的值(2,9,4)進行比對,那么結果就應該是(0,1,0);與b所對應的值(1,0,9)進行比對,那么結果就是(1,1,0)。同樣,在規則庫的制定過程中,就將這些值依次存儲到XML文件對應的節點上。
表4 位圖矩陣
狀態 條件
a b c d e f
0 010 110 000 011 101 010
1 010 101 000 011 101 010
2 011 100 000 011 101 010
3 010 100 100 011 101 010
4 110 100 010 011 101 010
5 010 100 000 011 111 110
6 010 100 000 011 101 010
7 010 100 001 111 101 010
8 010 100 000 011 101 011
在位圖矩陣匹配過程中,首先將這個位圖矩陣加載到一個字符型三維數組中,再從事實庫中獲取各個采集點所對應的狀態數值,然后進行與運算。值得注意的是,三維數組中只要有一個是0,那么就不需要再往下比對了,運算的最后結果確定是0。例如,事實庫中a,b,c,d,e,f所對應的狀態向量為(0,0,4,3,5,2),對應的位圖矩陣中的數值是V0:[0][1][0],V1: [1][1][0],V2:[0][1][0],V3:[0][1][1],V4:[1][1][1],V5:[0][1][0]。我們按照字節從低到高依次比較,由于V0的第一個字節為0,那么就不需要再往下比對了,結果的低位肯定是0,因此節省了比對時間。同理,第二字節結果為1,由于V0的第三個高字節也為0,則結果就是0。因此最后的比對結果是[0][1][0],第一個字節位對應結論A,第二個字節位對應結論B,第三個字節位對應結論C,只有結果不為0才能激活對應結論。因此,根據與運算結果,只能夠激活B結論,并將其返回。
2.4 執行器
執行器能夠執行匹配器返回的匹配成功的規則結論,并將執行結果返回給主程序,以便其采取相應操作。
3 實 驗
3.1 實驗環境介紹
這個規則引擎是在Ubuntu 12.04系統下用Qt語言編寫的,規則庫采用XML文件進行存儲。在聯想電腦上完成測試,電腦的CPU是 Intel? Core? 雙核,主頻是2.00 GHz,內存RAM是2 GB。
3.2 實驗結果分析
從圖3中可以看出,隨著規則條數的增加,加載時間基本呈線性增長,位圖矩陣加載時間最長,二階矩陣加載時間相對最短。但是,規則加載只是在程序最開始一次完成,在正常的后續運行過程中就不需要再加載。
圖3 各個算法的加載時間
圖4顯示出在不同規則集大小的情況下,三種算法完成匹配所需的時間。在每個規則集下,三種算法都測試10次,然后取平均值,這樣能夠降低系統誤差。從圖4可以看出,隨著規則集的增大,匹配時間呈線性增加,但是相對于另外兩種算法,位圖矩陣算法的匹配時間增長非常緩慢,直接匹配的方法增加最快。
圖4 各個算法的匹配時間
綜上所述,我們可以得出以下結論:
(1)規則加載時間隨著規則條數呈線性增長,但是位圖矩陣匹配時間增加相對緩慢;
(2)根據圖4計算得出位圖矩陣相對于直接匹配算法,匹配時間平均提高了88.03%。
4 結 語
本文針對工業防危系統設計實現了一套規則引擎系統,同時有針對性的對規則引擎關鍵環節——模式匹配器進行了優化,使得系統整體性能得到有效提高。
參考文獻
[1] Charles L. Forgy. Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem[J]. Artificial Intelligence ,1982.
[2] PET ER L. Drools Usage Manual [ EB/ OL ]. http: / / drools.org / drools- manual- 2. 0 - beta - 13. pdf, 2004- 01-05.
[3]龐偉正, 金瑞琪, 王成武.一種規則引擎的實現方法[J].哈爾濱工程大學學報,2005,26(3):385-389.
[4]彭磊.規則引擎原理分析[J].福建電腦,2006(9):42-43.