本發明屬于規則系統和實時
技術領域:
,具體涉及一種多核實時規則推理方法。
背景技術:
:規則推理能夠將領域知識表示為規則,通過規則與事實的匹配,觸發并執行規則,從而進行自動決策。它已被廣泛應用于醫療診斷、地質勘探、智能決策等各種專家系統中。近幾年來,實時系統對智能化的需求日益增加,它們需要能夠感知外部環境,并對其進行自動響應。在這種情況下,實時系統需要具有強大的推理能力,可以通過一系列傳感器采集外部環境數據,對連續不斷的事件流進行監視,從中識別出需要關注的場景,并進行自動決策,從而實時地執行動作對識別出的場景做出響應。因此,規則推理也開始應用于生產過程監控、高速列車在線故障診斷、電網自愈控制以及金融交易風險預警等實時系統。由于實時系統具有時間約束,系統中的任務需要在其截止期前完成,因此,規則推理中的規則也必須具有截止期。在本發明中,從與某條規則相關聯的所有數據被系統接收開始到該規則所定義的動作完成之間的時間間隔被定義為該規則的推理延遲,而規則推理延遲的上限則被定義為該規則的截止期。例如,在在工廠倉庫的火災監測中,當溫度過高、濕度過低和煙霧濃度異常時,則判斷可能發生火災并發出報警信息。由于系統從接收到溫度、濕度、煙霧等數據到推理出火災是否發生,并發出警報需要在10秒內進行完成,那么相應規則的截止期即為10秒。目前所提出的實時推理方法,例如:迭代推理(詳見t.deanandm.boddy.ananalysisoftime-dependentplanning.in:proc.ofaaai,1988:49-54;如anytime算法)、多重方法推理(詳見garveyaj,lesservr.design-to-timereal-timescheduling.ieeetrans.onsystemsman&cybernetics,1996,23(6):1491-1502;如design-to-time算法)和漸進式推理(詳見v.r.lesser,j.pavlin,e.durfee.approximateprocessinginreal-timeproblemsolving,aimagazine,1988,9(1):49-61;a.i.mouaddib,f.charpillet,j.p.haton.great:amodelofprogressivereasoningforreal-timesystems.in:proc.ofictai,1994:521-527;如great算法和primes算法)以及已有的規則推理系統(如clips,詳見http://clipsrules.sourceforge.net/;drools,詳見https://www.drools.org/),都沒有考慮規則的截止期。因此,在將這些方法與系統直接應用于實時系統時,會導致大量的規則截止期錯失,從而使上層實時應用的時間約束無法得到滿足。同時,隨著多核處理器的廣泛應用,規則所運行的硬件環境也往往是具有多核處理器的計算機。然而,目前的規則推理系統并沒有考慮其硬件運行環境,沒有充分利用多核處理器的特點,從而影響了規則推理的性能。技術實現要素:針對規則推理系統現有技術的不足,本發明提供一種多核實時規則推理方法,該方法能夠在多核運行環境下完成規則與數據的匹配,并使規則盡可能地在其截止期前執行完畢。在本發明中,根據用戶定義的規則集r編譯創建rete網絡(rete網絡的概念及原理詳見r.b.doorenbos,“productionmatchingforlargelearningsystems,”technicalreportcs-95-113,schoolofcomputerscience,carnegiemellonuniv.,1995),且rete網絡包括α網絡和β網絡。在rete網絡中,規則被表示為ifc1∧c2∧…ci…∧cnthena的形式,其中ci(1≤i≤n)被稱為條件元素(condition),條件元素ci可以和事實(fact)匹配;事實由類型名和若干屬性名-屬性值組成,其被表示成(typename(attr1x1)(attr2x2)…(attrkxk)…(attrmxm)),其中typename是事實的類型名,attrk(1≤k≤m)是屬性名,xk(1≤k≤m)是屬性名對應的屬性值(常量)。條件元素ci可被表示成(typename,constraint(atrri,xi)),其中xi是屬性名attri(1≤i≤m)的變量,constraint(attri,xi)是對類型為typename的事實中屬性名attri所對應變量xi取值的約束。條件元素ci的每一個約束對應rete網絡中的一個α節點,規則集中ci(1≤i≤n)的全部約束則形成了α網絡;rete網絡中的β網絡由若干β節點連接而成,不同條件元素間的邏輯組合被表示為一個β節點,例如c1,c1∧c2,c1∧…∧ck(1≤k≤n)均各自對應了β網絡的某個β節點。針對上述不足,本發明所采用的技術方案為:一種多核實時規則推理方法,適用于rete網絡,所述rete網絡包括α網絡和β網絡,其中所述α網絡由α節點組成,且一個α節點對應條件元素ci的一個約束;所述β網絡由β節點組成,且一個β節點表示不同條件元素的邏輯組合;所述方法步驟包括:1)根據輸入的事實x,使用一個cpu核確定rete網絡中該事實x的類型所對應的α節點;2)根據α節點所對應的約束進行過濾,若通過測試,則將事實x存儲在該α內存(alphamemory)中成為am(alphamatch);3)將am向上述α節點的后繼β節點傳遞,形成一個計算實例并放入該α節點的后繼β節點的實例隊列中;若該α節點的后繼β節點未被激活,則激活該α節點的后繼β節點并將其放入β激活隊列q中;4)當剩余cpu核空閑且β激活隊列q不為空時,從所述β激活隊列q中選擇優先級最高的β節點并記為節點b,從節點b的實例隊列中取出一個計算實例,根據綁定在節點b上的測試函數對該計算實例做變量一致性測試,如果通過測試,則判斷節點b是否為終止節點(即沒有后繼節點的節點);如果是則表明相應規則成功匹配一次,觸發該規則,并執行該規則所定義的動作;如果不是則產生新的計算實例,并將該計算實例加入節點b的后繼β節點的實例隊列中,并計算該后繼β節點的優先級,放入所述β激活隊列q中;如果未通過測試,則不產生新的計算實例,并停止本次操作;5)循環執行步驟4),直到節點b的實例隊列為空,則將節點b從β激活隊列q中刪除;6)循環執行步驟4)和步驟5),直到所述β激活隊列q為空。進一步地,所述rete網絡根據用戶定義的規則集r編譯創建,其步驟包括:a.創建根節點root;b.取一個規則ri(1≤i≤m),其中規則ri有條件元素c1…ci…cn;c.并依照規則ri中條件元素的順序,依次取出ri的一個條件元素ci(1≤i≤n),檢查其類型名typename,如果是新類型,則加入一個α節點,并將其作為當前節點;否則找到對應α節點,并將該節點作為當前節點;依次取出ci中的各約束,若被取出的約束所對應的α節點已經存在,則將其當前節點更新為對應α節點,否則新建一個α節點并作為當前節點的后繼,然后將當前節點更新為新建的α節點;循環以上過程直至取出ci中所有的約束,此時產生α內存;d.檢查ci與之前所取出的條件元素c1…c(i-1)的約束,并生成相應的β節點,該β節點的左輸入是前一個β節點(前一個β節點是指c1∧…∧c(i-1)所對應的β節點),右輸入是當前ci生成的α內存;e.重復c-d直到所有條件元素處理完;f.重復b-e直到所有規則處理完。進一步地,所述α網絡和β網絡通過一個β激活隊列q和β節點的實例隊列共同完成通信;且β網絡的β節點包括左輸入、右輸入、一個實例隊列、左存儲(left-memory)、右存儲(right-memory)和輸出。更進一步地,當一個β節點有輸入(左輸入或者右輸入)時,該β節點被激活,計算該β節點優先級,并按優先級遞減順序放入β激活隊列q中。進一步地,步驟2)中所述α內存存儲符合所有對應α節點約束的一類事實。進一步地,步驟3)中所述計算實例的形式為(β-id,am,left-memory);其中β-id表示所述α節點的后繼β節點的標識,left-memory是節點β-id對應的左存儲,存儲著部分匹配(partialmatch,pm);所述部分匹配是節點β-id通過join操作將am組合而成。進一步地,步驟4)中所述β節點優先級的計算方法為:其中r是規則集;deadline(ri)表示規則ri(1≤i≤m)的截止期;k是權值,可由專家經驗獲得;path(b,d)表示rete網絡中節點b到其可達的終止節點d(即沒有后繼節點的節點)的路徑長度;d是rete網絡中節點b可達的終止節點集合;且p(b)越小,優先級越大。進一步地,步驟4)中當節點b不是終止節點時進行以下步驟:4-1)從節點b的實例隊列中取出一個計算實例;4-2)若被取出的計算實例形式為(b,am,left-memory)(即由α網絡產生),首先將am存入節點b的right-memory中,根據綁定在節點b上的測試函數,一一遍歷left-memory中的pm,檢查和am中變量的一致性,如果通過測試,則產生新的部分匹配pm,并在該后繼β節點上產生新的計算實例,否則不產生部分匹配并停止本次操作;4-3)若被取出的計算實例形式為(b,pm,right-memory)(即由β網絡產生),首先將pm存入節點b的left-memory中,根據綁定在節點b上的測試函數,一一遍歷right-memory中的am,檢查和pm中變量的一致性,如果通過測試,則產生新的部分匹配pm,并在該后繼β節點上產生新的計算實例,否則不產生部分匹配并停止本次操作;4-4)將步驟4-2)和4-3)中后繼β節點上所產生的新的計算實例存儲在該后繼β節點的實例隊列中,并計算該后繼β節點的優先級,將其按優先級遞減順序放入所述β激活隊列q中。進一步地,步驟4)中所述新的計算實例的形式為(β*,pm,right-memory),其中β*是上述節點b的后繼β節點的標識,pm為節點b所產生的部分匹配,right-memory是節點β*的右存儲。本發明的有益效果在于:本發明提供一種多核實時規則推理方法,該方法使規則的匹配與執行盡量在規則截止期內完成,且該方法適用于實時系統,從而提高了實時系統的智能化程度。該方法優點具體包括:1、利用多核處理器的特點,將α網絡和β網絡對應不同線程,并分配在不同核上執行,α網絡和β網絡的多個線程間通過一個β激活隊列q和β節點的實例隊列共同完成通信,有效提高了規則匹配的并發性與效率。2、通過在β節點中加入left-memory、right-memory和一個實例隊列,從而使得β節點的計算對前驅和后繼節點沒有影響,進一步利用多核的性能,不同的cpu核可以并行處理β網絡,而β網絡所對應的各線程之間的通信由β激活隊列q和相關β節點的實例隊列共同完成,從而保證了β網絡由不同核并行處理時推理結果的正確性。3、按照β節點優先級來選擇被處理的β節點,優先級越大,越優先占用處理器,可以使得規則截止期短的規則優先被處理,從而提高了規則推理的實時性。附圖說明圖1是本發明一實施例的rete網絡和β節點結構模型示意圖;圖2是本發明的β線程執行流程圖。具體實施方式為使本發明的上述特征和優點能更明顯易懂,下文特舉實施例,并配合所附圖作詳細說明如下。本發明根據用戶定義的規則集r編譯創建rete網絡,且rete網絡包括α網絡和β網絡,其中α網絡由α節點組成,β網絡由β節點組成。且α網絡和β網絡通過一個β激活隊列q和β節點的實例隊列共同完成通信。假設用戶定義的規則集為r,其中每一個規則表示為ri(1≤i≤m),則建立rete網絡的具體步驟包括:a.創建根節點root;b.取出一個規則ri(設ri有條件元素c1…ci…cn);c.依照規則ri中條件元素的順序,依次取出ri的一個條件元素ci(1≤i≤n),檢查其類型名typename,如果是新類型,則加入一個α節點,并將其作為當前節點;否則找到對應α節點,并將該節點作為當前節點。依次取出ci中的各約束,若被取出的約束所對應的α節點已經存在,則將其作為當前節點,否則新建一個α節點并作為當前節點的后繼,然后將當前節點更新為新建的α節點;循環以上過程直至取出ci中所有的約束,此時產生α內存,在下述的推理過程中α內存可存儲符合所有對應α節點約束的一類事實;d.檢查ci與之前所取出的條件元素c1…c(i-1)的約束,并生成相應的β節點,該β節點的左輸入是前一個β節點(此時,前一個β節點對應了c1∧…∧c(i-1),第一個β節點的左輸入是root),右輸入是當前ci生成的α內存;e.重復c-d直到所有條件元素處理完;f.重復b-e直到所有規則處理完。請參考圖1,該圖為本發明一實施例的rete網絡和β節點結構模型示意圖。所述α網絡是一種trie樹結構,主要作用是將輸入數據解析成內部對象(可以是c++類的一個對象),α節點檢查對象的屬性后,將這些對象緩存在對應的α節點的α內存中成為一個am。β網絡中β節點包含兩個輸入(左輸入與右輸入)、一個實例隊列、兩個存儲(左left-memory、right-memory)和輸出。β節點將輸入和對應的存儲做逐一比較(join操作)生成部分匹配pm并向后繼β節點傳遞形成計算實例,然后放入后繼β節點的實例隊列中。β節點的一個左輸入(pm)需要跟該β節點中right-memory的am逐一比較,根據該β節點的函數做變量一致性測試,β節點的一個右輸入(am)需要和該β節點中left-memory的部分匹配pm逐一比較,根據該β節點的函數做變量一致性測試。本發明首先將α網絡和β網絡分割交給不同線程處理,每個cpu核對應一個線程,處理α網絡的線程稱為α線程,處理β網絡的線程稱為β線程。本發明主要涉及其中的β線程。β線程把β節點和該β節點的一個輸入和對應的β存儲當做一個計算實例,即(β,am,left-memory)或者(β,pm,right-memory),不同的β線程可以同時處理不同的β節點,從而可以并發處理β網絡。所述α線程負責對同一類事實的屬性做常量測試,將事實放入對應的α節點中的α內存。本發明分配一個α線程。其步驟如下:1)每當一個事實x到達規則推理系統時,將其與相應的α節點進行匹配。本發明中根據檢查x屬性,例如檢查x.name==’jack’或者x.age>20等常量測試,最后找到rete網絡中對應的α節點,將其存儲在該α節點的α內存中成為am,這個am只包含了一個事實即x。2)將am向上述α節點的后繼β節點傳遞,然后形成一個形式為(β-id,am,left-memory)的計算實例,其中β-id為上述α節點的后繼β節點的標識,left-memory是節點β-id對應的左存儲,且是一個鏈表結構,鏈表的每個元素都是一個部分匹配。例如所述α節點的后繼β節點右輸入對應c3,那么它的left-memory存儲c1∧c2的部分匹配所有元素。3)將該計算實例(β-id,am,left-memory)放在節點β-id中的實例隊列,如果節點β-id第一次被放入實例隊列,則同時將節點β-id激活,并計算節點β-id的優先級,放入β激活隊列q中。4)循環執行步驟1)至3),直到沒有事實為止。所述β線程負責對不同類事實之間的屬性做變量一致性測試,將產生的部分匹配pm放入對應β節點存儲或者觸發規則。請參考圖2,該圖是本發明β線程的執行流程圖。本發明將剩下的線程分配成β線程。其具體步驟包括:1)當β激活隊列q不為空,并且β線程空閑時,β線程從β激活隊列q中選擇優先級最大并且不被其他β線程處理的β節點,并記為節點b,取出節點b上實例隊列的第一個計算實例,由該β線程處理這一個計算實例s;2)β線程選中的計算實例s,如果是右輸入產生即α網絡產生的計算實例(b,am,left-memory)時:首先將am放入節點b的right-memory中,再根據綁定在節點b上的測試函數,一一遍歷left-memory中的pm,檢查和am中變量的一致性,例如left-memory中的pm是c1∧c2的部分匹配,節點b右輸入對應c3,am是c3對應的事實,如果通過測試,比如c1.id==c3.num或者c2.age>c3.age,則判斷節點b是否為終止節點;如果節點b是終止節點,則表明相應規則成功匹配一次,觸發該規則,并執行該規則所定義的動作;如果節點b不是終止節點,則產生新的部分匹配pm(c1∧c2∧c3),并在節點b的后繼β節點上產生新的計算實例(β*,pm,right-memory),其中β*是節點b的后繼β節點的標識,pm為上述節點b所產生的部分匹配,right-memory是節點β*的右存儲;如果未通過測試,則不產生部分匹配并停止本次操作;3)β線程選中的計算實例s,如果是左輸入產生即β網絡產生的計算實例(b,pm,right-memory)時,首先將pm放入節點b的left-memory中,然后類似1)的操作。根據綁定在節點b的測試函數,一一遍歷right-memory中的am,檢查和pm中變量的一致性,如果通過測試,則判斷節點b是否為終止節點;如果節點b是終止節點,則表明相應規則成功匹配一次,觸發該規則,并執行該規則所定義的動作;如果節點b不是終止節點,則產生新的部分匹配pm,并在節點b的后繼β節點上產生新的計算實例(β*,pm,right-memory);如果未通過測試,則不產生部分匹配并停止本次操作。4)上述步驟1)和步驟2)中都可能產生新的部分匹配pm,并向節點β*(即節點b的后繼β節點)傳遞,形成一個形式為(β*,pm,right-memory)的計算實例。將這個新形成的計算實例放入節點β*的實例隊列,如果節點β*未在β激活隊列q中,即節點β*的實例隊列原來為空,那么現在稱節點β*被激活,需要再將節點β*根據優先級放入β激活隊列q中;否則直接放入節點β*的實例隊列的隊尾即可。5)循環執行步驟1)至4),判斷節點b的實例隊列是否為空,如果為空則將節點b從β激活隊列q中刪除。6)循環執行步驟1)至5),直到所述β激活隊列q為空為止。所述β節點的優先級的計算方法為:其中r是規則集;deadline(ri)表示規則ri((1≤i≤m))的截止期;k是權值,可由專家經驗獲得;path(b,d)表示rete網絡中節點b到其可達的終止節點d(即沒有后繼節點的節點)的路徑長度;d是rete網絡中節點b可達的終止節點集合;且p(b)越小,優先級越大。下面結合2條具體規則和相關數據,對本發明方法做進一步說明。上述兩條規則分別對應圖1中的r1和r3,一共有5個β節點即b1-b5,b1、b2是兩條規則的共享節點。其中b1和b4不需要做任何測試,b2需要檢查c1和c2的attr1對應的值是否相等,b3需要檢查c3的attr1對應的值是否等于c1的attr2對應的值,b5需要檢查c3的attr1對應的值是否等于c4的attr2對應的值。如果規則對應的數據滿足了各種測試,那么最后到達的數據對應的時刻和對應的報警時刻,延時應該滿足截止期要求。所有數據可以看做是同一時間到來,表1只是一種可能的執行順序。表1:數據執行順序數據對應β節點f1:(c1(attr110)(attr215))b1f2:(c2(attr110)(attr210))b2f3:(c4(attr115)(attr215))b4f4:(c3(attr115)(attr225))b3,b5(1)所有數據同時到達α內存,對應的β節點有了右輸入,也就是計算實例,這些計算實例按照先后順序被存儲在對應β節點的實例隊列,β節點也被激活。因此,每個β節點的實例隊列如表2所示。表2:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1f1nullnull0b2f2nullnull50b3f4nullnull450b4f3nullnull100b5f4nullnull150其中,p(b)是根據下述公式得到:例如k=50,b2同時屬于r1和r2,那么b2可達的終止節點有2個,b2到這兩個終止節點的路徑長度分別為2和3,因此p(b)=200-50*3=50,,剩余β節點優先級計算類似。所以,此時的激活隊列按照優先級排列是:b1>b2>b4>b5>b3。(2)線程1從β激活隊列q中選擇b1處理,線程2從β激活隊列q中選擇b2處理。線程1處理b1,由于b1中沒有測試函數,并且b1不需要在b1中存儲f1,所以將f1作為部分匹配f1^直接傳遞給后繼β節點b2,存儲在b2的實例隊列中。此時,線程2從b2實例隊列中取出f2,放入b2的right-memory,再遍歷b2的left-memory中的部分匹配,逐一比較,此時b2的left-memory仍然為空,因此這次計算不產生新的計算實例。此刻,每個β節點的實例隊列如表3所示。表3:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1空nullnullb2f1^nullf2^50b3f4nullnull450b4f3nullnull100b5f4nullnull150(3)線程1從β激活隊列q中選擇b2處理,線程2從β激活隊列q選擇b3處理。線程1取出b2實例隊列的隊首元素f1^,存儲在b2的left-memory,因為f1^是左輸入,所以要逐一比較b2中right-memory中的元素(f2^),通過測試產生新的部分匹配f1^f2,然后將部分匹配向后繼β節點傳遞,放入b3和b4的實例隊列中。線程2取出f4,并放入b3的right-memory中,因為f4是右輸入,所以要逐一比較b3中left-memory中的元素,當前b3的left-memory為空,所以不產生新的計算實例。此刻,每個β節點的實例隊列如表4所示。表4:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1空nullnullb2空f1^f2^b3f1^f2nullnull450b4f3,f1^f2nullnull100b5f4nullnull150(4)線程1從β激活隊列q中選擇b4處理,線程2從β激活隊列q中選擇b5處理。線程1取出f3,并放入b4的right-memory中。因為f3是右輸入,所以要逐一比較b4中left-memory中的元素,此時b4的left-memory為空,所以不產生新的計算實例。線程2取出b5中的f4,并放入b5中的right-memory,此時b5的left-memory也為空,所以也不產生新的計算實例。此刻,每個β節點的實例隊列如表5所示。表5:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1空nullnullb2空f1^f2^b3f1^f2nullnull450b4f1^f2nullf3^100b5nullf4^(5)線程1從b4的實例隊列中選擇f1^f2處理,線程2從β激活隊列q中選擇b3處理。線程1取出f1^f2,將f1^f2放入b4的left-memory中,因為f1^f2是左輸入,所以需要逐一比較b4的right-memory中的元素(f3),因為b4沒有測試函數,所以產生新的部分匹配f1^f2^f3,放入后繼β節點b5的實例隊列中。線程2取出b3上的f1^f2,因為是左輸入,所以需要逐一比較b3的right-memory中的元素(f4),b3的測試函數檢查f1的attr2和f4的attr1是否相等,通過測試,因為b3沒有后繼β節點,所以表示推理成功一次。此刻,每個β節點的實例隊列如表6所示。表6:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1空nullnullb2空f1^f2f2^b3空nullnullb4空f1^f2f3^b5f1^f2^f3nullf4^200(6)線程1取出b5上的f1^f2^f3,逐一匹配b5上的right-memory(f4^),匹配成功,所以推理成功一次。此刻,每個β節點的實例隊列如表7所示。表7:β節點的實例隊列β節點實例隊列left-memoryright-memoryp(b)b1空nullnullb2空f1^f2f2^b3空nullnullb4空f1^f2f3^b5空nullf4^以上實施僅用以說明本發明的技術方案而非對其進行限制,本領域的普通技術人員可以對本發明的技術方案進行修改或者等同替換,而不脫離本發明的精神和范圍,本發明的保護范圍應以權利要求書所述為準。當前第1頁12