(國防科學技術大學 信息系統與管理學院, 長沙 410073)
摘 要:近年來模型組合技術的研究與應用越來越廣泛,但針對各種文件格式的模型資源進行統一管理、組合與服務調度的模型庫系統尚未發現。根據多種文件格式的模型資源的特點,設計并實現了一個通用模型組合工具,利用XML語言描述組合模型的控制流程和參數傳遞流程,實現了對多種文件格式的模型資源的可視化組合和服務調度。
關鍵詞:模型輔助決策;模型庫;通用模型;模型組合
中圖分類號:TP311文獻標志碼: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
隨著信息化建設進程的不斷推進,模型輔助決策技術得到了越來越廣泛的重視和發展,積累了一大批基礎模型和專用模型資源,為模型輔助決策奠定了基礎,同時也為模型管理與服務帶來了前所未有的挑戰:各模型研制單位采用不同的技術體制研制、改造模型,導致模型資源在物理上是分布的,在技術上是異構的,而目前缺少為網絡環境下各種文件格式的模型實施統一管理和一體化服務的有效手段;大多數模型系統是針對具體的應用背景而研制的,模型是執行流程控制中的一個固定環節或過程,按固定的方式使用,并且模型之間、模型與數據之間的聯系比較固定,導致模型的可重用性差,難以對外提供模型服務。因此提高模型資源的共享性與重用性是模型管理與服務的重要需求。目前對模型組合、操縱方面取得了一定成果[1~5]:文獻[1]基于客戶/服務器結構設計并實現了一個決策支持系統快速開發平臺,提供可視化系統生成工具和框架流程細化功能,最終得到基于模型的輔助決策方案;文獻[2]基于COM組件技術開發了一個可視化模型組合環境(VIME),提供了組合模型的定義、生成與控制等功能;文獻[3]結合Web services技術分析了基于Web services的模型服務生成、模型服務表示、模型服務集成,結合實例給出了基于Web services模型服務開發和集成應用過程;文獻[4]分析了模型組合中要解決的問題,如模型表示時模型應抽象的層次等,并提出了模型復合的兩種形式,即串聯和并聯;文獻[5]利用逆向推理技術實現了模型agent的動態自動組合,給出了利用多個模型agent組合求解復雜問題的過程。以上成果都只支持單一技術條件下的模型組合或復合,難以對網絡環境下多種文件格式的模型資源進行統一管理、組合和服務。
本文研究網絡環境下多種文件格式的模型組合問題,結合模型現有的管理與運行機制,設計并實現了一個網絡環境下的通用模型組合工具,支持標準動態鏈接庫、COM組件、應用程序、Web service等文件格式的模型的可視化組合與服務控制,為基于多模型求解復雜決策問題提供了手段。
1 模型組合技術
1.1 模型組合基本方法
G. Jacopini和C. Bohm在1966年就已經從理論上證明:任何程序都可以用順序結構、選擇結構和循環結構表示。按照上述結構化的程序結構形式和思想,在模型組合的過程中,可以將模型組合中子模型之間的控制流程簡化為只包括順序、循環、選擇三種基本的結構(圖1)。其中:(a)順序結構,或稱為串行結構,即子模型間按前后順序依次執行。無條件約束的并行可以轉換為順序結構。(b)循環結構,即一個或多個子模型在滿足一定條件下的多次反復執行。根據編程語言表示形式,循環結構又可細分為先判斷后執行、先執行后判斷兩類邏輯,以及for和while兩類循環模式。(c)選擇結構,根據條件決定選擇執行某個分支下的處理。根據編程語言表示形式,選擇結構可以細分為條件結構和分支結構。其中條件結構與if…then…else語句對應;分支結構與switch…case…else語句對應。圖1中P為判別條件,滿足條件時走一分支;否則走其他分支。
把模型的三種組合關系用程序的三種結構形式來組織,利用程序的三種結構形式嵌套組合就形成了模型的復雜組合關系,可以生成復雜的決策問題方案的程序形式。在理論上,三種組合關系可以任意組合和嵌套,但在實際應用中,組合關系應盡量清晰,嵌套層次應盡量精簡。
1.2 組合模型邏輯表示
組合模型在計算機中的表示方法和存儲形式稱為組合模型表示,它是實現模型組合的前提。本文中組合模型的邏輯表示結合了結構化和面向對象的思想。采用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為子模型執行語句,包含調度各種文件格式的原子模型及組合模型所需的信息;子模型的文件格式為COM組件、標準動態鏈接庫、Web服務或組合模型時,SubModelInfo包含模型類型信息、輸入/輸出接口信息等;子模型的文件格式為標準應用程序時,CommandLineInfo包含所需的命令行參數和關鍵字信息。
按照上述表示方法描述的組合模型,其模型首部ModelHead包含接口信息以及模型描述信息,模型控制語句序列ControlSequence由各種控制結構、變量賦值及模型方法執行語句構成。這種邏輯表示既便于決策人員理解,又便于計算機解釋執行。
2 實現方案
模型組合工具以功能聚合為導向,支持以搭積木的方式自底向上組合多種文件格式的模型資源,并按照定義的模型組合關系解析組合模型腳本、調度多種文件格式的模型有序運行。其主要功能模塊包括可視化編輯、腳本生成、腳本解析與服務調度等,如圖2所示。
2.1 組合模型可視化編輯
支持用戶通過操作并設置圖元及有向線的方式實現子模型之間控制流和信息流邏輯關系的定義和描述,主要由子模型選擇、添加組合模型成員變量、控制流編輯和信息流編輯等功能組成。
信息流編輯部分負責定義模型方法參數間的傳遞關系;控制流編輯部分負責定義子模型方法之間的運行結構。在組合模型可視化編輯界面中,設計了以下圖元節點類型:開始、結束、模型方法、變量賦值、有向線、條件開始、條件結束、分支開始、分支結束、循環開始、循環結束等。各圖元節點類的父類均為圖元基類BaseStatu。BaseStatu封裝了圖元對象的基本屬性,如類型、相連的有向線等;由圖元基類繼承的具體類型圖標定義了具體圖標的關聯信息,如模型方法圖元關聯的模型方法名稱、參數傳遞情況等;有向線類封裝了圖元節點間的順序關系和控制條件信息等。
圖元基類BaseStatu定義如下:
class BaseStatu
{
public int StatuID;//圖標號
public int StatuType;/*圖標類型,包括開始圖標、結束圖標、模型圖標、變量賦值圖標、循環圖標、分支選擇圖標、結束循環圖標、結束分支選擇圖標等*/
public List〈int〉 IDArrowOut;//由該圖標出發的有向線標志
public bool Delete//該圖標是否被刪除
}
有向線類定義如下:
class Arrow
{
public ArrowID;//有向線標志
public BaseStatu FromStatu,ToStatu;//有向線相連的圖元
public int ToIconType;//有向線發出圖元的圖元標志
public bool Delete;//有向線是否被刪除
public string ConditionString;//條件表達式
public int ArrowType;//有向線類型,包括順序線、分支線等
}
在模型方法圖元節點上可設置模型方法、參數傳遞信息、查看參數數據;在循環圖元節點上可設置循環類型、循環條件;在條件/分支有向線上可設置分支/條件表達式。為了保證操作時設置的信息符合腳本語法,為各類操作需定義嚴格的約束檢查措施。
在實際應用中,傳遞的輸入/輸出參數在類型、長度和精度上往往存在差異性,為此,在定義參數傳遞過程中一般需要進行數據轉換和清洗等預處理操作。在實現中,將數據預處理功能模型化,既減輕了可視化編輯功能的負擔,同時使組合模型的結構更清晰和直觀。
2.2 組合模型腳本生成
遵循2.1節中組合模型邏輯表示方法,利用XML良好的自描述性和可擴充性的特點[6],生成XML格式的組合模型腳本,用一組XML Schema描述組合模型控制流和參數傳遞流。
以下為根據可視化編輯模塊定義的控制流和參數傳遞流生成組合模型腳本的算法思想描述。
1)生成輸入參數節。檢查模型方法圖元列表中各個子模型方法的所有輸入參數,若傳遞類型為“作為組合模型的輸入變量”,則轉換為組合模型的輸入參數。
2)生成輸出參數節。
3)生成成員變量節。
4)生成語句序列節。
a)取開始圖元,生成〈ControlSequence〉,取發出的有向線標志NextArrowID=開始圖元發出的有向線標志IDArrowOut[0]。
b)找到標志為NextArrowID有向線圖元,取與其相連的下一個圖元標志ToIconID和類型ToIconType。若ToIconType為結束節點,腳本生成成功,算法結束。
c)根據ToIconType,進行相應轉換。
(a)若圖元類型是模型圖標,生成〈SubModelControl〉及其關聯的擴展屬性,如模型文件、模型類型、提供模型的主機IP等,生成該模型的輸入/輸出參數節或命令行參數節。取NextArrowID=模型圖標的IDArrowOut[0],轉b)。
(b)若圖元類型是變量賦值圖標,生成〈SetValue〉元素及其擴展屬性,如變量名和變量值等。取NextArrowID=該圖標的IDArrowOut[0],轉b)。
(c)若圖元類型是循環圖標,根據循環的類型分別生成〈for〉元素或〈while〉元素及其關聯的擴展屬性。取NextArrowID=該圖標的IDArrowOut[0],轉b)。
(d)若圖元類型是循環結束圖標,生成〈/for〉或〈/while〉元素及其擴展屬性。取NextArrowID =該圖標的IDArrowOut[0],轉b)。
(e)若圖元類型是條件選擇圖標,生成〈ConditionControl〉元素和擴展屬性。將“-1”壓棧,作為條件選擇開始標志。將條件類型圖標的所有發出有向線標志IDArrowOut[]壓棧。彈出棧頂元素,NextArrowID=棧頂元素,生成該條件選擇的第一個分支元素〈IfSequence〉及其擴展屬性,轉b)。
(f)若圖元類型是條件選擇結束圖標,彈出棧頂元素,生成〈/IfSequence〉或〈/ElseSequence〉。若棧頂元素不等于-1,NextArrowID=棧頂元素,生成〈ElseSequence〉分支元素,轉b);否則,說明與結束圖元相配套的條件選擇圖標轉換完畢,生成〈/ConditionControl〉,NextArrowID=條件選擇結束圖標的發出有向線IDArrowOut[0],轉b)。
(g)若圖元類型是分支選擇圖標,生成〈SwitchControl〉元素和擴展屬性。類似于條件選擇結構的生成,將“-1”壓棧,作為分支選擇開始標志。將分支選擇圖標的所有發出有向線標志IDArrowOut[]壓棧。彈出棧頂元素,NextArrowID=棧頂元素,生成該條件選擇的第一個〈CaseSequence〉分支元素及其擴展屬性,轉b)。
(h)若圖元類型是分支選擇結束圖標,彈出棧頂元素,生成〈/CaseSequence〉。若棧頂元素不等于-1 ,NextArrowID=棧頂元素,生成下一個〈CaseSequence〉分支元素,轉b);否則,說明與結束圖元相配套的條件選擇圖標轉換完畢,生成〈/SwitchControl〉,NextArrowID=條件選擇結束圖標的發出有向線IDArrowOut[0],轉b)。
2.3 腳本解析與服務控制
調度引擎根據組合模型描述腳本創建組合模型實例對象、輸入/輸出參數列表,按照控制流和參數傳遞流描述信息調度各子模型有序運行。腳本解釋的基本過程如下:
a)解析組合模型腳本描述文件的輸入/輸出成員變量列表節點,初始化該模型運行時所需的資源:組合模型輸入/輸出參數列表、組合模型局部變量列表、子模型參數哈希表、包含的復合模型列表等。
b)解釋執行組合模型過程定義腳本的運行控制根節點。執行根節點下的子節點列表,包括模型執行節點、變量賦值節點、各種控制結構節點。
1)解釋執行控制結構節點過程
(1)分支結構。對于條件分支結構,取得條件分支〈ConditionControl〉的子節點列表,判斷每個〈IfSequence〉或〈ElseSequence〉分支的條件屬性下的條件表達式,若為真值,解釋執行該節點下的子節點列表,與解釋執行選擇分支結構的過程類似。
(2)循環結構。對于for類循環模式,根據擴展屬性初始化循環變量,并在滿足循環條件下反復解析執行該〈for〉節點下節點子列表。對于while類循環模式,根據擴展屬性判斷條件表達式的值,若為真值,執行該〈while〉節點下節點子列表;否則跳出循環。
2)解釋執行變量賦值節點過程
根據變量名從組合局部變量列表中找到該變量,并將變量值寫入列表中。
3)解釋執行子模型運行節點
從模型參數哈希表中找到該原子模型的參數列表,根據參數傳遞信息準備好模型方法需要的數據。節點為原子模型方法執行控制節點時,發送模型服務請求,收到運行結果后,將結果存入參數表中,并根據輸出參數傳遞信息傳遞結果;節點為復合模型運行節點時,從復合模型列表中找到該復合模型對象,解釋執行之,然后根據輸出參數傳遞信息傳遞結果。
為方便模型的管理和重用,組合模型運行成功后,將模型信息注冊到模型字典。模型字典必須包括模型ID、模型描述、模型腳本文件路徑等模型基本信息和輸入、輸出參數相關信息;此外,還可以包括用來輔助用戶學習使用模型的信息,如模型性能、模型應用場合、輸入輸出的含義等。
3 結束語
模型組合是實現模型重用和多模型輔助決策的主要途徑,一直是模型管理系統中的研究重點和難點。立足于模型資源現有的技術體制,本文介紹了一個通用模型組合工具的設計思想與實現中的關鍵技術。該工具支持可視化定義組合模型的控制流和信息流,通過對組合模型腳本進行解析執行,實現了多種文件格式的模型資源的有序調度。隨著模型資源的不斷豐富、決策問題復雜程度的不斷增加,在模型組合過程中,如何引入人工智能技術實現模型的快速匹配與選擇,是下一步需要研究的內容。
參考文獻:
[1]
陳文偉.決策支持系統及其開發[M].3版.北京:清華大學出版社,2008.
[2]戴超凡.基于COM的可視化模型組合工具設計與實現[D].長沙:國防科學技術大學,1999.
[3]于海龍,劉麗萍,鄔龍.基于Web service的模型復用研究[J].系統仿真學報,2007,19(18):4139-4145.
[4]陳曉紅,劉磊輝.DSS模型庫管理系統中模型復合技術研究[J].微計算機應用,2004,52(2):141-144.
[5] 韓祥蘭,吳慧中,陳圣磊.基于多agent的分布式模型管理與組合方法[J].計算機集成制造系統,2004,10(專刊):114-118.
[6]WILLIAMSON H.XML技術大全[M].北京:機械工業出版社,2002.