屬性進(jìn)行關(guān)聯(lián)判定,初 步匹配成功才能進(jìn)入常規(guī)匹配的環(huán)節(jié),而初步匹配不成功的則直接認(rèn)為該事實(shí)與該規(guī)則不 匹配。通過(guò)初步匹配過(guò)程,有效避免了不必要的常規(guī)匹配過(guò)程,提高了每次匹配的成功率, 從而減少了不必要的時(shí)間損耗,顯著提高整個(gè)規(guī)則引擎的運(yùn)行效率。
[0049] 下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的提高規(guī)則引擎運(yùn)行效率的方法作進(jìn)一步 的說(shuō)明。
[0050] 如圖1所示,一種提高規(guī)則引擎運(yùn)行效率的方法,包括:
[0051] 步驟101)建立事實(shí)集;
[0052] 所述事實(shí)集是若干個(gè)事實(shí)的集合;
[0053] 所述事實(shí)包含若干個(gè)事實(shí)變量,每個(gè)事實(shí)變量為與規(guī)則引擎相關(guān)的變量狀態(tài),通 常用"事實(shí)變量+邏輯描述符(是或等于)+數(shù)值或狀態(tài)值"的形式來(lái)表示。
[0054] 以事實(shí)"空氣溫度等于20°C"為例,此事實(shí)表示當(dāng)前空氣溫度的值為20°C。
[0055] 步驟102)建立規(guī)則集;
[0056] 所述規(guī)則集是若干個(gè)規(guī)則的集合;
[0057] 所述規(guī)則包括條件部分和動(dòng)作部分,通常用"如果……,則……"的形式表示,條件 部分為"如果……",動(dòng)作部分為"則……"。條件部分包含若干個(gè)條件元素,動(dòng)作部分包含 若干個(gè)動(dòng)作元素。若干個(gè)條件元素之間用"并且"或"或者"相連接,表示這些條件元素之 間的邏輯關(guān)系。每個(gè)條件元素的結(jié)果是一個(gè)布爾類(lèi)型,條件部分就是若干個(gè)布爾類(lèi)型表達(dá) 式的組合,其組合結(jié)果仍然是一個(gè)布爾類(lèi)型。只有在條件部分為真的情況下才會(huì)執(zhí)行動(dòng)作 部分中的若干個(gè)動(dòng)作元素。
[0058] 步驟103)對(duì)所述規(guī)則集中的每條規(guī)則增加對(duì)應(yīng)的"關(guān)聯(lián)事實(shí)"屬性;
[0059] 所述規(guī)則集中的每條規(guī)則由若干個(gè)條件元素組成;所述條件元素表示一個(gè)事實(shí)變 量的數(shù)量關(guān)系,由"事實(shí)變量+關(guān)系描述符(大于、小于、等于)+具體數(shù)值或狀態(tài)值"的形 式表示;所述條件元素的"關(guān)聯(lián)事實(shí)"為該條件元素對(duì)應(yīng)的"事實(shí)變量"。對(duì)應(yīng)所述規(guī)則集中 的每條規(guī)則的"關(guān)聯(lián)事實(shí)"屬性為該規(guī)則的若干個(gè)條件元素關(guān)聯(lián)的"事實(shí)變量"的集合。
[0060] 以規(guī)則"如果空氣溫度大于30°C并且空調(diào)是關(guān)閉狀態(tài),則打開(kāi)空調(diào)"為例,該規(guī)則 對(duì)應(yīng)的"關(guān)聯(lián)事實(shí)"屬性為"空氣溫度,空調(diào)"。
[0061] 步驟104)基于匹配算法將事實(shí)集與規(guī)則集進(jìn)行匹配,建立匹配規(guī)則集;
[0062] 步驟105)將匹配規(guī)則集中的規(guī)則按照規(guī)則優(yōu)先級(jí)確定規(guī)則的執(zhí)行順序;
[0063] 步驟106)按照規(guī)則的執(zhí)行順序執(zhí)行規(guī)則的動(dòng)作部分,并用執(zhí)行后的結(jié)果更新事 實(shí)集。
[0064] 上述技術(shù)方案中,所述匹配算法為古典Leaps算法或Rete算法。
[0065] 如圖2所示,作為一種優(yōu)選的實(shí)施方式,基于古典Leaps算法建立匹配規(guī)則集的具 體步驟為:
[0066] 步驟104-1)新建棧,存儲(chǔ)所述事實(shí)集的若干個(gè)事實(shí);
[0067] 步驟104-2)新建隊(duì)列,存儲(chǔ)所述規(guī)則集的若干個(gè)規(guī)則;
[0068] 步驟104-3)彈出棧頂元素,獲取一個(gè)事實(shí)F ;
[0069] 步驟104-4)從隊(duì)列中取出一條規(guī)則R ;
[0070] 步驟104-5)判斷所述事實(shí)F與所述規(guī)則R是否關(guān)聯(lián),如果判斷結(jié)果是肯定的,轉(zhuǎn) 入步驟104-6);否則,轉(zhuǎn)入步驟104-8);
[0071] 所述規(guī)則的"關(guān)聯(lián)事實(shí)"屬性的值是若干個(gè)條件元素關(guān)聯(lián)的"事實(shí)變量"的集合, 將所述事實(shí)F的每個(gè)事實(shí)變量與所述規(guī)則R的"事實(shí)變量"的集合進(jìn)行比較,若事實(shí)F存在 一個(gè)事實(shí)變量屬于規(guī)則R的"事實(shí)變量"的集合,則認(rèn)為該事實(shí)F與該規(guī)則R關(guān)聯(lián);否則,認(rèn) 為該事實(shí)F與該規(guī)則R不關(guān)聯(lián)。
[0072] 步驟104-6)判斷所述事實(shí)F是否使所述規(guī)則R的條件部分的結(jié)果為真,如果判斷 結(jié)果是肯定的,轉(zhuǎn)入步驟104-7);否則,轉(zhuǎn)入步驟104-8);
[0073] 步驟104-7)將所述規(guī)則R放入匹配規(guī)則集;
[0074] 步驟104-8)判斷隊(duì)列是否為空,如果判斷結(jié)果是肯定的,轉(zhuǎn)入步驟104-9);否則, 轉(zhuǎn)入步驟104-4);
[0075] 步驟104-9)判斷棧是否為空,如果判斷結(jié)果是肯定的,轉(zhuǎn)入步驟105);否則,轉(zhuǎn)入 步驟 104-3)。
[0076] 在android4. 0. 3的實(shí)際環(huán)境中對(duì)未采用本發(fā)明的方法的規(guī)則引擎和采用本發(fā)明 的方法的規(guī)則引擎進(jìn)行系統(tǒng)實(shí)現(xiàn)和實(shí)驗(yàn)測(cè)試。測(cè)試的事實(shí)集包括10個(gè)事實(shí);測(cè)試的規(guī)則集 分別包括5、10、20、30、40、50個(gè)規(guī)則。
[0077] 測(cè)試結(jié)果如表1所示:
[0078] 表 1
[0079]
[0080] 上述數(shù)據(jù)對(duì)應(yīng)的曲線圖為圖3,從圖3可以看出在規(guī)則引擎中,采用本發(fā)明的方法 為規(guī)則集中的每條規(guī)則添加"關(guān)聯(lián)事實(shí)"屬性后,規(guī)則引擎的運(yùn)行時(shí)間有明顯的減少,提高 了規(guī)則引擎的運(yùn)行效率。
【主權(quán)項(xiàng)】
1. 一種提高規(guī)則引擎運(yùn)行效率的方法,其特征在于,所述方法包括: 步驟101)建立事實(shí)集,所述事實(shí)集是若干個(gè)事實(shí)的集合; 步驟102)建立規(guī)則集,所述規(guī)則集是若干條規(guī)則的集合;每條規(guī)則包含條件部分和動(dòng) 作部分; 步驟103)對(duì)規(guī)則集中的每條規(guī)則增加其對(duì)應(yīng)的"關(guān)聯(lián)事實(shí)"屬性; 步驟104)基于匹配算法將事實(shí)集與規(guī)則集進(jìn)行匹配,建立匹配規(guī)則集; 步驟105)將匹配規(guī)則集中的規(guī)則按照規(guī)則優(yōu)先級(jí)確定規(guī)則的執(zhí)行順序; 步驟106)按照規(guī)則的執(zhí)行順序執(zhí)行每條規(guī)則的動(dòng)作部分,并用執(zhí)行后的結(jié)果更新事 實(shí)集。2. 根據(jù)權(quán)利要求1所述的提高規(guī)則引擎運(yùn)行效率的方法,其特征在于,所述步驟103) 進(jìn)一步包括: 所述規(guī)則集中的每條規(guī)則的條件部分由若干個(gè)條件元素組成;所述條件元素為一個(gè)事 實(shí)變量的數(shù)量關(guān)系,由"事實(shí)變量+關(guān)系描述符+具體數(shù)值或狀態(tài)值"的形式表示;所述條 件元素的"關(guān)聯(lián)事實(shí)"為該條件元素對(duì)應(yīng)的"事實(shí)變量",對(duì)應(yīng)于規(guī)則集中的每條規(guī)則的"關(guān) 聯(lián)事實(shí)"屬性的值是若干個(gè)條件元素關(guān)聯(lián)的"事實(shí)變量"的集合。3. 根據(jù)權(quán)利要求1所述的提高規(guī)則引擎運(yùn)行效率的方法,其特征在于,所述步驟104) 中的匹配算法為古典Leaps算法或Rete算法。4. 根據(jù)權(quán)利要求3所述的提高規(guī)則引擎運(yùn)行效率的方法,其特征在于,基于古典Leaps 算法建立匹配規(guī)則集的具體步驟為: 步驟104-1)新建棧,存儲(chǔ)所述事實(shí)集的若干個(gè)事實(shí); 步驟104-2)新建隊(duì)列,存儲(chǔ)所述規(guī)則集的若干條規(guī)則; 步驟104-3)彈出棧頂元素,獲取一個(gè)事實(shí)F ; 步驟104-4)從隊(duì)列中取出一條規(guī)則R ; 步驟104-5)判斷所述事實(shí)F與所述規(guī)則R是否關(guān)聯(lián),如果判斷結(jié)果是肯定的,轉(zhuǎn)入步 驟104-6);否則,轉(zhuǎn)入步驟104-8); 步驟104-6)判斷所述事實(shí)F是否使所述規(guī)則R的條件部分的結(jié)果為真,如果判斷結(jié)果 是肯定的,轉(zhuǎn)入步驟104-7);否則,轉(zhuǎn)入步驟104-8); 步驟104-7)將所述規(guī)則R放入匹配規(guī)則集; 步驟104-8)判斷隊(duì)列是否為空,如果判斷結(jié)果是肯定的,轉(zhuǎn)入步驟104-9);否則,轉(zhuǎn)入 步驟 104-4); 步驟104-9)判斷棧是否為空,如果判斷結(jié)果是肯定的,轉(zhuǎn)入步驟105);否則,轉(zhuǎn)入步驟 104-3)。5. 根據(jù)權(quán)利要求4所述的提高規(guī)則引擎運(yùn)行效率的方法,其特征在于,在所述步驟 104-5)中,判斷所述事實(shí)F與所述規(guī)則R是否關(guān)聯(lián)進(jìn)一步包括: 所述規(guī)則的"關(guān)聯(lián)事實(shí)"屬性的值是若干個(gè)條件元素關(guān)聯(lián)的"事實(shí)變量"的集合,將所 述事實(shí)F的每個(gè)事實(shí)變量與所述規(guī)則R的"事實(shí)變量"的集合進(jìn)行比較,若事實(shí)F存在一個(gè) 事實(shí)變量屬于規(guī)則R的"事實(shí)變量"的集合,則認(rèn)為該事實(shí)F與該規(guī)則R關(guān)聯(lián);否則,認(rèn)為該 事實(shí)F與該規(guī)則R不關(guān)聯(lián)。
【專利摘要】本發(fā)明涉及一種提高規(guī)則引擎運(yùn)行效率的方法,所述方法包括:步驟101)建立事實(shí)集;所述事實(shí)集包含若干個(gè)事實(shí);步驟102)建立規(guī)則集;所述規(guī)則集包含若干條規(guī)則,每條規(guī)則包含條件部分和動(dòng)作部分;步驟103)對(duì)規(guī)則集中的每條規(guī)則增加其對(duì)應(yīng)的“關(guān)聯(lián)事實(shí)”屬性;步驟104)基于匹配算法將事實(shí)集與規(guī)則集進(jìn)行匹配,建立匹配規(guī)則集;步驟105)將匹配規(guī)則集中的規(guī)則按照規(guī)則優(yōu)先級(jí)確定規(guī)則的執(zhí)行順序;步驟106)按照規(guī)則的執(zhí)行順序執(zhí)行規(guī)則的動(dòng)作部分,并用執(zhí)行后的結(jié)果更新事實(shí)集。本發(fā)明的方法能夠提高規(guī)則引擎推理中事實(shí)集和規(guī)則集的匹配命中率,減小時(shí)間損耗,有效提高規(guī)則引擎的運(yùn)行效率。
【IPC分類(lèi)】G06F9/44
【公開(kāi)號(hào)】CN105573737
【申請(qǐng)?zhí)枴緾N201410601682
【發(fā)明人】田瑞琴, 唐鼎, 楊興華, 楊國(guó)立, 趙志軍, 慈松, 譚紅艷
【申請(qǐng)人】中國(guó)科學(xué)院聲學(xué)研究所
【公開(kāi)日】2016年5月11日
【申請(qǐng)日】2014年10月30日