(國防科學(xué)技術(shù)大學(xué) 信息系統(tǒng)與管理學(xué)院, 長沙 410073)
摘 要:近年來模型組合技術(shù)的研究與應(yīng)用越來越廣泛,但針對各種文件格式的模型資源進(jìn)行統(tǒng)一管理、組合與服務(wù)調(diào)度的模型庫系統(tǒng)尚未發(fā)現(xiàn)。根據(jù)多種文件格式的模型資源的特點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)通用模型組合工具,利用XML語言描述組合模型的控制流程和參數(shù)傳遞流程,實(shí)現(xiàn)了對多種文件格式的模型資源的可視化組合和服務(wù)調(diào)度。
關(guān)鍵詞:模型輔助決策;模型庫;通用模型;模型組合
中圖分類號:TP311文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2009)04-1419-03
Research and implementation of model composition
DAI Chao-fan,CHEN Jun
(College of Information System Management, National University of Defense Technology, Changsha 410073, China)
Abstract:Model composition technology has been studied and applied widely nowadays, but there is not a system which provides general model management,composition and service aimed at models developed by different languages and compiled into different format. As to the characters of generic models,designed and implemented a general model composition tool, which described the control flow and parameter transferring chain of the composite model based on XML, provided a visual environment, and controled the composite model according to the script of model.
Key words:model-aided decision-making; model base; general model; model composition
隨著信息化建設(shè)進(jìn)程的不斷推進(jìn),模型輔助決策技術(shù)得到了越來越廣泛的重視和發(fā)展,積累了一大批基礎(chǔ)模型和專用模型資源,為模型輔助決策奠定了基礎(chǔ),同時(shí)也為模型管理與服務(wù)帶來了前所未有的挑戰(zhàn):各模型研制單位采用不同的技術(shù)體制研制、改造模型,導(dǎo)致模型資源在物理上是分布的,在技術(shù)上是異構(gòu)的,而目前缺少為網(wǎng)絡(luò)環(huán)境下各種文件格式的模型實(shí)施統(tǒng)一管理和一體化服務(wù)的有效手段;大多數(shù)模型系統(tǒng)是針對具體的應(yīng)用背景而研制的,模型是執(zhí)行流程控制中的一個(gè)固定環(huán)節(jié)或過程,按固定的方式使用,并且模型之間、模型與數(shù)據(jù)之間的聯(lián)系比較固定,導(dǎo)致模型的可重用性差,難以對外提供模型服務(wù)。因此提高模型資源的共享性與重用性是模型管理與服務(wù)的重要需求。目前對模型組合、操縱方面取得了一定成果[1~5]:文獻(xiàn)[1]基于客戶/服務(wù)器結(jié)構(gòu)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)決策支持系統(tǒng)快速開發(fā)平臺,提供可視化系統(tǒng)生成工具和框架流程細(xì)化功能,最終得到基于模型的輔助決策方案;文獻(xiàn)[2]基于COM組件技術(shù)開發(fā)了一個(gè)可視化模型組合環(huán)境(VIME),提供了組合模型的定義、生成與控制等功能;文獻(xiàn)[3]結(jié)合Web services技術(shù)分析了基于Web services的模型服務(wù)生成、模型服務(wù)表示、模型服務(wù)集成,結(jié)合實(shí)例給出了基于Web services模型服務(wù)開發(fā)和集成應(yīng)用過程;文獻(xiàn)[4]分析了模型組合中要解決的問題,如模型表示時(shí)模型應(yīng)抽象的層次等,并提出了模型復(fù)合的兩種形式,即串聯(lián)和并聯(lián);文獻(xiàn)[5]利用逆向推理技術(shù)實(shí)現(xiàn)了模型agent的動(dòng)態(tài)自動(dòng)組合,給出了利用多個(gè)模型agent組合求解復(fù)雜問題的過程。以上成果都只支持單一技術(shù)條件下的模型組合或復(fù)合,難以對網(wǎng)絡(luò)環(huán)境下多種文件格式的模型資源進(jìn)行統(tǒng)一管理、組合和服務(wù)。
本文研究網(wǎng)絡(luò)環(huán)境下多種文件格式的模型組合問題,結(jié)合模型現(xiàn)有的管理與運(yùn)行機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)環(huán)境下的通用模型組合工具,支持標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫、COM組件、應(yīng)用程序、Web service等文件格式的模型的可視化組合與服務(wù)控制,為基于多模型求解復(fù)雜決策問題提供了手段。
1 模型組合技術(shù)
1.1 模型組合基本方法
G. Jacopini和C. Bohm在1966年就已經(jīng)從理論上證明:任何程序都可以用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)表示。按照上述結(jié)構(gòu)化的程序結(jié)構(gòu)形式和思想,在模型組合的過程中,可以將模型組合中子模型之間的控制流程簡化為只包括順序、循環(huán)、選擇三種基本的結(jié)構(gòu)(圖1)。其中:(a)順序結(jié)構(gòu),或稱為串行結(jié)構(gòu),即子模型間按前后順序依次執(zhí)行。無條件約束的并行可以轉(zhuǎn)換為順序結(jié)構(gòu)。(b)循環(huán)結(jié)構(gòu),即一個(gè)或多個(gè)子模型在滿足一定條件下的多次反復(fù)執(zhí)行。根據(jù)編程語言表示形式,循環(huán)結(jié)構(gòu)又可細(xì)分為先判斷后執(zhí)行、先執(zhí)行后判斷兩類邏輯,以及for和while兩類循環(huán)模式。(c)選擇結(jié)構(gòu),根據(jù)條件決定選擇執(zhí)行某個(gè)分支下的處理。根據(jù)編程語言表示形式,選擇結(jié)構(gòu)可以細(xì)分為條件結(jié)構(gòu)和分支結(jié)構(gòu)。其中條件結(jié)構(gòu)與if…then…else語句對應(yīng);分支結(jié)構(gòu)與switch…case…else語句對應(yīng)。圖1中P為判別條件,滿足條件時(shí)走一分支;否則走其他分支。
把模型的三種組合關(guān)系用程序的三種結(jié)構(gòu)形式來組織,利用程序的三種結(jié)構(gòu)形式嵌套組合就形成了模型的復(fù)雜組合關(guān)系,可以生成復(fù)雜的決策問題方案的程序形式。在理論上,三種組合關(guān)系可以任意組合和嵌套,但在實(shí)際應(yīng)用中,組合關(guān)系應(yīng)盡量清晰,嵌套層次應(yīng)盡量精簡。
1.2 組合模型邏輯表示
組合模型在計(jì)算機(jī)中的表示方法和存儲形式稱為組合模型表示,它是實(shí)現(xiàn)模型組合的前提。本文中組合模型的邏輯表示結(jié)合了結(jié)構(gòu)化和面向?qū)ο蟮乃枷?。采用EBNF編碼的語法表示如下:
CompisitionModel::=ModelInfo S ControlSequence
ModelHead::=ModelName [S InputParaList] [S OutputParaList] [S VariableList]
InputParaList::=(InputParaType S ParaName)*
OutputParaList::=(OutputParaType S ParaName)*
VariableList::=(VariableType S VariableName)*
ControlSequence::=(SetVarValue | SequenceControl | ConditionControl | SwitchControl | LoopControl | ForControl | SubModelControl)*
ConditionControl::=IfSequence S ControlSequence S [(ElseSequence S ControlSequence)*]
SwitchControl::=SwitchSequence S (CaseSequence S ControlSequence)* [S ElseSequence S ControlSequence]
LoopControl::=(LoopJudgeFirst S ControlSequence) | (ControlSequence S LoopJudgeAfter)
ForControl::=(ForJudgeFirst S ControlSequence) | (ControlSequence S ForJudgeAfter)
SubModelControl::=( SubModelInfo S MethodName (S InputParaInfo)* S (OutPutParaInfo)*) | ( S CommandLineInfo)
SubModelInfo::= ModelID S ModelType S IP S Port S ModelFilePath S ModelClassName
InputParaInfo::=InputParaName S InputType S PipeLineInfo
InputType::=keyBoardInput | AsInputPara | LoopVariable | Constant | OutputOfOneModel | DataFileName | DataSourceName | CompVariable
OutputParaInfo::OutputParaName S OutputType S PipeLineInfo
OutputType::=Printf | AsOutputPara | CompVariable | InputOfOneModel | DataFileName | DataSourceName
PipeLineInfo::=NameOfModelLevel S NameOfMethedLevel S NameOfParaLevel
CommandLineInfo::=AppName S AppFilePath S IP S Port [(([S KeyWord] [S Para]) | ([S Para] [S KeyWord]))*]
其中:SubModelControl為子模型執(zhí)行語句,包含調(diào)度各種文件格式的原子模型及組合模型所需的信息;子模型的文件格式為COM組件、標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫、Web服務(wù)或組合模型時(shí),SubModelInfo包含模型類型信息、輸入/輸出接口信息等;子模型的文件格式為標(biāo)準(zhǔn)應(yīng)用程序時(shí),CommandLineInfo包含所需的命令行參數(shù)和關(guān)鍵字信息。
按照上述表示方法描述的組合模型,其模型首部ModelHead包含接口信息以及模型描述信息,模型控制語句序列ControlSequence由各種控制結(jié)構(gòu)、變量賦值及模型方法執(zhí)行語句構(gòu)成。這種邏輯表示既便于決策人員理解,又便于計(jì)算機(jī)解釋執(zhí)行。
2 實(shí)現(xiàn)方案
模型組合工具以功能聚合為導(dǎo)向,支持以搭積木的方式自底向上組合多種文件格式的模型資源,并按照定義的模型組合關(guān)系解析組合模型腳本、調(diào)度多種文件格式的模型有序運(yùn)行。其主要功能模塊包括可視化編輯、腳本生成、腳本解析與服務(wù)調(diào)度等,如圖2所示。
2.1 組合模型可視化編輯
支持用戶通過操作并設(shè)置圖元及有向線的方式實(shí)現(xiàn)子模型之間控制流和信息流邏輯關(guān)系的定義和描述,主要由子模型選擇、添加組合模型成員變量、控制流編輯和信息流編輯等功能組成。
信息流編輯部分負(fù)責(zé)定義模型方法參數(shù)間的傳遞關(guān)系;控制流編輯部分負(fù)責(zé)定義子模型方法之間的運(yùn)行結(jié)構(gòu)。在組合模型可視化編輯界面中,設(shè)計(jì)了以下圖元節(jié)點(diǎn)類型:開始、結(jié)束、模型方法、變量賦值、有向線、條件開始、條件結(jié)束、分支開始、分支結(jié)束、循環(huán)開始、循環(huán)結(jié)束等。各圖元節(jié)點(diǎn)類的父類均為圖元基類BaseStatu。BaseStatu封裝了圖元對象的基本屬性,如類型、相連的有向線等;由圖元基類繼承的具體類型圖標(biāo)定義了具體圖標(biāo)的關(guān)聯(lián)信息,如模型方法圖元關(guān)聯(lián)的模型方法名稱、參數(shù)傳遞情況等;有向線類封裝了圖元節(jié)點(diǎn)間的順序關(guān)系和控制條件信息等。
圖元基類BaseStatu定義如下:
class BaseStatu
{
public int StatuID;//圖標(biāo)號
public int StatuType;/*圖標(biāo)類型,包括開始圖標(biāo)、結(jié)束圖標(biāo)、模型圖標(biāo)、變量賦值圖標(biāo)、循環(huán)圖標(biāo)、分支選擇圖標(biāo)、結(jié)束循環(huán)圖標(biāo)、結(jié)束分支選擇圖標(biāo)等*/
public List〈int〉 IDArrowOut;//由該圖標(biāo)出發(fā)的有向線標(biāo)志
public bool Delete//該圖標(biāo)是否被刪除
}
有向線類定義如下:
class Arrow
{
public ArrowID;//有向線標(biāo)志
public BaseStatu FromStatu,ToStatu;//有向線相連的圖元
public int ToIconType;//有向線發(fā)出圖元的圖元標(biāo)志
public bool Delete;//有向線是否被刪除
public string ConditionString;//條件表達(dá)式
public int ArrowType;//有向線類型,包括順序線、分支線等
}
在模型方法圖元節(jié)點(diǎn)上可設(shè)置模型方法、參數(shù)傳遞信息、查看參數(shù)數(shù)據(jù);在循環(huán)圖元節(jié)點(diǎn)上可設(shè)置循環(huán)類型、循環(huán)條件;在條件/分支有向線上可設(shè)置分支/條件表達(dá)式。為了保證操作時(shí)設(shè)置的信息符合腳本語法,為各類操作需定義嚴(yán)格的約束檢查措施。
在實(shí)際應(yīng)用中,傳遞的輸入/輸出參數(shù)在類型、長度和精度上往往存在差異性,為此,在定義參數(shù)傳遞過程中一般需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換和清洗等預(yù)處理操作。在實(shí)現(xiàn)中,將數(shù)據(jù)預(yù)處理功能模型化,既減輕了可視化編輯功能的負(fù)擔(dān),同時(shí)使組合模型的結(jié)構(gòu)更清晰和直觀。
2.2 組合模型腳本生成
遵循2.1節(jié)中組合模型邏輯表示方法,利用XML良好的自描述性和可擴(kuò)充性的特點(diǎn)[6],生成XML格式的組合模型腳本,用一組XML Schema描述組合模型控制流和參數(shù)傳遞流。
以下為根據(jù)可視化編輯模塊定義的控制流和參數(shù)傳遞流生成組合模型腳本的算法思想描述。
1)生成輸入?yún)?shù)節(jié)。檢查模型方法圖元列表中各個(gè)子模型方法的所有輸入?yún)?shù),若傳遞類型為“作為組合模型的輸入變量”,則轉(zhuǎn)換為組合模型的輸入?yún)?shù)。
2)生成輸出參數(shù)節(jié)。
3)生成成員變量節(jié)。
4)生成語句序列節(jié)。
a)取開始圖元,生成〈ControlSequence〉,取發(fā)出的有向線標(biāo)志NextArrowID=開始圖元發(fā)出的有向線標(biāo)志IDArrowOut[0]。
b)找到標(biāo)志為NextArrowID有向線圖元,取與其相連的下一個(gè)圖元標(biāo)志ToIconID和類型ToIconType。若ToIconType為結(jié)束節(jié)點(diǎn),腳本生成成功,算法結(jié)束。
c)根據(jù)ToIconType,進(jìn)行相應(yīng)轉(zhuǎn)換。
(a)若圖元類型是模型圖標(biāo),生成〈SubModelControl〉及其關(guān)聯(lián)的擴(kuò)展屬性,如模型文件、模型類型、提供模型的主機(jī)IP等,生成該模型的輸入/輸出參數(shù)節(jié)或命令行參數(shù)節(jié)。取NextArrowID=模型圖標(biāo)的IDArrowOut[0],轉(zhuǎn)b)。
(b)若圖元類型是變量賦值圖標(biāo),生成〈SetValue〉元素及其擴(kuò)展屬性,如變量名和變量值等。取NextArrowID=該圖標(biāo)的IDArrowOut[0],轉(zhuǎn)b)。
(c)若圖元類型是循環(huán)圖標(biāo),根據(jù)循環(huán)的類型分別生成〈for〉元素或〈while〉元素及其關(guān)聯(lián)的擴(kuò)展屬性。取NextArrowID=該圖標(biāo)的IDArrowOut[0],轉(zhuǎn)b)。
(d)若圖元類型是循環(huán)結(jié)束圖標(biāo),生成〈/for〉或〈/while〉元素及其擴(kuò)展屬性。取NextArrowID =該圖標(biāo)的IDArrowOut[0],轉(zhuǎn)b)。
(e)若圖元類型是條件選擇圖標(biāo),生成〈ConditionControl〉元素和擴(kuò)展屬性。將“-1”壓棧,作為條件選擇開始標(biāo)志。將條件類型圖標(biāo)的所有發(fā)出有向線標(biāo)志IDArrowOut[]壓棧。彈出棧頂元素,NextArrowID=棧頂元素,生成該條件選擇的第一個(gè)分支元素〈IfSequence〉及其擴(kuò)展屬性,轉(zhuǎn)b)。
(f)若圖元類型是條件選擇結(jié)束圖標(biāo),彈出棧頂元素,生成〈/IfSequence〉或〈/ElseSequence〉。若棧頂元素不等于-1,NextArrowID=棧頂元素,生成〈ElseSequence〉分支元素,轉(zhuǎn)b);否則,說明與結(jié)束圖元相配套的條件選擇圖標(biāo)轉(zhuǎn)換完畢,生成〈/ConditionControl〉,NextArrowID=條件選擇結(jié)束圖標(biāo)的發(fā)出有向線IDArrowOut[0],轉(zhuǎn)b)。
(g)若圖元類型是分支選擇圖標(biāo),生成〈SwitchControl〉元素和擴(kuò)展屬性。類似于條件選擇結(jié)構(gòu)的生成,將“-1”壓棧,作為分支選擇開始標(biāo)志。將分支選擇圖標(biāo)的所有發(fā)出有向線標(biāo)志IDArrowOut[]壓棧。彈出棧頂元素,NextArrowID=棧頂元素,生成該條件選擇的第一個(gè)〈CaseSequence〉分支元素及其擴(kuò)展屬性,轉(zhuǎn)b)。
(h)若圖元類型是分支選擇結(jié)束圖標(biāo),彈出棧頂元素,生成〈/CaseSequence〉。若棧頂元素不等于-1 ,NextArrowID=棧頂元素,生成下一個(gè)〈CaseSequence〉分支元素,轉(zhuǎn)b);否則,說明與結(jié)束圖元相配套的條件選擇圖標(biāo)轉(zhuǎn)換完畢,生成〈/SwitchControl〉,NextArrowID=條件選擇結(jié)束圖標(biāo)的發(fā)出有向線IDArrowOut[0],轉(zhuǎn)b)。
2.3 腳本解析與服務(wù)控制
調(diào)度引擎根據(jù)組合模型描述腳本創(chuàng)建組合模型實(shí)例對象、輸入/輸出參數(shù)列表,按照控制流和參數(shù)傳遞流描述信息調(diào)度各子模型有序運(yùn)行。腳本解釋的基本過程如下:
a)解析組合模型腳本描述文件的輸入/輸出成員變量列表節(jié)點(diǎn),初始化該模型運(yùn)行時(shí)所需的資源:組合模型輸入/輸出參數(shù)列表、組合模型局部變量列表、子模型參數(shù)哈希表、包含的復(fù)合模型列表等。
b)解釋執(zhí)行組合模型過程定義腳本的運(yùn)行控制根節(jié)點(diǎn)。執(zhí)行根節(jié)點(diǎn)下的子節(jié)點(diǎn)列表,包括模型執(zhí)行節(jié)點(diǎn)、變量賦值節(jié)點(diǎn)、各種控制結(jié)構(gòu)節(jié)點(diǎn)。
1)解釋執(zhí)行控制結(jié)構(gòu)節(jié)點(diǎn)過程
(1)分支結(jié)構(gòu)。對于條件分支結(jié)構(gòu),取得條件分支〈ConditionControl〉的子節(jié)點(diǎn)列表,判斷每個(gè)〈IfSequence〉或〈ElseSequence〉分支的條件屬性下的條件表達(dá)式,若為真值,解釋執(zhí)行該節(jié)點(diǎn)下的子節(jié)點(diǎn)列表,與解釋執(zhí)行選擇分支結(jié)構(gòu)的過程類似。
(2)循環(huán)結(jié)構(gòu)。對于for類循環(huán)模式,根據(jù)擴(kuò)展屬性初始化循環(huán)變量,并在滿足循環(huán)條件下反復(fù)解析執(zhí)行該〈for〉節(jié)點(diǎn)下節(jié)點(diǎn)子列表。對于while類循環(huán)模式,根據(jù)擴(kuò)展屬性判斷條件表達(dá)式的值,若為真值,執(zhí)行該〈while〉節(jié)點(diǎn)下節(jié)點(diǎn)子列表;否則跳出循環(huán)。
2)解釋執(zhí)行變量賦值節(jié)點(diǎn)過程
根據(jù)變量名從組合局部變量列表中找到該變量,并將變量值寫入列表中。
3)解釋執(zhí)行子模型運(yùn)行節(jié)點(diǎn)
從模型參數(shù)哈希表中找到該原子模型的參數(shù)列表,根據(jù)參數(shù)傳遞信息準(zhǔn)備好模型方法需要的數(shù)據(jù)。節(jié)點(diǎn)為原子模型方法執(zhí)行控制節(jié)點(diǎn)時(shí),發(fā)送模型服務(wù)請求,收到運(yùn)行結(jié)果后,將結(jié)果存入?yún)?shù)表中,并根據(jù)輸出參數(shù)傳遞信息傳遞結(jié)果;節(jié)點(diǎn)為復(fù)合模型運(yùn)行節(jié)點(diǎn)時(shí),從復(fù)合模型列表中找到該復(fù)合模型對象,解釋執(zhí)行之,然后根據(jù)輸出參數(shù)傳遞信息傳遞結(jié)果。
為方便模型的管理和重用,組合模型運(yùn)行成功后,將模型信息注冊到模型字典。模型字典必須包括模型ID、模型描述、模型腳本文件路徑等模型基本信息和輸入、輸出參數(shù)相關(guān)信息;此外,還可以包括用來輔助用戶學(xué)習(xí)使用模型的信息,如模型性能、模型應(yīng)用場合、輸入輸出的含義等。
3 結(jié)束語
模型組合是實(shí)現(xiàn)模型重用和多模型輔助決策的主要途徑,一直是模型管理系統(tǒng)中的研究重點(diǎn)和難點(diǎn)。立足于模型資源現(xiàn)有的技術(shù)體制,本文介紹了一個(gè)通用模型組合工具的設(shè)計(jì)思想與實(shí)現(xiàn)中的關(guān)鍵技術(shù)。該工具支持可視化定義組合模型的控制流和信息流,通過對組合模型腳本進(jìn)行解析執(zhí)行,實(shí)現(xiàn)了多種文件格式的模型資源的有序調(diào)度。隨著模型資源的不斷豐富、決策問題復(fù)雜程度的不斷增加,在模型組合過程中,如何引入人工智能技術(shù)實(shí)現(xiàn)模型的快速匹配與選擇,是下一步需要研究的內(nèi)容。
參考文獻(xiàn):
[1]
陳文偉.決策支持系統(tǒng)及其開發(fā)[M].3版.北京:清華大學(xué)出版社,2008.
[2]戴超凡.基于COM的可視化模型組合工具設(shè)計(jì)與實(shí)現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),1999.
[3]于海龍,劉麗萍,鄔龍.基于Web service的模型復(fù)用研究[J].系統(tǒng)仿真學(xué)報(bào),2007,19(18):4139-4145.
[4]陳曉紅,劉磊輝.DSS模型庫管理系統(tǒng)中模型復(fù)合技術(shù)研究[J].微計(jì)算機(jī)應(yīng)用,2004,52(2):141-144.
[5] 韓祥蘭,吳慧中,陳圣磊.基于多agent的分布式模型管理與組合方法[J].計(jì)算機(jī)集成制造系統(tǒng),2004,10(???:114-118.
[6]WILLIAMSON H.XML技術(shù)大全[M].北京:機(jī)械工業(yè)出版社,2002.