一種規(guī)則處理方法及設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電子技術(shù)領(lǐng)域,特別涉及一種規(guī)則處理方法。本發(fā)明同時(shí)還設(shè)計(jì)一種規(guī)則處理設(shè)備。
【背景技術(shù)】
[0002]規(guī)則引擎是基于一組規(guī)則集和規(guī)則運(yùn)算上下文進(jìn)行規(guī)則匹配運(yùn)算的裝置,是一種嵌入在應(yīng)用程序中的組件,實(shí)現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來(lái),并使用預(yù)定義的語(yǔ)義模塊編寫(xiě)業(yè)務(wù)決策。接受數(shù)據(jù)輸入,解釋業(yè)務(wù)規(guī)則,并根據(jù)業(yè)務(wù)規(guī)則做出業(yè)務(wù)決策。
[0003]使用規(guī)則引擎必須預(yù)先準(zhǔn)備規(guī)則運(yùn)算上下文以及規(guī)則,前者為用于規(guī)則運(yùn)算的原始數(shù)據(jù),例如{A = 0,B = 6,C = 10}這樣的數(shù)據(jù)集合;后者則是由多個(gè)規(guī)則節(jié)點(diǎn)組成的邏輯運(yùn)算表達(dá)式,形如(A = 0&&B >5) I |C ! = 10。由于規(guī)則是一串邏輯表達(dá)式,其在由規(guī)則引擎運(yùn)算的時(shí)候會(huì)被解析為一顆二叉語(yǔ)法數(shù),該語(yǔ)法樹(shù)稱為規(guī)則語(yǔ)法樹(shù)。而規(guī)則語(yǔ)法樹(shù)的左右節(jié)點(diǎn)就是規(guī)則節(jié)點(diǎn)。比如(A = 0&&B > 5) I |C ! =10的節(jié)點(diǎn)為左節(jié)點(diǎn)(A = 0&&B >5);右節(jié)點(diǎn)C ! =10。根據(jù)應(yīng)用場(chǎng)景的不同,節(jié)點(diǎn)A = 0&&B > 5還可以繼續(xù)分解為更多的節(jié)點(diǎn)。
[0004]根據(jù)規(guī)則使用規(guī)則引擎可以通過(guò)降低實(shí)現(xiàn)復(fù)雜業(yè)務(wù)邏輯的組件的復(fù)雜性,降低應(yīng)用程序的維護(hù)和可擴(kuò)展性成本。具體通過(guò)規(guī)則匹配來(lái)實(shí)現(xiàn),規(guī)則匹配是規(guī)則和規(guī)則運(yùn)算上下文進(jìn)行運(yùn)算的過(guò)程,規(guī)則運(yùn)算的過(guò)程一般是按照二叉樹(shù)遍歷的方式進(jìn)行運(yùn)算。確定一條規(guī)則是否和上下文中的值預(yù)期相同,如果相同則認(rèn)為規(guī)則匹配。比如對(duì)于規(guī)則(Α = 0&&Β> 5) I |C ! = 10,規(guī)則上下文{A = 0,B = 6,C = 10}:對(duì)于節(jié)點(diǎn)(A = 0&&B > 5)匹配為true,對(duì)于C ! = 10為false, true false = true,說(shuō)明此條規(guī)則是被匹配的。
[0005]發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中發(fā)現(xiàn),現(xiàn)有的規(guī)則引擎對(duì)規(guī)則進(jìn)行解析后所生成的規(guī)則語(yǔ)法樹(shù)是靜態(tài)的。而在多樣化的輸入?yún)?shù)下,語(yǔ)法樹(shù)的匹配路徑也呈現(xiàn)多樣化,很難到達(dá)最優(yōu)化的匹配路徑。因此,如何對(duì)規(guī)則進(jìn)行優(yōu)化以及調(diào)整,從而提高設(shè)備在進(jìn)行規(guī)則運(yùn)算時(shí)的效率,成為本領(lǐng)域普通技術(shù)人員亟待解決的技術(shù)問(wèn)題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供了一種規(guī)則處理方法,使規(guī)則引擎在運(yùn)算處理后的規(guī)則更加地快速以及高效,該方法包括:
[0007]獲取與待處理規(guī)則對(duì)應(yīng)的規(guī)則語(yǔ)法樹(shù);
[0008]將規(guī)則運(yùn)算上下文中的原始數(shù)據(jù)代入所述規(guī)則語(yǔ)法樹(shù)中的各規(guī)則節(jié)點(diǎn)中,確定與各所述規(guī)則節(jié)點(diǎn)對(duì)應(yīng)的匹配成功率;
[0009]將所述規(guī)則語(yǔ)法樹(shù)中各邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的匹配成功率進(jìn)行對(duì)比;
[0010]根據(jù)所述邏輯運(yùn)算關(guān)系的類型以及匹配成功率對(duì)比結(jié)果互相調(diào)整所述邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的位置。
[0011]相應(yīng)的,本發(fā)明還提出了一種規(guī)則處理設(shè)備,包括:
[0012]獲取模塊,用于獲取與待處理規(guī)則對(duì)應(yīng)的規(guī)則語(yǔ)法樹(shù);
[0013]確定模塊,用于將規(guī)則運(yùn)算上下文中的原始數(shù)據(jù)代入所述規(guī)則語(yǔ)法樹(shù)中的各規(guī)則節(jié)點(diǎn)中,確定與各所述規(guī)則節(jié)點(diǎn)對(duì)應(yīng)的匹配成功率;
[0014]對(duì)比模塊,用于將所述規(guī)則語(yǔ)法樹(shù)中各邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的匹配成功率進(jìn)行對(duì)比;
[0015]調(diào)整模塊,用于根據(jù)所述邏輯運(yùn)算關(guān)系的類型以及匹配成功率對(duì)比結(jié)果互相調(diào)整所述邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的位置。
[0016]由此可見(jiàn),通過(guò)應(yīng)用本發(fā)明的技術(shù)方案,確定與待處理規(guī)則對(duì)應(yīng)的規(guī)則語(yǔ)法樹(shù)中各規(guī)則節(jié)點(diǎn)對(duì)應(yīng)的匹配成功率后,將規(guī)則語(yǔ)法樹(shù)中各邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的匹配成功率進(jìn)行對(duì)比,最終根據(jù)邏輯運(yùn)算關(guān)系的類型以及匹配成功率對(duì)比結(jié)果互相調(diào)整邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的位置,從而達(dá)到了最佳匹配路徑,減少了后續(xù)過(guò)程中規(guī)則節(jié)點(diǎn)的匹配次數(shù),使得規(guī)則弓I擎運(yùn)算效果得到了優(yōu)化。
【附圖說(shuō)明】
[0017]圖1為本發(fā)明提出的一種規(guī)則處理方法的流程示意圖;
[0018]圖2為本發(fā)明具體實(shí)施例基于規(guī)則解析時(shí)對(duì)規(guī)則結(jié)構(gòu)進(jìn)行優(yōu)化的示意圖;
[0019]圖3為本發(fā)明具體實(shí)施例中規(guī)則優(yōu)化裝置流程的實(shí)際應(yīng)用示意圖;
[0020]圖4為本發(fā)明提出的一種規(guī)則處理設(shè)備的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0021]如【背景技術(shù)】所述,傳統(tǒng)的規(guī)則引擎對(duì)規(guī)則解析生成規(guī)則語(yǔ)法樹(shù)后,語(yǔ)法樹(shù)是靜態(tài)的。在多樣化的輸入?yún)?shù)下,語(yǔ)法樹(shù)的匹配路徑也呈現(xiàn)多樣化,很難到達(dá)最優(yōu)化的匹配路徑。本發(fā)明使用規(guī)則節(jié)點(diǎn)匹配成功率,對(duì)規(guī)則的匹配情況進(jìn)行量化,通過(guò)使用量化的方式對(duì)規(guī)則語(yǔ)法樹(shù)進(jìn)行調(diào)整,從而到達(dá)最優(yōu)的匹配路徑。
[0022]如圖1所示,為本發(fā)明提出的一種規(guī)則處理方法的流程示意圖,包括以下步驟:
[0023]SlOl,獲取與待處理規(guī)則對(duì)應(yīng)的規(guī)則語(yǔ)法樹(shù)。
[0024]S102,將規(guī)則運(yùn)算上下文中的原始數(shù)據(jù)代入所述規(guī)則語(yǔ)法樹(shù)中的各規(guī)則節(jié)點(diǎn)中,確定與各所述規(guī)則節(jié)點(diǎn)對(duì)應(yīng)的匹配成功率。
[0025]具體的,本步驟中首先將所述原始數(shù)據(jù)分別代入對(duì)應(yīng)的規(guī)則節(jié)點(diǎn)中,隨后確定所述規(guī)則節(jié)點(diǎn)在代入與其對(duì)應(yīng)的原始數(shù)據(jù)后的匹配成功次數(shù),以及所述規(guī)則節(jié)點(diǎn)所代入的原始數(shù)據(jù)的總數(shù),最終將所述匹配成功次數(shù)與所述總數(shù)的比值作為與所述規(guī)則節(jié)點(diǎn)的匹配成功率。
[0026]S103,將所述規(guī)則語(yǔ)法樹(shù)中各邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的匹配成功率進(jìn)行對(duì)比。
[0027]在具體的實(shí)施過(guò)程中,該步驟按照以下規(guī)則執(zhí)行:
[0028](I)若所述邏輯運(yùn)算關(guān)系為與運(yùn)算,且所述規(guī)則關(guān)系的左規(guī)則節(jié)點(diǎn)的匹配成功率大于右規(guī)則節(jié)點(diǎn)的匹配成功率,將所述左規(guī)則節(jié)點(diǎn)與所述右規(guī)則節(jié)點(diǎn)相對(duì)于所述規(guī)則關(guān)系互相交換位置;
[0029](2)若所述邏輯運(yùn)算關(guān)系為與運(yùn)算,且所述規(guī)則關(guān)系的左規(guī)則節(jié)點(diǎn)的匹配成功率小于右規(guī)則節(jié)點(diǎn)的匹配成功率,保持當(dāng)前所述左規(guī)則節(jié)點(diǎn)與所述右規(guī)則節(jié)點(diǎn)相對(duì)于所述規(guī)則關(guān)系的位置;
[0030](3)若所述邏輯運(yùn)算關(guān)系為或運(yùn)算,且所述規(guī)則關(guān)系的左規(guī)則節(jié)點(diǎn)的匹配成功率大于右規(guī)則節(jié)點(diǎn)的匹配成功率,保持當(dāng)前所述左規(guī)則節(jié)點(diǎn)與所述右規(guī)則節(jié)點(diǎn)相對(duì)于所述規(guī)則關(guān)系的位置;
[0031](4)若所述邏輯運(yùn)算關(guān)系為或運(yùn)算,且所述規(guī)則關(guān)系的左規(guī)則節(jié)點(diǎn)的匹配成功率小于右規(guī)則節(jié)點(diǎn)的匹配成功率,將所述左規(guī)則節(jié)點(diǎn)與所述右規(guī)則節(jié)點(diǎn)相對(duì)于所述規(guī)則關(guān)系互相交換位置。
[0032]S104,根據(jù)所述邏輯運(yùn)算關(guān)系的類型以及匹配成功率對(duì)比結(jié)果互相調(diào)整所述邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的位置。
[0033]在對(duì)當(dāng)前的邏輯運(yùn)算關(guān)系調(diào)整完畢后,本發(fā)明還將判斷所述規(guī)則語(yǔ)法樹(shù)中各所述邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)是否都已對(duì)比或互相調(diào)整完畢;若是,輸出所述規(guī)則語(yǔ)法樹(shù);若否,繼續(xù)根據(jù)邏輯運(yùn)算關(guān)系的類型以及匹配成功率對(duì)比結(jié)果互相調(diào)整所述邏輯運(yùn)算關(guān)系的左右規(guī)則節(jié)點(diǎn)的位置。
[0034]為了進(jìn)一步闡述本發(fā)明的技術(shù)思想,現(xiàn)結(jié)合如圖2所示的具體應(yīng)用實(shí)施例以及圖3所示的具體應(yīng)用場(chǎng)景,對(duì)本發(fā)明的技術(shù)方案進(jìn)行說(shuō)明:
[0035]S201,輸入原始的規(guī)則表達(dá)式至規(guī)則解析裝置;
[0036]S202,由規(guī)則解析裝置輸出解析后的語(yǔ)法樹(shù);
[0037]S203,向規(guī)則優(yōu)化裝置輸入解析后的語(yǔ)法樹(shù);
[0038]S204,規(guī)則優(yōu)化裝置向規(guī)則節(jié)點(diǎn)成功率統(tǒng)計(jì)裝置獲取節(jié)點(diǎn)成功率,并以此對(duì)規(guī)則進(jìn)行優(yōu)化;
[0039]S205,輸出優(yōu)化后的語(yǔ)法樹(shù)。
[0040]在以上具體實(shí)施例的過(guò)程中,定義符號(hào)MSR(A)表示節(jié)點(diǎn)A的匹配成功率(MatchSuccess Rate),相應(yīng)的邏輯運(yùn)算關(guān)系均分解為“與運(yùn)算”以及“或運(yùn)算”這兩種關(guān)系,因?yàn)楦鼜?fù)雜的關(guān)系也是這兩種關(guān)系的組合。其中,“與預(yù)算”的格式為A&&B,“或運(yùn)算”則為A| |B。以下分別為對(duì)兩種類型的邏輯運(yùn)算關(guān)系采取本發(fā)明方案的結(jié)果分析:
[0041](I)與運(yùn)算邏輯運(yùn)算關(guān)系
[0042]首先,設(shè)定規(guī)則A&&B的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)為:1+MSR㈧;而規(guī)則B&&A的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)為:1+MSR(B);
[0043]基于以上設(shè)定可以得出(1+MSR(A))-(1+MSR(B)) = MSR(A)-MSR(B),該公式在當(dāng)MSR(A) > MSR(B)時(shí)可以得出(I+MSR(A)) > (1+MSR⑶),即A&&B的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)大于B&&A的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù),所以規(guī)則B&&A是更優(yōu)的規(guī)則,當(dāng)規(guī)則配置為B&&A時(shí)可以是規(guī)則運(yùn)算次數(shù)更少,性能更優(yōu)。
[0044](2)或運(yùn)算邏輯運(yùn)算關(guān)系
[0045]將規(guī)則Al B的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)為:1+(1-MSR㈧)*1,而將規(guī)則B |A的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)為:1+(1-MSR(B))*1。此時(shí)根據(jù)以上設(shè)定可得出(1+(1-MSR(A))*1)-(1+(1-MSR(B))*1) = MSR(B)-MSR(A)。即當(dāng) MSR(A) > MSR(B)的時(shí)候(1+(1_MSR(A))*1)< (1+(1_MSR(B))*1),A| IB的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù)小于B I IA的規(guī)則節(jié)點(diǎn)匹配運(yùn)算次數(shù),所以規(guī)則Al Ib是更優(yōu)的規(guī)則,而當(dāng)規(guī)則配置為Al Ib時(shí)可以是規(guī)則運(yùn)算次數(shù)更少,性能更優(yōu)。
[0046]結(jié)合以上分析,在圖3所示的具體實(shí)施例流程圖中,對(duì)于與運(yùn)算節(jié)點(diǎn),M