本發(fā)明涉及建模與仿真技術(shù)領(lǐng)域,具體涉及一種并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法。
背景技術(shù):
仿真系統(tǒng)初始化是執(zhí)行仿真計(jì)算的前提,在復(fù)雜軍事仿真系統(tǒng)中,初始化信息往往在仿真想定軟件生成的仿真想定文件中進(jìn)行描述,以實(shí)現(xiàn)從特定視角反應(yīng)作戰(zhàn)雙方預(yù)先設(shè)定的兵力部署與作戰(zhàn)計(jì)劃。因此,在仿真系統(tǒng)執(zhí)行之前,需要從仿真想定文件中解析仿真系統(tǒng)的初始化數(shù)據(jù),加載到仿真系統(tǒng)中,完成相應(yīng)作戰(zhàn)單元仿真模型的初始化,才能正確驅(qū)動(dòng)仿真系統(tǒng)的執(zhí)行。為了避免仿真想定與仿真應(yīng)用系統(tǒng)耦合緊密,仿真想定軟件往往具有通用性,其生成的仿真想定文件能夠支持不同仿真系統(tǒng)的初始化,這就需要建立合適的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),使得在仿真系統(tǒng)初始化過(guò)程中能夠直接將想定數(shù)據(jù)映射為仿真系統(tǒng)變量的初始值。
并行離散事件仿真技術(shù)為復(fù)雜軍事仿真系統(tǒng)的實(shí)現(xiàn)提供了重要的技術(shù)途徑。如圖1所示,目前基于并行離散事件仿真的復(fù)雜軍事仿真系統(tǒng)(以下簡(jiǎn)稱(chēng)為并行離散事件仿真系統(tǒng))通常由多個(gè)仿真對(duì)象構(gòu)成,每個(gè)仿真對(duì)象的執(zhí)行邏輯又是由一個(gè)初始化函數(shù)與多個(gè)事件處理函數(shù)組成,仿真對(duì)象之間通過(guò)事件調(diào)度機(jī)制實(shí)現(xiàn)通信。其中,仿真對(duì)象是對(duì)軍事系統(tǒng)中作戰(zhàn)單元的建模抽象,仿真對(duì)象之間的事件調(diào)度關(guān)系是對(duì)作戰(zhàn)單元之間的指控關(guān)系、交互關(guān)系的建模抽象。并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)本質(zhì)上包含組成該系統(tǒng)的各仿真對(duì)象初始化數(shù)據(jù)之和。隨著仿真應(yīng)用的不斷深入,仿真對(duì)象的類(lèi)型越來(lái)越多,仿真對(duì)象的規(guī)模越來(lái)越大,導(dǎo)致相應(yīng)的初始化數(shù)據(jù)越來(lái)越復(fù)雜,給仿真系統(tǒng)初始化數(shù)據(jù)的存儲(chǔ)帶來(lái)了挑戰(zhàn)。
當(dāng)前仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)主要存在以下兩個(gè)方面的問(wèn)題:(1)仿真系統(tǒng)初始化數(shù)據(jù)往往包含較為復(fù)雜的數(shù)據(jù)類(lèi)型,如作戰(zhàn)實(shí)體屬性、航路規(guī)劃等,難以采用單一的數(shù)據(jù)結(jié)構(gòu)模式進(jìn)行存儲(chǔ);(2)仿真想定數(shù)據(jù)是面向特定用戶(hù)進(jìn)行組織的,與仿真系統(tǒng)初始化變量的組織結(jié)構(gòu)存在較大差異,難以直接建立想定數(shù)據(jù)到仿真系統(tǒng)初始化變量之間的映射關(guān)系,進(jìn)而需要對(duì)想定文件內(nèi)容進(jìn)行搜索,導(dǎo)致頻繁的文件系統(tǒng)訪問(wèn)操作。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題就在于:針對(duì)現(xiàn)有技術(shù)存在的技術(shù)問(wèn)題,本發(fā)明提供一種實(shí)現(xiàn)方法簡(jiǎn)單、內(nèi)存消耗小且復(fù)雜度低的并行離散事件仿真系統(tǒng)初始化的數(shù)據(jù)存儲(chǔ)方法,通過(guò)采用層次式嵌套hash表結(jié)構(gòu),能夠建立與并行離散事件仿真系統(tǒng)結(jié)構(gòu)相一致的初始化變量/數(shù)據(jù)對(duì)應(yīng)關(guān)系,同時(shí)使得在仿真系統(tǒng)初始化程序執(zhí)行時(shí)能夠快速搜索仿真系統(tǒng)變量初始值。
為解決上述技術(shù)問(wèn)題,本發(fā)明提出的技術(shù)方案為:
一種并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法,該方法包括:從目標(biāo)仿真想定文件中獲取到所需存儲(chǔ)的仿真對(duì)象數(shù)據(jù)后,依次構(gòu)建用于存儲(chǔ)仿真對(duì)象類(lèi)信息的仿真對(duì)象類(lèi)哈希表、用于存儲(chǔ)仿真對(duì)象實(shí)例信息的仿真對(duì)象實(shí)例哈希表、以及用于存儲(chǔ)仿真對(duì)象屬性信息的仿真對(duì)象實(shí)例屬性哈希表,由所述仿真對(duì)象類(lèi)哈希表、所述仿真對(duì)象實(shí)例哈希表以及所述仿真對(duì)象實(shí)例屬性哈希表分別存儲(chǔ)對(duì)應(yīng)的仿真對(duì)象數(shù)據(jù)后,得到仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。
作為本發(fā)明的進(jìn)一步改進(jìn):所述仿真數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)具體為依次由所述仿真對(duì)象類(lèi)哈希表、所述仿真對(duì)象實(shí)例哈希表以及所述仿真對(duì)象實(shí)例屬性哈希表嵌套構(gòu)建得到,其中所述仿真對(duì)象類(lèi)哈希表為基于仿真對(duì)象類(lèi)信息、所述仿真對(duì)象實(shí)例哈希表構(gòu)建哈希表得到,所述仿真對(duì)象實(shí)例哈希表為基于仿真對(duì)象實(shí)例信息、所述仿真對(duì)象實(shí)例屬性哈希表構(gòu)建哈希表得到,所述仿真對(duì)象實(shí)例屬性哈希表為基于對(duì)象屬性信息構(gòu)建哈希表得到;所述對(duì)象屬性信息為對(duì)象屬性名稱(chēng)、對(duì)象屬性值域。
作為本發(fā)明的進(jìn)一步改進(jìn):所述仿真對(duì)象實(shí)例屬性哈希表具體為基于對(duì)象屬性信息、仿真對(duì)象屬性集合哈希表構(gòu)建哈希表得到,所述仿真對(duì)象屬性集合哈希表為由屬性信息集合構(gòu)建哈希表得到;所述仿真對(duì)象屬性集合哈希表包括由第一屬性信息構(gòu)建哈希表得到的第一屬性變量哈希表、以及由第二屬性信息構(gòu)建哈希表得到的第二屬性變量哈希表。
作為本發(fā)明的進(jìn)一步改進(jìn):所述第一屬性信息為包括屬性名稱(chēng)、屬性值域的基本屬性信息;所述第二屬性信息為包括航跡id或多粒度屬性信息、屬性集的復(fù)雜屬性信息。
作為本發(fā)明的進(jìn)一步改進(jìn),該方法的具體步驟為:
s1.構(gòu)建仿真對(duì)象類(lèi)哈希表,解析目標(biāo)仿真想定文件,并將目標(biāo)仿真想定文件中包含的仿真對(duì)象類(lèi)信息存儲(chǔ)到仿真對(duì)象類(lèi)哈希表中;
s2.為每一個(gè)仿真對(duì)象類(lèi)構(gòu)建一個(gè)仿真對(duì)象實(shí)例哈希表,循環(huán)搜索目標(biāo)仿真想定文件后,將仿真對(duì)象類(lèi)節(jié)點(diǎn)中包含的仿真對(duì)象實(shí)例信息,存儲(chǔ)到所述仿真對(duì)象實(shí)例哈希表中;
s3.為每一個(gè)仿真對(duì)象實(shí)例構(gòu)建一個(gè)仿真對(duì)象屬性集合哈希表,循環(huán)搜索目標(biāo)仿真想定文件,并將仿真對(duì)象實(shí)例節(jié)點(diǎn)中包含的仿真對(duì)象屬性集合信息,存儲(chǔ)到所述仿真對(duì)象屬性集合哈希表中;
s4.為每一個(gè)仿真對(duì)象屬性集合分別構(gòu)建用于存儲(chǔ)基本屬性信息的第一屬性變量哈希表、用于存儲(chǔ)復(fù)雜屬性信息的第二屬性變量哈希表,循環(huán)搜索目標(biāo)仿真想定文件,并將仿真對(duì)象實(shí)例節(jié)點(diǎn)中包含的所述第一屬性信息、第二屬性信息,分別存儲(chǔ)到所述第一屬性變量哈希表、第二屬性變量哈希表中。
作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟s1的具體步驟為:
s11.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象類(lèi)名作為目標(biāo)仿真對(duì)象類(lèi)名;
s12.判斷是否存在以目標(biāo)仿真對(duì)象類(lèi)名為key值的目標(biāo)仿真對(duì)象類(lèi)哈希表,若不存在,則轉(zhuǎn)入執(zhí)行步驟s13,否則轉(zhuǎn)入執(zhí)行步驟s14;
s13.構(gòu)建所述仿真對(duì)象實(shí)例哈希表,將目標(biāo)仿真對(duì)象類(lèi)名為key值、所述仿真對(duì)象實(shí)例哈希表作為value值存入構(gòu)建的所述仿真對(duì)象類(lèi)哈希表中;
s14.獲取以目標(biāo)仿真對(duì)象類(lèi)名為key值的仿真對(duì)象類(lèi)哈希表,以及對(duì)應(yīng)value值的仿真對(duì)象實(shí)例哈希表;
s15.循環(huán)執(zhí)行s11~s14步驟,直至處理完目標(biāo)仿真想定文件中所有仿真對(duì)象類(lèi)。
作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟s2的具體步驟為:
s21.解析所述目標(biāo)想定文件,獲取一個(gè)仿真對(duì)象實(shí)例號(hào)或?qū)嵗鳛槟繕?biāo)實(shí)例信息;
s22.構(gòu)建所述第一屬性變量哈希表,以目標(biāo)實(shí)例信息為key值、構(gòu)建的所述第一屬性變量哈希表為value值存入所述仿真對(duì)象實(shí)例哈希表;
s23.構(gòu)建所述第二屬性變量哈希表,以目標(biāo)實(shí)例信息為key值、構(gòu)建的所述第二屬性變量哈希表為value值存入所述仿真對(duì)象實(shí)例哈希表;
s24.循環(huán)執(zhí)行步驟s21~s23,直至解析完目標(biāo)仿真想定文件中所有仿真對(duì)象類(lèi)節(jié)點(diǎn)的仿真對(duì)象實(shí)例信息。
作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟s3中具體以所述第一屬性為key值、所述第一屬性變量哈希表為value值,存入所述仿真對(duì)象屬性集合哈希表中;以及以所述第二屬性中的類(lèi)別標(biāo)識(shí)為key值、所述第二屬性變量哈希表為value值存入所述仿真對(duì)象屬性集合哈希表中,完成仿真對(duì)象屬性集合哈希表構(gòu)建。
作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟s4中將第一屬性信息存儲(chǔ)至所述第一屬性變量哈希表的具體步驟為:
s411.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象實(shí)例節(jié)點(diǎn)的屬性變量名作為目標(biāo)屬性變量名、以及屬性值作為目標(biāo)屬性值;
s412.以目標(biāo)屬性變量名為key值、目標(biāo)屬性值為value值存入所述第一屬性變量哈希表中;
s413.循環(huán)執(zhí)行步驟s411、s412,直至解析完目標(biāo)仿真想定文件中所有仿真對(duì)象實(shí)例節(jié)點(diǎn)。
作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟s4中將第二屬性信息存儲(chǔ)至所述第二屬性變量哈希表的具體步驟為:
s421.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象實(shí)例節(jié)點(diǎn)的屬性變量名作為目標(biāo)屬性變量名、以及屬性值作為目標(biāo)屬性值;
s422.判斷是否存在key值為目標(biāo)屬性變量名的第二屬性變量哈希表,若不存在,則轉(zhuǎn)入執(zhí)行步驟s423,否則轉(zhuǎn)入執(zhí)行步驟s424;
s423.構(gòu)建仿真對(duì)象屬性容器vector,將目標(biāo)屬性值插入構(gòu)建的仿真對(duì)象屬性容器vector,并將目標(biāo)屬性變量名為key值、仿真對(duì)象屬性容器vector為value值,存入所述第二屬性變量哈希表中;
s424.在第二屬性變量哈希表中查找與目標(biāo)屬性變量名對(duì)應(yīng)的仿真對(duì)象屬性容器vector,將目標(biāo)屬性值插入仿真對(duì)象屬性容器vector中;
s425.循環(huán)執(zhí)行步驟s421~s424,直至解析完目標(biāo)想定文件中所有仿真對(duì)象實(shí)例節(jié)點(diǎn)。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
1)本發(fā)明用于并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ),采用層次式嵌套哈希(hash)表結(jié)構(gòu),以一種統(tǒng)一的數(shù)據(jù)模板hashmap將仿真想定文件中包含的不同類(lèi)型的數(shù)據(jù),如作戰(zhàn)實(shí)體屬性、航路規(guī)劃等重新組織存儲(chǔ)起來(lái),能夠建立與并行離散事件仿真系統(tǒng)結(jié)構(gòu)相一致的初始化變量/數(shù)據(jù)對(duì)應(yīng)關(guān)系,同時(shí)使得在仿真系統(tǒng)初始化程序執(zhí)行時(shí)能夠快速搜索仿真系統(tǒng)變量初始值,方便對(duì)仿真想定數(shù)據(jù)的存儲(chǔ)與查詢(xún);
2)本發(fā)明采用層次式嵌套哈希(hash)表結(jié)構(gòu),通過(guò)解析仿真想定文件,并將解析數(shù)據(jù)依次由仿真對(duì)象類(lèi)哈希表、仿真對(duì)象實(shí)例哈希表以及仿真對(duì)象實(shí)例屬性哈希表嵌套構(gòu)建得到仿真數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立與并行離散事件仿真系統(tǒng)結(jié)構(gòu)相一致的初始化變量/數(shù)據(jù)對(duì)應(yīng)關(guān)系,從而根據(jù)仿真對(duì)象類(lèi)名稱(chēng)、仿真對(duì)象實(shí)例名稱(chēng)以及仿真對(duì)象屬性名稱(chēng)可以快速搜索到仿真對(duì)象屬性對(duì)應(yīng)的初始化值,能夠減少頻繁的文件系統(tǒng)訪問(wèn)操作,從而提高仿真系統(tǒng)初始化效率。
附圖說(shuō)明
圖1是并行離散事件仿真系統(tǒng)的結(jié)構(gòu)原理示意圖。
圖2是本實(shí)施例并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法的實(shí)現(xiàn)流程示意圖。
圖3是本實(shí)施例實(shí)現(xiàn)并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)的層次組織結(jié)構(gòu)示意圖。
圖4是本實(shí)施例基于嵌套式哈希結(jié)構(gòu)實(shí)現(xiàn)仿真對(duì)象數(shù)據(jù)存儲(chǔ)的實(shí)現(xiàn)原理示意圖。
圖5是本實(shí)施例并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法的詳細(xì)實(shí)現(xiàn)流程示意圖。
圖6是本實(shí)施例構(gòu)建仿真對(duì)象第二屬性hash表的流程示意圖。
具體實(shí)施方式
以下結(jié)合說(shuō)明書(shū)附圖和具體優(yōu)選的實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述,但并不因此而限制本發(fā)明的保護(hù)范圍。
如圖2所示,本實(shí)施例中并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法,從目標(biāo)仿真想定文件中獲取到所需存儲(chǔ)的仿真對(duì)象數(shù)據(jù)后,依次構(gòu)建用于存儲(chǔ)仿真對(duì)象類(lèi)信息的仿真對(duì)象類(lèi)哈希表、用于存儲(chǔ)仿真對(duì)象實(shí)例信息的仿真對(duì)象實(shí)例哈希表、以及用于存儲(chǔ)仿真對(duì)象實(shí)例的仿真對(duì)象實(shí)例屬性哈希表,由仿真對(duì)象類(lèi)哈希表、仿真對(duì)象實(shí)例哈希表、仿真對(duì)象屬性集合哈希表以及仿真對(duì)象實(shí)例屬性哈希表分別存儲(chǔ)對(duì)應(yīng)的仿真對(duì)象數(shù)據(jù)后,得到仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。
哈希表是利用哈希算法和哈希值直接尋址并定位數(shù)據(jù)結(jié)構(gòu),能在較短時(shí)間內(nèi)訪問(wèn)表內(nèi)任何的數(shù)據(jù)元素。本實(shí)施例基于哈希表構(gòu)建仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),將仿真對(duì)象的屬性信息、仿真對(duì)象屬性容器存儲(chǔ)至仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中,與傳統(tǒng)的如采用樹(shù)結(jié)構(gòu)存儲(chǔ)的方式相比,所需的內(nèi)存消耗小且復(fù)雜度低,當(dāng)需要查找仿真對(duì)象屬性信息時(shí),可快速、準(zhǔn)確的從仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中查找到對(duì)應(yīng)的仿真對(duì)象屬性值。
考慮到與仿真系統(tǒng)相對(duì)應(yīng)的層次結(jié)構(gòu),如圖3、4所示,本實(shí)施例中仿真數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)具體為依次由仿真對(duì)象類(lèi)哈希表(仿真對(duì)象類(lèi)hashmap)、仿真對(duì)象實(shí)例哈希表(仿真對(duì)象實(shí)例hashmap)、仿真對(duì)象屬性集合哈希表(仿真對(duì)象屬性集合hashmap)以及仿真對(duì)象實(shí)例屬性哈希表(仿真對(duì)象實(shí)例屬性hashmap)嵌套構(gòu)建得到,其中仿真對(duì)象類(lèi)哈希表為基于仿真對(duì)象類(lèi)信息、仿真對(duì)象實(shí)例哈希表構(gòu)建哈希表得到,仿真對(duì)象類(lèi)信息為仿真對(duì)象類(lèi)名稱(chēng);仿真對(duì)象實(shí)例哈希表為基于仿真對(duì)象實(shí)例信息、仿真對(duì)象實(shí)例屬性集合哈希表構(gòu)建哈希表得到,仿真對(duì)象實(shí)例信息為仿真對(duì)象實(shí)例id;仿真對(duì)象實(shí)例屬性哈希表具體為基于仿真對(duì)象屬性類(lèi)別信息、仿真對(duì)象屬性集合哈希表構(gòu)建哈希表得到,仿真對(duì)象屬性類(lèi)別信息為“第一屬性”或第二屬性類(lèi)別,仿真對(duì)象屬性集合哈希表包括由第一屬性信息構(gòu)建哈希表得到的第一屬性變量哈希表、以及由第二屬性信息構(gòu)建哈希表得到的第二屬性變量哈希表。
本實(shí)施例中,第一屬性信息具體為包括屬性名稱(chēng)、屬性值域的基本屬性信息的簡(jiǎn)單屬性集合,如為<屬性名稱(chēng)、屬性值>的基本屬性信息二元組;第二屬性信息具體為包括航跡id或多粒度屬性信息、屬性集的復(fù)雜屬性信息的復(fù)雜屬性集合,如為包括多粒度屬性<屬性名稱(chēng),vector<屬性值1,屬性值2……屬性值n>>、航路規(guī)劃屬性<航路規(guī)劃名稱(chēng),vector<規(guī)劃1,規(guī)劃2……規(guī)劃n>>等的復(fù)雜屬性信息。
通過(guò)上述存儲(chǔ)得到仿真對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),則根據(jù)所需要查找的仿真對(duì)象類(lèi)名、目標(biāo)屬性名、目標(biāo)仿真對(duì)象屬性類(lèi)型,依次查找對(duì)應(yīng)的仿真對(duì)象類(lèi)哈希表、仿真對(duì)象實(shí)例哈希表、仿真對(duì)象屬性哈希表,查找到對(duì)應(yīng)的仿真對(duì)象屬性值或容器vector,即可方便的查找到對(duì)應(yīng)的仿真對(duì)象屬性值。
如圖5所示,本實(shí)施例實(shí)現(xiàn)上述并行離散事件仿真系統(tǒng)初始化數(shù)據(jù)存儲(chǔ)方法的具體步驟包括:
s1.構(gòu)建仿真對(duì)象類(lèi)hash(哈希)表結(jié)構(gòu),自動(dòng)解析并循環(huán)搜索目標(biāo)仿真想定文件內(nèi)容,將目標(biāo)仿真想定文件中包含的仿真對(duì)象類(lèi)信息存儲(chǔ)到仿真對(duì)象類(lèi)hash表結(jié)構(gòu)中;
s2.為每一個(gè)仿真對(duì)象類(lèi)構(gòu)建一個(gè)仿真對(duì)象實(shí)例hash表結(jié)構(gòu),循環(huán)搜索仿真想定文件內(nèi)容,將仿真對(duì)象類(lèi)節(jié)點(diǎn)中包含的仿真對(duì)象實(shí)例信息存儲(chǔ)到仿真對(duì)象實(shí)例hash表結(jié)構(gòu)中;
s3.為每一個(gè)仿真對(duì)象實(shí)例構(gòu)建一個(gè)仿真對(duì)象屬性集合hash表結(jié)構(gòu),循環(huán)搜索仿真想定文件內(nèi)容,將仿真對(duì)象實(shí)例節(jié)點(diǎn)中包含的仿真對(duì)象屬性集合信息存儲(chǔ)到仿真對(duì)象屬性集合hash表結(jié)構(gòu)中;
s4.為每一個(gè)仿真對(duì)象屬性集合分別構(gòu)建用于存儲(chǔ)基本屬性信息的第一屬性變量hash表結(jié)構(gòu)、用于存儲(chǔ)復(fù)雜屬性信息的第二屬性變量hash表結(jié)構(gòu),循環(huán)搜索目標(biāo)仿真想定文件內(nèi)容,并將仿真對(duì)象實(shí)例節(jié)點(diǎn)中包含的第一屬性信息、第二屬性信息,分別存儲(chǔ)到第一屬性變量哈希表、第二屬性變量哈希表中。
本實(shí)施例采用上述方法實(shí)現(xiàn)并行離散事件仿真系統(tǒng)的初始化數(shù)據(jù)存儲(chǔ),通過(guò)自動(dòng)解析仿真想定文件,采用層次式嵌套哈希(hash)表結(jié)構(gòu)將仿真想定文件中包含的不同類(lèi)型的數(shù)據(jù),如作戰(zhàn)實(shí)體屬性、航路規(guī)劃等重新組織存儲(chǔ)起來(lái),以建立與并行離散事件仿真系統(tǒng)結(jié)構(gòu)相一致的初始化變量/數(shù)據(jù)對(duì)應(yīng)關(guān)系,在仿真系統(tǒng)初始化程序執(zhí)行時(shí)能夠快速搜索仿真系統(tǒng)變量的初始值,從而提高仿真系統(tǒng)的初始化效率。
如圖4所示,本實(shí)施例中采用上述仿真數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),將仿真對(duì)象的屬性信息、仿真對(duì)象屬性容器進(jìn)行存儲(chǔ)時(shí),首先將仿真對(duì)象屬性名稱(chēng)attrname作為key值、以及將仿真對(duì)象屬性容器vector作為value值存入仿真對(duì)象屬性集合哈希表attribution_map中;然后將仿真對(duì)象屬性類(lèi)別標(biāo)識(shí)attrtype作為key值、仿真對(duì)象屬性集合哈希表attribution_map作為value值存入仿真對(duì)象屬性哈希表typename_map中;再將仿真對(duì)象實(shí)例號(hào)instanceid作為key值、typename_map仿真對(duì)象屬性哈希表作為value值存入仿真對(duì)象實(shí)例屬性哈希表instance_map中;最后將仿真對(duì)象類(lèi)名classname作為key值、仿真對(duì)象實(shí)例屬性哈希表instance_map作為value值存入仿真對(duì)象類(lèi)哈希表class_instance_map中,完成存儲(chǔ)。
本實(shí)施例實(shí)現(xiàn)并行離散事件仿真系統(tǒng)的初始化數(shù)據(jù)存儲(chǔ),各步驟的詳細(xì)步驟如下所示:
步驟s1的具體步驟為:
s11.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象類(lèi)名作為目標(biāo)仿真對(duì)象類(lèi)名classname;
s12.判斷是否存在以目標(biāo)仿真對(duì)象類(lèi)名classname為key值的目標(biāo)仿真對(duì)象類(lèi)哈希表class_map,若不存在,則轉(zhuǎn)入執(zhí)行步驟s13,否則轉(zhuǎn)入執(zhí)行步驟s14;
s13.構(gòu)建仿真對(duì)象實(shí)例哈希表instance_map,將目標(biāo)仿真對(duì)象類(lèi)名為key值、仿真對(duì)象實(shí)例哈希表instance_map作為value值存入構(gòu)建的仿真對(duì)象類(lèi)哈希表class_map中;
s14.獲取以目標(biāo)仿真對(duì)象類(lèi)名classnam為key值的仿真對(duì)象類(lèi)哈希表class_map,以及對(duì)應(yīng)value值的仿真對(duì)象實(shí)例哈希表instance_map;
s15.循環(huán)執(zhí)行s11~s14步驟,直至處理完仿真想定文件中所有仿真對(duì)象類(lèi)。
步驟s2的具體步驟為:
s21.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象實(shí)例號(hào)instanceid或?qū)嵗鹖nstancename作為目標(biāo)實(shí)例信息;
s22.構(gòu)建第一屬性變量哈希表h1,以目標(biāo)仿真對(duì)象實(shí)例號(hào)instanceid或?qū)嵗鹖nstancename為key值、構(gòu)建的第一屬性變量哈希表h1為value值存入仿真對(duì)象實(shí)例哈希表instance_map;
s23.構(gòu)建第二屬性變量哈希表h2,以目標(biāo)仿真對(duì)象實(shí)例號(hào)instanceid或?qū)嵗鹖nstancename為key值、構(gòu)建的第二屬性變量哈希表為value值存入仿真對(duì)象實(shí)例哈希表;
s24.循環(huán)執(zhí)行步驟s21~s23,直至解析完目標(biāo)想定文件中所有仿真對(duì)象類(lèi)節(jié)點(diǎn)的仿真對(duì)象實(shí)例信息。
本實(shí)施例中,步驟s3中具體以第一屬性為key值、第一屬性變量哈希表h1為value值,存入仿真對(duì)象屬性集合哈希表中;以及以第二屬性中的類(lèi)別標(biāo)識(shí)為key值、第二屬性變量哈希表為value值存入仿真對(duì)象屬性集合哈希表中,完成仿真對(duì)象屬性集合哈希表構(gòu)建。
步驟s4中將第一屬性信息存儲(chǔ)至第一屬性變量哈希表的具體步驟為:
s411.解析目標(biāo)仿真想定文件,獲取一個(gè)仿真對(duì)象實(shí)例節(jié)點(diǎn)的屬性變量名simattrname作為目標(biāo)屬性變量名、以及屬性值simattrvalue作為目標(biāo)屬性值;
s412.以目標(biāo)屬性變量名simattrname為key值、目標(biāo)屬性值simattrvalue為value值存入第一屬性變量哈希表h1中;
s413.循環(huán)執(zhí)行步驟s411、s412,直至解析完目標(biāo)仿真想定文件中所有仿真對(duì)象實(shí)例節(jié)點(diǎn)。
如圖6所示,本實(shí)施例步驟s4中將第二屬性信息(復(fù)雜屬性信息)存儲(chǔ)至第二屬性變量哈希表的具體步驟為:
s421.解析目標(biāo)想定文件,獲取一個(gè)仿真對(duì)象實(shí)例節(jié)點(diǎn)的屬性變量名attrname作為目標(biāo)屬性變量名、以及屬性值作為目標(biāo)屬性值attrvalue;
s422.判斷是否存在key值為目標(biāo)屬性變量名attrname的第二屬性變量哈希表,若不存在,則轉(zhuǎn)入執(zhí)行步驟s423,否則轉(zhuǎn)入執(zhí)行步驟s424;
s423.構(gòu)建仿真對(duì)象屬性容器vector,將目標(biāo)屬性值attrvalue插入構(gòu)建的仿真對(duì)象屬性容器vector,并將目標(biāo)屬性變量名attrvalue為key值、仿真對(duì)象屬性容器vector為value值,存入第二屬性變量哈希表h2中;
s424.在第二屬性變量哈希表h2中查找與目標(biāo)屬性變量名attrname對(duì)應(yīng)的仿真對(duì)象屬性容器vector,將目標(biāo)屬性值attrvalue插入仿真對(duì)象屬性容器vector中;
s425.循環(huán)執(zhí)行步驟s421~s424,直至解析完目標(biāo)想定文件中所有仿真對(duì)象實(shí)例節(jié)點(diǎn)。
以下以一具體實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步說(shuō)明。本實(shí)施例中想定文件具體包括仿真對(duì)象經(jīng)度、緯度等簡(jiǎn)單屬性信息和兩條航路集的復(fù)雜屬性信息,每一條航路集中存在多個(gè)航路點(diǎn)信息,航路點(diǎn)信息具體包括經(jīng)度、緯度、高度等子信息,仿真對(duì)象數(shù)據(jù)存儲(chǔ)的具體步驟為:
步驟1:解析想定文件至模擬實(shí)體節(jié)點(diǎn),讀取實(shí)體英文名為a以及實(shí)例號(hào)為1001,判斷是否存在以實(shí)體英文名a為key值的仿真對(duì)象類(lèi)哈希表class_instance_map,如果存在,將實(shí)例instance信息插入,如果不存在,新建以實(shí)體名a為key值的仿真對(duì)象類(lèi)哈希表class_instance_map并存入仿真對(duì)象類(lèi)信息;
步驟2:解析簡(jiǎn)單屬性集,獲取屬性英文名稱(chēng)longitude,取值為0.00000。以longitude為key值,0.00000為value值存入第一屬性變量哈希表中,循環(huán)處理至簡(jiǎn)單屬性集解析完畢,以“第一屬性”為key值,第一屬性變量哈希表為value值存入仿真對(duì)象屬性集哈希表;
步驟3:解析想定文件航跡集,解析航跡名稱(chēng)為“航跡線路一”,判斷是否存在key值為“航跡線路一”的仿真對(duì)象屬性集合哈希表typename_map,如果存在,則將屬性信息插入;如果不存在,則新建以“航跡線路一”為key值的仿真對(duì)象屬性集合哈希表typename_map并存入屬性信息。
步驟4:解析屬性細(xì)節(jié)節(jié)點(diǎn),解析得到名稱(chēng)為lon,取值為107,判斷以lon為key值的仿真對(duì)象屬性集合哈希表attribution_map是否存在,如果存在,將107插入容器vector中;
步驟5:循環(huán)處理至下一航路點(diǎn)中l(wèi)on屬性取值為108,則將108插入同一key值的存儲(chǔ)結(jié)構(gòu)中,即vector更新為<107,108>;解析下一節(jié)點(diǎn)時(shí)按照上述方式判斷并存儲(chǔ)相關(guān)數(shù)據(jù)信息,直至想定文件解析完畢。
本實(shí)施例中,采用上述方法將想定文件進(jìn)行解析后得到的存儲(chǔ)信息如下表所示:
表1:存儲(chǔ)信息表
上述只是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明作任何形式上的限制。雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均應(yīng)落在本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。