田朝暉,陳 清,石 暢
(中國電子科技集團公司第二十八研究所,江蘇南京 210007)
目前很多大型軟件系統(tǒng)采用引擎式設計,例如搜索系統(tǒng)的搜索引擎[1]、游戲系統(tǒng)的游戲引擎[2]、殺毒軟件的殺毒引擎等,它們都是將核心基礎功能抽離出來形成一個被稱為引擎的通用部件,實現(xiàn)組件式開發(fā)與集成、控制系統(tǒng)的運轉?;谝?,研發(fā)人員可以較為容易地制作相應的軟件產(chǎn)品,而不必把資源浪費在重復的基礎功能實現(xiàn)上。在推演軟件研究方面,一些較為合理的系統(tǒng)[3]、框架[4]設計方案被提出,文章以滿足指揮信息系統(tǒng)的需求[5]為目標,分布式設計參考數(shù)據(jù)-業(yè)務-協(xié)作架構[6]。
推演模型中的車輛、飛行器、坦克等作戰(zhàn)單元模型都可視為對現(xiàn)實物體的模擬稱實體,記為o。
實體模型在推演中的某一時刻有具有它的狀態(tài),使用實體屬性進行描述,將屬性值表示為時間函數(shù)記為p(t),其中t為推演時間,將實體狀態(tài)記為So(t),因此:
將模擬世界本身也視作一個實體并包含屬性值,將整個推演模擬世界記為W,世界狀態(tài)由世界本身屬性與所屬組成實體屬性組成,有:
Sw(t)是時間連續(xù)映射,世界狀態(tài)的第tn時刻取值Sw(tn)確定了該時刻的世界靜態(tài)信息,Sw(tn)的所包含的信息可唯一確定一個用于計算機屏幕顯示的靜態(tài)圖像。我們把Sw(tn)的值稱為邏輯幀,把由邏輯幀所確定的靜態(tài)圖像稱為顯示幀,一個邏輯幀為引擎對時間連續(xù)的世界狀態(tài)的一次采樣。
用一類消息表示導致實體狀態(tài)轉換的作用,在數(shù)學上對應一個映射,記為e,tn時刻作用于某實體的e使得實體值變換為tn+1時刻的相應屬性新值,故有:
將tn時刻的模擬世界消息全集記作E,有E={e1,e2,…,eN},于是引擎邏輯幀推進模型有:tn+1-tn的值稱為模擬推演時間步長記作Tstep,Tstep對應的真實時長稱為邏輯幀周期記作TL,兩個顯示幀之間的真實時長稱作顯示幀周期記為Ts。
推演引擎的核心功能為使模擬世界狀態(tài)按預定時間步長推進。
推演系統(tǒng)中各個模擬對象以預設的運動模型、行為模式與規(guī)則、預設條件等內容根據(jù)當前模擬時刻的實時狀態(tài)生成各類消息,通過消息中心驅動推演邏輯幀更新實現(xiàn)模擬世界狀態(tài)更新。
將消息封裝為對象,依據(jù)關注事情的不同將消息劃分為不同的類型進行相應地處理。在每一個循環(huán)開始,各組件由當前的邏輯幀為初始條件,根據(jù)各自的規(guī)則模式生成相關消息送入消息中間件,在消息分發(fā)與處理結果匯總過程中采用了分治策略的Fork/Join設計,使得處理過程支持并行計算,從而提升推演效率,推演引擎工作流程如圖1所示。
圖1 推演引擎工作流程
時間推進方式采用等模擬時間步長的方式,即每一輪推演循環(huán)使得推演模擬時間遞增一個預設步長來控制推演過程。即有tn+1=tn+Tstep,這使得推演時間值與現(xiàn)實時間脫離直接關聯(lián),控制推演速率僅需要在推演循環(huán)中加入等待時長參數(shù)即可控制推演速率。因為顯示幀數(shù)據(jù)提取自邏輯幀,邏輯幀未變化時更新顯示幀沒有意義,因此顯示幀周期在max(20毫秒,Tstep)即可滿足視覺需求(假定顯示幀率上限設置為50 Hz)。幀率控制算法流程如下所示。
0.開始
1.設定邏輯幀周期為TL,設定顯示幀周期為Ts,定義變量t0=0,ts0=0;
2.更新邏輯幀獲取當前系統(tǒng)時間戳為t1,當t1-t0>TL時設置t0=t1,進入步驟4,否則進入步驟3;
3.推演循環(huán)線程等待TL-(t1-t0);
4.獲取當前系統(tǒng)時間戳為ts1,當ts1-ts0>Ts時更新顯示幀緩沖、設置ts0=ts1;推演幀內數(shù)據(jù)處理、消息分發(fā)、狀態(tài)更新等操作;
5.判斷推演是否結束,是則進入步驟6,否則回到步驟2;
6.結束。
圖2 推演引擎分布式結構
分布式結構如圖2所示,引擎的消息中間件需要維護全系統(tǒng)組件引用,因此各節(jié)點需要向消息調度模塊注冊自身,例如一個模擬飛行器實體組件可以簡單地向注冊服務注冊自身加入推演系統(tǒng),參與收發(fā)消息。模擬實體組件采用獨立節(jié)點部署并注冊至消息調度與服務中心,通過遠程過程調用(RPC方式)獲取數(shù)據(jù),通過消息系統(tǒng)更新狀態(tài)和發(fā)送信息。采用這種設計方式,可以配置化實現(xiàn)組件在系統(tǒng)的加入和移除,實現(xiàn)推演系統(tǒng)的可伸縮與模塊間低耦合。
針對推演引擎的基本特點,節(jié)點數(shù)據(jù)同步策略采用邏輯幀同步,使得系統(tǒng)在一個邏輯幀周期上實現(xiàn)最終一致性,即在邏輯幀開始,過程管理系統(tǒng)將邏輯幀分發(fā)至全節(jié)點,在邏輯幀結束過程管理系統(tǒng)接收全節(jié)點的數(shù)據(jù),匯總處理生成下一邏輯幀,保證在一個新邏輯幀開始后全系統(tǒng)的狀態(tài)基準最終一致,具體同步過程如圖3所示。
圖3 推演引擎邏輯幀同步過程示意
本文所述的方案推演引擎是推演系統(tǒng)中與推演案例無直接相關的基礎結構,它協(xié)調控制系統(tǒng)的各組件,根據(jù)預設規(guī)則及可配置的參數(shù)逐步推進模擬世界實體組態(tài),其中狀態(tài)更新采用消息驅動,并在狀態(tài)演進處理中應用了分治算法使得系統(tǒng)支持并行計算,在功能劃分與部署上采用分布式設計,這使得系統(tǒng)具備可伸縮性與分布式并行計算的能力。這里僅分析研究了推演引擎的核心部分,實現(xiàn)完整的推演引擎還有很多內容有待研究。