陳佳銘 王風(fēng)立 鄧君湘 曹瑞珉
1(東北大學(xué)中荷生物醫(yī)學(xué)與信息工程學(xué)院 遼寧 沈陽 110819)2(海信網(wǎng)絡(luò)科技股份有限公司 山東 青島 266071)3(沈陽特種設(shè)備檢測研究院 遼寧 沈陽 110035)4(東北大學(xué)機(jī)械工程與自動化學(xué)院 遼寧 沈陽 110819)
導(dǎo)彈防御問題是軍事領(lǐng)域研究的一項(xiàng)重要內(nèi)容,其系統(tǒng)性能測試耗資巨大,不易反復(fù)進(jìn)行,因此,計(jì)算機(jī)仿真技術(shù)大量應(yīng)用于導(dǎo)彈防御博弈系統(tǒng)性能測試領(lǐng)域[1]。現(xiàn)有的導(dǎo)彈防御系統(tǒng)建模仿真軟件側(cè)重于系統(tǒng)物理層建模,缺乏對系統(tǒng)混雜特性的刻畫,開源性差,無法進(jìn)行深入修改[2-5]。Petri網(wǎng)是一種簡潔的、圖形化的網(wǎng)絡(luò)模型,它既能表示靜態(tài)的系統(tǒng)拓?fù)浣Y(jié)構(gòu),也能用于系統(tǒng)動態(tài)行為的仿真。然而,傳統(tǒng)Petri網(wǎng)并不能全面描述系統(tǒng)中連續(xù)、隨機(jī)、時延和沖突等混雜特性。混雜隨機(jī)時延Petri網(wǎng)HSTPN[6]是基于條件事件網(wǎng)改進(jìn)的高級Petri網(wǎng)模型,其含有離散、連續(xù)、隨機(jī)、時延和控制5種庫所,能有效描述系統(tǒng)中存在的多種混雜特性, 目前已成功應(yīng)用于梯級水庫防洪控制系統(tǒng)[7]。HSTPN能夠有效描述導(dǎo)彈防御系統(tǒng)博弈過程中的離散、連續(xù)、隨機(jī)、時延和沖突特性。因此有必要基于HSTPN模型開發(fā)一套導(dǎo)彈防御系統(tǒng)博弈仿真軟件。本文針對其仿真系統(tǒng)的開發(fā),討論模型的存儲與加載方法。
導(dǎo)彈防御系統(tǒng)博弈仿真軟件的功能可劃分為如圖1所示的4類功能,包括導(dǎo)彈防御系統(tǒng)博弈過程HSTPN模型搭建功能(以下簡稱建模功能)、導(dǎo)彈防御系統(tǒng)HSTPN博弈模型推演功能(以下簡稱推演功能)、仿真模型的存儲與加載功能和仿真數(shù)據(jù)輸出功能。
圖1 軟件功能劃分
導(dǎo)彈防御系統(tǒng)博弈仿真軟件的整體架構(gòu)如圖2所示。仿真軟件的架構(gòu)包括人機(jī)交互層、數(shù)據(jù)結(jié)構(gòu)層、推演仿真層及文件存儲層。
圖2 導(dǎo)彈防御系統(tǒng)博弈仿真軟件整體架構(gòu)
人機(jī)交互層用于實(shí)現(xiàn)軟件的人機(jī)交互界面,將用戶操作信息轉(zhuǎn)化為數(shù)據(jù),存儲在數(shù)據(jù)結(jié)構(gòu)層相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。通過不斷監(jiān)測數(shù)據(jù)結(jié)構(gòu)層中數(shù)據(jù)的變化,并轉(zhuǎn)化為人機(jī)交互層中各種圖形的改變,從而完成模型狀態(tài)、推演動畫及數(shù)據(jù)展示等功能。用戶通過創(chuàng)建HSTPN模型的節(jié)點(diǎn),設(shè)置仿真參數(shù),基于Lua語言進(jìn)行連續(xù)方程編寫等操作完成網(wǎng)絡(luò)模型的創(chuàng)建,并通過點(diǎn)擊按鈕進(jìn)行模型推演仿真、控制仿真進(jìn)程、模型存儲、模型加載、數(shù)據(jù)存儲等操作[9]。
數(shù)據(jù)結(jié)構(gòu)層包括導(dǎo)彈防御系統(tǒng)博弈仿真軟件建模、仿真、數(shù)據(jù)輸出等過程中用到的數(shù)據(jù)結(jié)構(gòu)。在HSTPN博弈模型推演過程中不斷接收博弈模型的數(shù)據(jù)變化信息、仿真輸出數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)層接收人機(jī)交互層的操作信息,并將其轉(zhuǎn)換成數(shù)據(jù)存儲在對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。
推演仿真層用于讀取數(shù)據(jù)結(jié)構(gòu)層存儲的博弈模型的數(shù)據(jù)信息?;贖STPN博弈模型推演引擎完成模型推演仿真,并將推演過程中的數(shù)據(jù)實(shí)時傳遞回?cái)?shù)據(jù)結(jié)構(gòu)層。利用推演動畫展示程序?qū)崟r地驅(qū)使相應(yīng)的數(shù)據(jù)傳遞給人機(jī)交互層,引起人機(jī)交互層各圖形的變化,從而實(shí)現(xiàn)推演動畫展示的功能。利用仿真數(shù)據(jù)輸出程序驅(qū)動數(shù)據(jù)結(jié)構(gòu)層中接收的仿真數(shù)據(jù)賦值給相應(yīng)的數(shù)據(jù)輸出節(jié)點(diǎn)。
文件存儲層用于實(shí)現(xiàn)模型文件的存儲與加載、仿真數(shù)據(jù)的存儲功能。通過讀取數(shù)據(jù)結(jié)構(gòu)層存儲的模型數(shù)據(jù)或仿真數(shù)據(jù),將其寫入文件并存儲在電腦磁盤中。當(dāng)用戶通過點(diǎn)擊人機(jī)交互界面上的“打開”按鈕,文件存儲層讀取存儲電腦磁盤文件中的信息,并將其轉(zhuǎn)換成相應(yīng)的數(shù)據(jù),重新存儲于數(shù)據(jù)結(jié)構(gòu)層。
導(dǎo)彈防御系統(tǒng)博弈仿真軟件要求模型存儲與加載功能能夠完成以下兩個具體操作:1) 將用戶搭建好的HSTPN博弈模型以文件的形式存儲于電腦磁盤;2) 能夠讀取磁盤中存儲的模型文件,并將模型信息重新加載到內(nèi)存中。為實(shí)現(xiàn)上述功能,本文基于XML設(shè)計(jì)了一種模型存儲文件,并實(shí)現(xiàn)該文件的讀寫操作,進(jìn)而實(shí)現(xiàn)模型的存儲與加載功能。
3.1.1 XML
用戶可以創(chuàng)建要保存的內(nèi)容,然后使用特定標(biāo)記來標(biāo)記它,從而使每個單詞、短語或塊成為可識別、可分類的信息。XML文件由內(nèi)容和標(biāo)記組成。XML標(biāo)記分開始標(biāo)記和結(jié)束標(biāo)記,一般成對使用。XML可簡便、有效地實(shí)現(xiàn)節(jié)點(diǎn)信息、數(shù)據(jù)的保存。
3.1.2 TinyXML解析器
TinyXML是一款基于文檔對象模型的XML解析器,簡單易用且小巧玲瓏,非常適合存儲簡單數(shù)據(jù)、配置文件等數(shù)據(jù)量不是很大的操作[11]。TinyXML是基于C++編寫的,它為用戶提供了大量的C++接口,支持對XML的讀、寫、插入和刪除等操作。本文軟件的模型文件存儲與加載的功能基于TinyXML解析器設(shè)計(jì)。
導(dǎo)彈防御系統(tǒng)HSTPN博弈模型包含3種基本元素:狀態(tài)節(jié)點(diǎn)、事件節(jié)點(diǎn)和有向弧。基于XML設(shè)計(jì)的存儲文件應(yīng)能夠詳細(xì)且簡便地保存HSTPN博弈模型的全部信息。本文設(shè)計(jì)的模型存儲文件以hst作為后綴名,因此,將軟件的模型存儲文件稱為hst文件。導(dǎo)彈防御系統(tǒng)HSTPN博弈模型存儲文件結(jié)構(gòu)如圖3所示。
圖3 HSTPN博弈模型存儲文件結(jié)構(gòu)
1) 根節(jié)點(diǎn):用于存儲仿真文件本身的基本信息,如模型存儲位置等。
2) 一級子節(jié)點(diǎn):共三個,分別表示要存儲的HSTPN博弈模型狀態(tài)節(jié)點(diǎn)集合、事件節(jié)點(diǎn)集合和有向弧集合。
3) 二級子節(jié)點(diǎn):用于存儲具體的狀態(tài)節(jié)點(diǎn)、事件節(jié)點(diǎn)和有向弧的名稱。
4) 二級子節(jié)點(diǎn)的屬性值:用于存儲具體的數(shù)據(jù)信息,如概率閾值、時間閾值等。
3.3.1 模型存儲流程
模型存儲過程本質(zhì)是按照hst文件的結(jié)構(gòu)依次將緩存于內(nèi)存中的模型信息寫入至hst文件的過程。模型存儲的實(shí)現(xiàn)流程如圖4所示。
圖4 模型存儲實(shí)現(xiàn)流程
當(dāng)用戶點(diǎn)擊人機(jī)交互界面的“保存”按鈕后,彈出一個保存對話框;用戶選擇存儲路徑、輸入文件名,并點(diǎn)擊對話框中“保存”按鈕,此時視圖類獲取到存儲路徑和文件名,并傳遞給文檔類;文檔類調(diào)用SaveModel方法將數(shù)據(jù)寫入hst文件。
3.3.2 模型加載流程
模型的加載過程本質(zhì)是將存儲于hst文件中的模型信息重新讀取到文檔類相應(yīng)數(shù)據(jù)結(jié)構(gòu)中的過程。模型加載的實(shí)現(xiàn)流程如圖5所示。
當(dāng)用戶點(diǎn)擊人機(jī)交互界面的“打開”按鈕后,彈出一個打開對話框;用戶選擇待打開的hst文件,點(diǎn)擊對話框中“打開”按鈕后,視圖類獲取文件路徑及文件名,并傳遞給文檔類;文檔類調(diào)用LoadModel方法讀取hst文件并將讀取到的數(shù)據(jù)賦值到相應(yīng)的數(shù)據(jù)結(jié)構(gòu);文檔類通過視圖類指針調(diào)用Draw方法,在視圖中繪制出HSTPN博弈模型,進(jìn)而呈現(xiàn)給用戶。
當(dāng)用戶完成模型搭建后,點(diǎn)擊界面工具欄中“保存 ”按鈕,彈出如圖6所示對話框。用戶選擇好保存路徑并輸入文件名后,點(diǎn)擊“保存”按鈕,即可完成模型的存儲。
圖6 模型文件保存對話框
當(dāng)用戶需要重新加載一個已保存的模型時,用戶通過點(diǎn)擊界面工具欄上的“打開”按鈕,彈出如圖7所示的打開對話框。用戶選擇要加載的模型文件后,點(diǎn)擊“打開”按鈕,即可將模型重新加載到軟件中。
圖7 模型打開對話框
本文首先對導(dǎo)彈防御系統(tǒng)博弈仿真軟件的功能需求進(jìn)行分析,并結(jié)合MFC“文檔-視圖類”結(jié)構(gòu)設(shè)計(jì)了軟件的分層架構(gòu)及程序?qū)崿F(xiàn)框架。綜合上述分析可知,本軟件包含的功能主要分為4類:導(dǎo)彈防御系統(tǒng)博弈過程HSTPN模型搭建功能;導(dǎo)彈防御系統(tǒng)HSTPN博弈模型推演功能;仿真模型的存儲與加載功能;仿真數(shù)據(jù)輸出功能。在給出基于XML的模型存儲文件結(jié)構(gòu)的基礎(chǔ)上,設(shè)計(jì)了模型存儲與加載的流程。最后,設(shè)計(jì)了仿真數(shù)據(jù)輸出功能的流程,并給出了軟件基于TinyXML解析器實(shí)現(xiàn)模型存儲與加載功能的實(shí)例。