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