劉 永,李子揚(yáng),竇 帥,周春城,李傳榮+
(1.中國(guó)科學(xué)院光電研究院 中國(guó)科學(xué)院定量遙感信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 100094;2.中國(guó)科學(xué)院大學(xué) 電子電氣與通信工程學(xué)院,北京 100049)
任務(wù)調(diào)度系統(tǒng)是衛(wèi)星地面系統(tǒng)的重要組成部分,是進(jìn)行衛(wèi)星資源管理與分配的主要工具,負(fù)責(zé)衛(wèi)星任務(wù)計(jì)劃的編制、執(zhí)行和控制調(diào)整,在衛(wèi)星資源相對(duì)稀缺、用戶的任務(wù)需求不能全部滿足的情況下,實(shí)現(xiàn)衛(wèi)星資源的合理分配與沖突資源的優(yōu)化調(diào)度尤為重要[1,2]。隨著航天事業(yè)的發(fā)展,衛(wèi)星功能不斷增強(qiáng),衛(wèi)星任務(wù)需求與任務(wù)調(diào)度模式不斷演進(jìn)[3],使得調(diào)度規(guī)則發(fā)生變化,促使調(diào)度系統(tǒng)不斷升級(jí)。傳統(tǒng)方式使用配置文件或配置參數(shù)來增強(qiáng)系統(tǒng)的柔性和靈活性,但功能相對(duì)有限,難以適應(yīng)具體調(diào)度規(guī)則的變化。因此建立一個(gè)柔性的、靈活性較高的任務(wù)調(diào)度系統(tǒng),方便調(diào)度規(guī)則的修改和定制,降低調(diào)度系統(tǒng)的維護(hù)成本,是十分必要的。
為此本文將規(guī)則引擎技術(shù)應(yīng)用于獨(dú)占資源衛(wèi)星任務(wù)調(diào)度中,通過規(guī)則引擎將調(diào)度規(guī)則從業(yè)務(wù)邏輯代碼中分離出來,減少調(diào)度規(guī)則的變動(dòng)對(duì)業(yè)務(wù)邏輯代碼的影響,增強(qiáng)調(diào)度系統(tǒng)的柔性和靈活性,降低調(diào)度系統(tǒng)維護(hù)的風(fēng)險(xiǎn)及成本。同時(shí)設(shè)計(jì)基于權(quán)重的推理網(wǎng)構(gòu)建方法,優(yōu)化了推理網(wǎng)的結(jié)構(gòu),提高了調(diào)度系統(tǒng)的運(yùn)行效率。
根據(jù)任務(wù)調(diào)度模式的不同可將獨(dú)占資源通訊衛(wèi)星任務(wù)調(diào)度分為集中任務(wù)調(diào)度和應(yīng)急任務(wù)調(diào)度[4,5]。集中任務(wù)調(diào)度是在本周的某固定時(shí)間對(duì)用戶提交的下周的衛(wèi)星資源使用申請(qǐng)進(jìn)行集中處理的過程,按照規(guī)定,在集中調(diào)度時(shí)間點(diǎn)后提交的一般性衛(wèi)星資源使用申請(qǐng)?jiān)诒敬握{(diào)度周期中不予受理,但是由于突發(fā)的重要事件而產(chǎn)生的緊急衛(wèi)星資源使用申請(qǐng),需進(jìn)行及時(shí)的特殊處理,這其中特殊處理被稱為應(yīng)急任務(wù)調(diào)度模式。
在集中任務(wù)調(diào)度模式中,任務(wù)調(diào)度響應(yīng)的時(shí)間要求并不緊急,調(diào)度目標(biāo)是在滿足任務(wù)時(shí)效性的前提下實(shí)現(xiàn)調(diào)度任務(wù)的優(yōu)先級(jí)之和最大,一般采用遺傳算法等智能優(yōu)化算法求解近似最優(yōu)調(diào)度方案。應(yīng)急任務(wù)調(diào)度模式是在集中任務(wù)調(diào)度方案的基礎(chǔ)上進(jìn)行的再調(diào)度,由于應(yīng)急任務(wù)的突發(fā)性、緊急性及重要性,這類任務(wù)擁有較高的優(yōu)先級(jí)和任務(wù)價(jià)值,所以采用基于優(yōu)先級(jí)的調(diào)度策略,使優(yōu)先級(jí)高的任務(wù)具有優(yōu)先執(zhí)行權(quán)。
本文調(diào)度的思路是當(dāng)有應(yīng)急任務(wù)提交時(shí),在集中任務(wù)調(diào)度方案的基礎(chǔ)上采用直接調(diào)度或沖突替換原則。直接調(diào)度原則為當(dāng)應(yīng)急任務(wù)滿足衛(wèi)星資源使用的各種約束,且申請(qǐng)的衛(wèi)星資源處于空閑狀態(tài),則將該任務(wù)直接納入衛(wèi)星工作計(jì)劃。沖突替換原則為應(yīng)急任務(wù)滿足衛(wèi)星資源使用的各種約束,但申請(qǐng)的衛(wèi)星資源處于被占用狀態(tài)時(shí),即應(yīng)急任務(wù)與已有的衛(wèi)星工作計(jì)劃發(fā)生資源使用沖突,如果與應(yīng)急任務(wù)產(chǎn)生沖突的計(jì)劃數(shù)量為一,且應(yīng)急任務(wù)的優(yōu)先級(jí)大于計(jì)劃的優(yōu)先級(jí),則用應(yīng)急任務(wù)替換掉與之沖突的計(jì)劃,反之則不予替換;如果與應(yīng)急任務(wù)產(chǎn)生沖突的計(jì)劃數(shù)量為多個(gè)時(shí),并且應(yīng)急任務(wù)的優(yōu)先級(jí)大于所有與之沖突的計(jì)劃的優(yōu)先級(jí),則用應(yīng)急任務(wù)替換掉與之沖突的所有計(jì)劃,反之則不予替換。這種替換雖然導(dǎo)致某些已經(jīng)被調(diào)度的任務(wù)無法執(zhí)行,但是從實(shí)際情況分析,緊急、重要的任務(wù)被優(yōu)先執(zhí)行是合理的。
規(guī)則引擎的定義請(qǐng)參見文獻(xiàn)[6]。
Drools是用Java語言開發(fā)的規(guī)則引擎,其內(nèi)部使用的模式匹配算法是Rete,速度快、效率高。它采用聲明式的程序設(shè)計(jì)方式,比其它命令式的編程語言代碼更簡(jiǎn)潔;可通過規(guī)則庫高效解決業(yè)務(wù)規(guī)則變動(dòng)問題,更靈活地適應(yīng)各種變化的業(yè)務(wù)場(chǎng)景。
Drools的組成如圖1所示。
圖1 規(guī)則引擎的組成
各部分的作用如下:
(1)工作內(nèi)存(Working Memory):存放系統(tǒng)工作時(shí)要處理的數(shù)據(jù)對(duì)象(Fact);
(2)規(guī)則庫(Rule Base):存放腳本語言編寫的業(yè)務(wù)規(guī)則;
(3)模式匹配器(Pattern Matcher):進(jìn)行數(shù)據(jù)與規(guī)則的匹配,創(chuàng)建規(guī)則的執(zhí)行實(shí)例,并將實(shí)例加入議程中;
(4)議程(Agenda):存放所有的規(guī)則執(zhí)行實(shí)例,并根據(jù)某種策略制定實(shí)例的執(zhí)行順序;
(5)執(zhí)行引擎(Execution Engine):執(zhí)行議程中所有的規(guī)則執(zhí)行實(shí)例。
Drools在工作時(shí)通過模式匹配器將工作內(nèi)存中的事實(shí)和規(guī)則庫中的規(guī)則進(jìn)行匹配,對(duì)匹配成功的規(guī)則創(chuàng)建執(zhí)行實(shí)例,并將這些實(shí)例加入議程中。議程根據(jù)某種策略制定這些實(shí)例的執(zhí)行順序,形成實(shí)例的執(zhí)行隊(duì)列。執(zhí)行引擎按照順序依次執(zhí)行。在執(zhí)行過程中事實(shí)對(duì)象的狀態(tài)會(huì)發(fā)生變化,即產(chǎn)生新的事實(shí),使得某些未執(zhí)行的實(shí)例失效而從隊(duì)列中剔除,也可能形成新的執(zhí)行實(shí)例加入隊(duì)列中,形成一種動(dòng)態(tài)的規(guī)則執(zhí)行鏈[7-9]。
結(jié)合上述研究,將規(guī)則引擎技術(shù)應(yīng)用于獨(dú)占資源通訊衛(wèi)星應(yīng)急任務(wù)調(diào)度中,實(shí)現(xiàn)調(diào)度規(guī)則與應(yīng)用程序的分離,提高系統(tǒng)的靈活性、可擴(kuò)展性及易維護(hù)性,并對(duì)Drools規(guī)則引擎進(jìn)行改進(jìn),優(yōu)化了推理網(wǎng)的構(gòu)建過程,提高了系統(tǒng)的工作效率。
獨(dú)占資源通訊衛(wèi)星應(yīng)急任務(wù)調(diào)度系統(tǒng)采用C/S架構(gòu),分為數(shù)據(jù)層、服務(wù)層、應(yīng)用層。應(yīng)用層主要為衛(wèi)星控管中心提供申請(qǐng)信息管理、計(jì)劃信息管理、調(diào)度規(guī)則管理和衛(wèi)星資源管理等;服務(wù)層實(shí)現(xiàn)了系統(tǒng)運(yùn)行中涉及的各類服務(wù),包括規(guī)則推理服務(wù)、數(shù)據(jù)管理服務(wù)、任務(wù)調(diào)度服務(wù)等;數(shù)據(jù)層使用關(guān)系數(shù)據(jù)庫為系統(tǒng)提供數(shù)據(jù)管理功能,數(shù)據(jù)庫包括用戶申請(qǐng)數(shù)據(jù)庫、衛(wèi)星工作計(jì)劃數(shù)據(jù)庫、衛(wèi)星資源數(shù)據(jù)庫、調(diào)度規(guī)則數(shù)據(jù)庫,如圖2所示。
圖2 調(diào)度系統(tǒng)的結(jié)構(gòu)
規(guī)則庫是基于規(guī)則引擎的系統(tǒng)的核心,是系統(tǒng)進(jìn)行業(yè)務(wù)判斷與決策的依據(jù),規(guī)則庫的質(zhì)量對(duì)處理結(jié)果的準(zhǔn)確性及系統(tǒng)的運(yùn)行效率有著直接影響。因此要得到良好的衛(wèi)星任務(wù)調(diào)度結(jié)果和系統(tǒng)工作效率,在建立調(diào)度規(guī)則庫時(shí),需要對(duì)應(yīng)急任務(wù)模式下的調(diào)度規(guī)則進(jìn)行精確的凝練和表達(dá),對(duì)規(guī)則庫的結(jié)構(gòu)進(jìn)行合理設(shè)計(jì)。
通過章節(jié)1中對(duì)應(yīng)急任務(wù)調(diào)度場(chǎng)景的分析與調(diào)度思路的設(shè)計(jì),結(jié)合衛(wèi)星資源使用約束,凝練出如下13條應(yīng)急任務(wù)調(diào)度規(guī)則:
規(guī)則1:如果申請(qǐng)的狀態(tài)值為“null”,則申請(qǐng)的狀態(tài)值由“null”轉(zhuǎn)為“受理”;
規(guī)則2:如果狀態(tài)值為“受理”的申請(qǐng)的用戶目標(biāo)不是當(dāng)前用戶中心的管理型號(hào),則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“不受理”;
規(guī)則3:如果狀態(tài)值為“受理”的申請(qǐng)的通信波段不在其申請(qǐng)的獨(dú)占資源通訊衛(wèi)星通信波段范圍內(nèi),則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“不受理”;
規(guī)則4:如果狀態(tài)值為“受理”的申請(qǐng)的任務(wù)持續(xù)時(shí)長(zhǎng)小于2分鐘,則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“不受理”;
規(guī)則5:如果狀態(tài)值為“受理”的申請(qǐng)的服務(wù)開始時(shí)間早于系統(tǒng)當(dāng)前時(shí)間,則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“不受理”;
規(guī)則6:如果狀態(tài)值為“受理”的申請(qǐng)的用戶目標(biāo)是地面設(shè)備,則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“可視”;
規(guī)則7:如果狀態(tài)值為“受理”的申請(qǐng)的衛(wèi)星資源使用時(shí)段在獨(dú)占資源通訊衛(wèi)星與用戶目標(biāo)可視窗口內(nèi),則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“可視”;
規(guī)則8:如果狀態(tài)值為“受理”的申請(qǐng)的衛(wèi)星資源使用時(shí)段不在獨(dú)占資源通訊衛(wèi)星與用戶目標(biāo)可視窗口內(nèi),則申請(qǐng)的狀態(tài)值由“受理”轉(zhuǎn)為“不可視”;
規(guī)則9:如果狀態(tài)值為“可視”的申請(qǐng)的衛(wèi)星資源處于空閑狀態(tài),則申請(qǐng)的狀態(tài)值由“可視”轉(zhuǎn)為“納入計(jì)劃”;
規(guī)則10:如果狀態(tài)值為“可視”的申請(qǐng)的衛(wèi)星資源處于占用狀態(tài),則申請(qǐng)的狀態(tài)值由“可視”轉(zhuǎn)為 “沖突”;
規(guī)則11:如果狀態(tài)值為“沖突”的申請(qǐng)的沖突對(duì)象是調(diào)度方案中衛(wèi)星工作計(jì)劃,且申請(qǐng)的優(yōu)先級(jí)大于與其沖突的計(jì)劃的優(yōu)先級(jí)。則申請(qǐng)的狀態(tài)值由“沖突”轉(zhuǎn)為“納入計(jì)劃”,與其沖突的計(jì)劃狀態(tài)值由“計(jì)劃”轉(zhuǎn)為“被替代”;
規(guī)則12:如果狀態(tài)值為“沖突”的申請(qǐng)的沖突對(duì)象是調(diào)度方案中衛(wèi)星工作計(jì)劃,且申請(qǐng)的優(yōu)先級(jí)小于與其沖突的計(jì)劃的優(yōu)先級(jí)。則申請(qǐng)的狀態(tài)值由“沖突”轉(zhuǎn)為“拒絕納入計(jì)劃”;
規(guī)則13:如果申請(qǐng)的狀態(tài)值為“納入計(jì)劃”,則調(diào)用衛(wèi)星資源分配函數(shù)將申請(qǐng)寫入計(jì)劃表。
為了清楚表達(dá)上述規(guī)則間的聯(lián)系及申請(qǐng)?jiān)谝?guī)則推理過程中的狀態(tài)變化情況,采用狀態(tài)機(jī)圖進(jìn)行的表達(dá)如圖3所示。
圖3 申請(qǐng)的狀態(tài)機(jī)
Drools采用原生的規(guī)則語言,規(guī)則結(jié)構(gòu)簡(jiǎn)潔、可讀性強(qiáng)[10]。規(guī)則的結(jié)構(gòu)組成如圖4所示。
圖4 Drools規(guī)則結(jié)構(gòu)
關(guān)鍵詞rule標(biāo)識(shí)一條規(guī)則的開始,其后是該規(guī)則名稱,是規(guī)則在規(guī)則庫中的唯一標(biāo)識(shí),具有唯一性;關(guān)鍵字attributes是規(guī)則屬性,是可選項(xiàng),用于對(duì)規(guī)則的行為進(jìn)行限定;關(guān)鍵字when是規(guī)則條件(left side hand,LHS)部分開始的標(biāo)識(shí),LHS是一些邏輯表達(dá)式,用于判斷;關(guān)鍵字then是規(guī)則結(jié)論部分(right side sand,RHS)開始的標(biāo)識(shí),RHS是一個(gè)Java語言代碼塊,是要執(zhí)行的操作;關(guān)鍵字end表示規(guī)則的結(jié)束。
以3.2中的rule7為例,其對(duì)應(yīng)“Drools”規(guī)則引擎的代碼如下:
rule “IsvisiableRule” //規(guī)則名稱
salience 10 //規(guī)則優(yōu)先級(jí)
no-loop true //不能被同一事實(shí)再次激活
when
$app: Application(station==accepted); //申請(qǐng)狀態(tài)
$vw: VisiableWindow($app.satelliteID== satelliteID,$app.usertargetcode==user,$app.starttime>= starttime, $app.endtime<=endtime); //受理的申請(qǐng)是否在可視窗口內(nèi)
Then
$app.setStation (“visible”); //狀態(tài)修改為可視
update($app); //更新申請(qǐng)狀態(tài)
end
其中規(guī)則屬性使用的是salience(優(yōu)先級(jí)策略,salience值越大表示規(guī)則的優(yōu)先等級(jí)越高)、no-loop(值為true時(shí),該規(guī)則不會(huì)被同一事實(shí)再次激活),分別用于解決規(guī)則沖突和規(guī)則庫死循環(huán)問題。
Drools中使用的是目前效率最高的Forward-Chaining推理算法Rete。Rete算法將規(guī)則庫構(gòu)建成推理網(wǎng)的形式,以達(dá)到顯著降低計(jì)算量的效果,并且Rete算法利用推理引擎的時(shí)間冗余性和產(chǎn)生式規(guī)則結(jié)構(gòu)相似性的特點(diǎn),在推理網(wǎng)的構(gòu)建中實(shí)現(xiàn)狀態(tài)保存機(jī)制和節(jié)點(diǎn)共享機(jī)制,極大提高了Drools的工作效率[11,12]。
在實(shí)驗(yàn)的過程中發(fā)現(xiàn),Drools中的節(jié)點(diǎn)共享機(jī)制并非廣泛意義上的共享,其對(duì)規(guī)則結(jié)構(gòu)有著較嚴(yán)格的要求。下面給出3個(gè)規(guī)則組,每個(gè)規(guī)則組中都有兩條規(guī)則,并且規(guī)則中的匹配條件相同,不同在于規(guī)則中的匹配條件排列順序不同。
規(guī)則組一:
rule “rule_1”
when
$app: Application (UserID==“GD”, satelliteID==“A”);
Then
{Code}
End
rule “rule_2”
when
$app:Application(satelliteID==“B”,UserID==“GD”);
Then
{Code}
End
規(guī)則組二:
rule “rule_1”
when
$app: Application(satelliteID==“A”,UserID==“GD”);
Then
{Code}
End
rule “rule_2”
when
$app:Application(satelliteID==“B”,UserID==“GD”);
Then
{Code}
End
規(guī)則組三:
rule “rule_1”
when
$app:Application(UserID==“GD”, satelliteID==“A”);
Then
{Code}
End
rule “rule_2”
when
$app:Application(UserID==“GD”, satelliteID==“B”);
Then
{Code}
End
3個(gè)規(guī)則組對(duì)應(yīng)的推理網(wǎng)如圖5所示。
圖5 推理網(wǎng)
Root Node是所有對(duì)象進(jìn)入推理網(wǎng)的入口;Type Node進(jìn)行對(duì)象類型的判斷,只有類型匹配成功的對(duì)象才能進(jìn)入下一個(gè)節(jié)點(diǎn)。Alpha Node又稱單輸入節(jié)點(diǎn),用來對(duì)單一的對(duì)象進(jìn)行條件判斷,對(duì)應(yīng)著規(guī)則中的邏輯判斷。當(dāng)規(guī)則有多個(gè)邏輯判斷,對(duì)應(yīng)的Alpha Node會(huì)串聯(lián)在一起。對(duì)象在滿足當(dāng)前Alpha Node對(duì)應(yīng)的邏輯判斷后才能進(jìn)入下一個(gè)Alpha Node;Adapter Node將單個(gè)對(duì)象轉(zhuǎn)為單對(duì)象數(shù)組。Terminal Node表示對(duì)象與規(guī)則完全匹配。
從圖5看出UserID==“GD”節(jié)點(diǎn)在規(guī)則組三的推理網(wǎng)中實(shí)現(xiàn)了規(guī)則間的共享,但在規(guī)則組一、二中沒能實(shí)現(xiàn)共享,使得規(guī)則組三的推理網(wǎng)較其它兩組節(jié)點(diǎn)更少,系統(tǒng)存儲(chǔ)開銷更小,工作效率更高。3個(gè)規(guī)則組的實(shí)現(xiàn)的功能相同,但形成的推理網(wǎng)結(jié)構(gòu)不同,說明規(guī)則中邏輯判斷的排列順序不會(huì)影響規(guī)則的功能,但會(huì)影響推理網(wǎng)的結(jié)構(gòu),進(jìn)而影響系統(tǒng)性能。
產(chǎn)生這種現(xiàn)象的原因是Drools在構(gòu)建推理網(wǎng)時(shí),如果一條規(guī)則中有多個(gè)邏輯判斷,那么它們對(duì)應(yīng)的Alpha Node在推理網(wǎng)中的連接順序與其在規(guī)則中的排列順序是一致的,在這里稱為基于順序的連接方式。規(guī)則組一的推理網(wǎng)中,兩個(gè)UserID==“GD”節(jié)點(diǎn)的內(nèi)存中存儲(chǔ)的數(shù)據(jù)對(duì)象并不相同(rule_1的UserID==“GD”節(jié)點(diǎn)中存儲(chǔ)的是滿足自身邏輯判斷的數(shù)據(jù)對(duì)象,rule_2的UserID==“GD”節(jié)點(diǎn)中存儲(chǔ)的是滿足satelliteID==“B”節(jié)點(diǎn)和自身邏輯判斷的數(shù)據(jù)對(duì)象),此時(shí)二者是兩個(gè)同名不同質(zhì)的Alpha Node,不能合并為一個(gè)共享節(jié)點(diǎn),規(guī)則組二同理。所以規(guī)則組一、組二中雖然有相同的邏輯判斷,但由于規(guī)則原生結(jié)構(gòu)的限制,使推理網(wǎng)中的同名節(jié)點(diǎn)不能共享。
綜上所述,Drools中這種基于順序的連接方式,使推理網(wǎng)的結(jié)構(gòu)與規(guī)則的結(jié)構(gòu)形成強(qiáng)關(guān)聯(lián)性,不具備節(jié)點(diǎn)連接時(shí)的動(dòng)態(tài)調(diào)整能力,導(dǎo)致某些相同的Alpha Node沒能實(shí)現(xiàn)共享。針對(duì)這一問題本文提出基于權(quán)重的連接方式:在構(gòu)建推理網(wǎng)時(shí),如果一條規(guī)則中有多個(gè)邏輯判斷,權(quán)重大的邏輯判斷對(duì)應(yīng)的Alpha Node會(huì)獲得優(yōu)先連接權(quán)。具體改進(jìn)方法為:首先統(tǒng)計(jì)規(guī)則庫中所有的邏輯判斷總數(shù),然后將相同的邏輯判斷歸為一類并統(tǒng)計(jì)其數(shù)量,最后計(jì)算各類邏輯判斷的權(quán)重。計(jì)算方法為λi=(ni/N),其中λi表示邏輯判斷i的權(quán)重值,ni表示規(guī)則庫中邏輯判斷i的個(gè)數(shù),N表示規(guī)則庫中邏輯判斷總數(shù)。這樣各類邏輯判斷都擁有自己的權(quán)重值。在構(gòu)建推理網(wǎng)時(shí),對(duì)于一條規(guī)則中的多個(gè)邏輯判斷,Rete算法根據(jù)其權(quán)重值從大到小的順序依次獲取并構(gòu)建對(duì)應(yīng)的Alpha Node。這種基于權(quán)重的連接方式,使推理網(wǎng)的結(jié)構(gòu)擺脫了規(guī)則原生結(jié)構(gòu)的限制,充分利用規(guī)則庫中相同邏輯判斷在數(shù)量上的特征,并將這種特征用于推理網(wǎng)的構(gòu)建過程中,使相同的邏輯判斷可以實(shí)現(xiàn)共享,降低推理網(wǎng)結(jié)構(gòu)的冗余性,提高推理效率。
系統(tǒng)進(jìn)行調(diào)度工作使用的數(shù)據(jù)包括:衛(wèi)星可視窗口(用戶目標(biāo)與獨(dú)占資源通訊衛(wèi)星之間的可視時(shí)段)、衛(wèi)星工作計(jì)劃、用戶任務(wù)申請(qǐng),其中前二者稱為衛(wèi)星系統(tǒng)資源狀態(tài)事實(shí),第三個(gè)稱為待調(diào)度事實(shí)。為實(shí)現(xiàn)調(diào)度系統(tǒng)對(duì)數(shù)據(jù)的處理及數(shù)據(jù)在數(shù)據(jù)庫中的有效存儲(chǔ)與管理,需要對(duì)用戶申請(qǐng)、可視窗口、衛(wèi)星工作計(jì)劃3類數(shù)據(jù)進(jìn)行規(guī)范化表示。根據(jù)Java面向?qū)ο蟮木幊烫攸c(diǎn),分別建立用戶申請(qǐng)類、可視窗口類、衛(wèi)星工作計(jì)劃類,每個(gè)類具有各自的屬性及其對(duì)應(yīng)的getter和setter方法。例如用戶申請(qǐng)表示形式見表1。
表1 用戶申請(qǐng)
由于應(yīng)急任務(wù)的特殊性,所以應(yīng)急任務(wù)調(diào)度模式是一種實(shí)時(shí)調(diào)度,采用的是“申請(qǐng)-響應(yīng)”的調(diào)度方式。下面兩組實(shí)驗(yàn),分別使用基于Drools改進(jìn)前、后的任務(wù)調(diào)度系統(tǒng)對(duì)一天內(nèi)(24 h)接收的50條應(yīng)急申請(qǐng)進(jìn)行調(diào)度,驗(yàn)證調(diào)度系統(tǒng)的性能,并對(duì)Drools規(guī)則引擎改進(jìn)前后的性能進(jìn)行對(duì)比。其中實(shí)驗(yàn)組1中的50條應(yīng)急申請(qǐng)滿足衛(wèi)星資源使用各種約束且與衛(wèi)星工作計(jì)劃無沖突;實(shí)驗(yàn)組2中的50條應(yīng)急申請(qǐng)滿足衛(wèi)星資源使用各種約束但與衛(wèi)星工作計(jì)劃有沖突,其中,25條申請(qǐng)優(yōu)先級(jí)大于計(jì)劃,25條申請(qǐng)優(yōu)先級(jí)小于計(jì)劃。
本文實(shí)驗(yàn)的原型系統(tǒng)在eclipse中開發(fā),規(guī)則引擎為Drools6.5,數(shù)據(jù)庫為MySQL8.0,服務(wù)器為TomCat7.0,運(yùn)行平臺(tái)為windows10,CPU:Intel i3-3110M 2.4GHz。
實(shí)驗(yàn)中包括4顆通訊衛(wèi)星,10顆用戶衛(wèi)星,使用的數(shù)據(jù)有衛(wèi)星間可視窗口、用戶申請(qǐng)、衛(wèi)星工作計(jì)劃,其中衛(wèi)星間的可視窗口數(shù)據(jù)通過衛(wèi)星星歷計(jì)算得出,用戶申請(qǐng)由模擬實(shí)際用戶申請(qǐng)程序生成,衛(wèi)星工作計(jì)劃由集中任務(wù)調(diào)度程序生成。
系統(tǒng)運(yùn)行時(shí)間的統(tǒng)計(jì)結(jié)果和申請(qǐng)?zhí)幚斫Y(jié)果如圖6和表2所示。
圖6是兩組實(shí)驗(yàn)中50條應(yīng)急申請(qǐng)的處理時(shí)間的折線圖,表2是處理時(shí)間統(tǒng)計(jì)出的均值和方差及申請(qǐng)調(diào)度的結(jié)果。對(duì)實(shí)驗(yàn)結(jié)果從以下4個(gè)方面進(jìn)行分析:①?gòu)腄rools改進(jìn)前后系統(tǒng)的運(yùn)行時(shí)間進(jìn)行對(duì)比分析,可以看出改進(jìn)后的系統(tǒng)運(yùn)行時(shí)間效率相比改進(jìn)前提高了5%左右,說明文中提出的改進(jìn)方法提高系統(tǒng)性能,規(guī)則數(shù)量越多,相同的邏輯判斷越多,效率的提升越明顯;②從兩組實(shí)驗(yàn)對(duì)照角度分析,可以看出系統(tǒng)在處理有沖突的申請(qǐng)用時(shí)比無沖突的多,但是差距在20 ms內(nèi),說明系統(tǒng)在處理資源使用沖突時(shí),
圖6 系統(tǒng)運(yùn)行時(shí)間折線
表2 系統(tǒng)運(yùn)行時(shí)間特征及申請(qǐng)調(diào)度結(jié)果統(tǒng)計(jì)
具有良好的優(yōu)化調(diào)度效率;③從系統(tǒng)處理50條申請(qǐng)的時(shí)間方差角度分析,方差在5 ms2上下,說明系統(tǒng)運(yùn)行的穩(wěn)定性較好;④從申請(qǐng)調(diào)度后納入計(jì)劃的結(jié)果分析,實(shí)驗(yàn)組1中50條無沖突的申請(qǐng)全部納入計(jì)劃,實(shí)驗(yàn)組2中50條有沖突的申請(qǐng),其中優(yōu)先級(jí)大于計(jì)劃的25條納入了計(jì)劃,優(yōu)先級(jí)小于計(jì)劃的25條沒有納入計(jì)劃,調(diào)度結(jié)果跟預(yù)期設(shè)想的結(jié)果一致,說明系統(tǒng)調(diào)度結(jié)果可靠。
本文將規(guī)則引擎技術(shù)應(yīng)用于獨(dú)占資源通訊衛(wèi)星應(yīng)急任務(wù)調(diào)度中,實(shí)現(xiàn)了調(diào)度規(guī)則與業(yè)務(wù)邏輯代碼的分離,便捷了調(diào)度規(guī)則的集中管理與修改,降低了調(diào)度規(guī)則變動(dòng)對(duì)系統(tǒng)造成的影響,提高了系統(tǒng)的靈活性和適用性。同時(shí)設(shè)計(jì)基于權(quán)重的連接方法對(duì)Drools規(guī)則引擎進(jìn)行改進(jìn),優(yōu)化了推理網(wǎng)的構(gòu)建過程,降低了推理網(wǎng)中節(jié)點(diǎn)冗余問題,提高了系統(tǒng)的運(yùn)行效率。實(shí)驗(yàn)結(jié)果表明,基于改進(jìn)的Drools規(guī)則引擎的獨(dú)占資源通訊衛(wèi)星應(yīng)急任務(wù)調(diào)度方法切實(shí)可行。在處理衛(wèi)星資源使用沖突時(shí)如何通過規(guī)則引擎實(shí)現(xiàn)用戶申請(qǐng)窗口的滑動(dòng),進(jìn)一步提高申請(qǐng)調(diào)度成功率,將是我們下一步的工作。