吳春江,周世杰,陳鵬飛
(電子科技大學(xué)信息與軟件工程學(xué)院 成都 610054)
隨著大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等新興技術(shù)的發(fā)展,智慧交通已成為智慧城市建設(shè)的關(guān)鍵環(huán)節(jié),面向智慧交通的虛擬仿真實驗也成為國家虛擬仿真實驗教學(xué)項目的重要組成部分。在城市管理、交通工程、交通運(yùn)輸?shù)葘I(yè)的教學(xué)實驗中,往往需要開展單路口、單道路、區(qū)域路網(wǎng)甚至城市路網(wǎng)的復(fù)雜交通實驗。然而,通過在實際交通環(huán)境中調(diào)整交通信號燈、改變路網(wǎng)結(jié)構(gòu)、增減車道數(shù)量等路網(wǎng)參數(shù)來開展以上實驗,成本高、影響大,絕大多數(shù)情況下不可行。為此,往往需要借助道路交通虛擬仿真系統(tǒng),運(yùn)用計算機(jī)仿真技術(shù),模擬道路交通復(fù)雜狀況,揭示交通流時空變化規(guī)律,有利于用戶掌握道路交通設(shè)計、預(yù)測、控制、誘導(dǎo)等知識與技術(shù)。
目前的交通仿真軟件如Aimsun next[1]、Trans Modeler[2]、 Paramics[3]、 Vissim[4]、 CORSIM[5]、Matsim[6]、MITSim[7]等都只是對具體場景進(jìn)行仿真,不能滿足虛擬仿真教學(xué)實驗需求,即使是開源的SUMO[8]也不支持實時在線仿真以及在指定路網(wǎng)中進(jìn)行不同類別的仿真實驗。
交通仿真作為計算機(jī)仿真的一個分支,起源于20世紀(jì)50年代[9],該技術(shù)能夠在計算機(jī)上實現(xiàn)對真實路網(wǎng)及車流狀況的模擬,用以對交通態(tài)勢隨時間和空間的變化進(jìn)行跟蹤描述。
本文對10個具有代表性的交通仿真系統(tǒng)從仿真類型、代碼開源、仿真功能、仿真地圖、車輛行為模型、在線仿真、仿真控制等幾個方面進(jìn)行比較,結(jié)果如表1所示。目前的交通仿真軟件[10-20]都只是對具體場景進(jìn)行仿真且功能較少,并不能滿足虛擬仿真教學(xué)實驗的要求,不支持實時在線仿真以及在指定路網(wǎng)中進(jìn)行不同類別的仿真實驗,并且這些仿真系統(tǒng)操作起來都非常復(fù)雜。
表1 交通仿真系統(tǒng)對比
針對以上這些問題,本文首次研究并設(shè)計了一種面向多用戶的微觀交通仿真實驗系統(tǒng)(http://its.uestc.cn),具體貢獻(xiàn)如下:
1)設(shè)計并實現(xiàn)了一種微觀交通仿真引擎,該仿真引擎具有消耗低、易擴(kuò)展等特點,支持獨立運(yùn)行和分布式通信;
2) 設(shè)計并實現(xiàn)了一種面向多用戶的微觀交通仿真實驗系統(tǒng),該系統(tǒng)采用分布式計算、分布式消息通信等技術(shù),支持多個仿真引擎、多個仿真任務(wù)并發(fā)執(zhí)行;
3) 本文對面向多用戶的微觀交通仿真實驗系統(tǒng)進(jìn)行了性能測試,測試結(jié)果表明微觀交通仿真引擎的性能與仿真車輛數(shù)和仿真加速比成正比,并且在單臺服務(wù)器上,該仿真實驗系統(tǒng)能夠支持多個仿真引擎、多個仿真任務(wù)的并發(fā)執(zhí)行。
本文所設(shè)計的一種面向多用戶的微觀交通仿真實驗系統(tǒng)的架構(gòu)如圖1所示。
圖1 面向多用戶的微觀交通仿真實驗系統(tǒng)架構(gòu)圖
在面向多用戶的微觀交通仿真實驗系統(tǒng)中,每個交通仿真引擎執(zhí)行獨立的仿真任務(wù),各個仿真引擎之間相互獨立、互不干擾。單臺仿真引擎服務(wù)器可以創(chuàng)建出多個仿真引擎,支持多個仿真任務(wù)的并發(fā)執(zhí)行。再通過分布式計算技術(shù)和分布式消息通信機(jī)制,將多臺仿真引擎服務(wù)器進(jìn)行統(tǒng)一管理,實現(xiàn)對每臺服務(wù)器上的每個仿真引擎的統(tǒng)一管理。通過仿真引擎服務(wù)器數(shù)量的增加,可以實現(xiàn)更多仿真引擎的管理與并行計算,達(dá)到面向多用戶的交通仿真任務(wù)并發(fā)執(zhí)行的目的。
本文所設(shè)計的面向多用戶的微觀交通仿真實驗系統(tǒng),以仿真任務(wù)為功能單元,每個仿真引擎執(zhí)行獨立的仿真任務(wù),各個仿真引擎之間相互獨立、互不干擾,再通過微觀交通仿真實驗系統(tǒng)統(tǒng)一的任務(wù)調(diào)度和仿真引擎管理,創(chuàng)建多個仿真引擎執(zhí)行不同的仿真任務(wù),從而實現(xiàn)面向多用戶的并發(fā)仿真任務(wù)。
如圖2所示,在面向多用戶的微觀交通仿真實驗系統(tǒng)中,每個仿真引擎都是一個獨立的進(jìn)程或安裝在Docker容器中,仿真引擎管理模塊負(fù)責(zé)仿真引擎進(jìn)程或Docker容器的創(chuàng)建及回收。
圖2 仿真引擎集群示意圖
當(dāng)有新的仿真任務(wù)創(chuàng)建時,仿真引擎管理模塊會根據(jù)仿真任務(wù)的規(guī)模來預(yù)估仿真任務(wù)所需要的計算資源。如果系統(tǒng)中空閑的計算資源滿足仿真任務(wù)的需要,仿真引擎管理模塊則會分配一個仿真引擎去執(zhí)行仿真任務(wù)。如果系統(tǒng)中沒有足夠的計算資源,仿真引擎管理模塊首先會將仿真任務(wù)放到等待隊列中,等待其他仿真任務(wù)執(zhí)行結(jié)束釋放出足夠的計算資源,再分配一個仿真引擎去執(zhí)行該仿真任務(wù)。等待隊列中的仿真任務(wù)按照先來先得的順序分配仿真引擎和計算資源。并且,根據(jù)前面所設(shè)計的系統(tǒng)架構(gòu),本文設(shè)計的實驗系統(tǒng)可以通過增加仿真引擎服務(wù)器的數(shù)量來擴(kuò)展計算資源,用以滿足多個不同規(guī)模仿真任務(wù)的運(yùn)行需求。
本文所設(shè)計的面向多用戶的微觀交通仿真實驗系統(tǒng)采用kafka作為任務(wù)管理端和仿真引擎之間的通信方式,以滿足高吞吐量的分布式消息通信。
當(dāng)仿真引擎和計算資源分配成功后,任務(wù)管理模塊會將創(chuàng)建仿真任務(wù)需要的參數(shù)數(shù)據(jù)放入kafka消息隊列當(dāng)中,仿真引擎會從kafka消息隊列中獲取參數(shù)數(shù)據(jù),進(jìn)行任務(wù)創(chuàng)建。同時,仿真引擎在執(zhí)行完一定步數(shù)的仿真計算后,也會將仿真結(jié)果放入kafka隊列中,以供仿真總控端提取仿真數(shù)據(jù),如圖3所示。
圖3 分布式交通仿真引擎消息通信
在面向多用戶的微觀交通仿真實驗系統(tǒng)中,仿真數(shù)據(jù)分為車輛仿真數(shù)據(jù)和信號燈仿真數(shù)據(jù)。為了區(qū)分這兩種實驗數(shù)據(jù),仿真引擎在發(fā)送到kafka隊列的時候,會對數(shù)據(jù)加以處理,對于車輛仿真數(shù)據(jù),數(shù)據(jù)是以“vehicle_”加上16位的仿真ID號組成;對于信號燈數(shù)據(jù),數(shù)據(jù)是以“phase_”加上16位的仿真ID號組成。當(dāng)kafka隊列收到這些數(shù)據(jù)之后,可以通過數(shù)據(jù)的標(biāo)志進(jìn)行車輛仿真數(shù)據(jù)和信號燈仿真數(shù)據(jù)的判斷。
根據(jù)本文所提出的微觀交通仿真實驗系統(tǒng)設(shè)計思路,需要達(dá)到面向多用戶并發(fā)執(zhí)行仿真任務(wù)的目的,為此,本文首先對該微觀交通仿真實驗系統(tǒng)進(jìn)行性能分析。
根據(jù)所描述的仿真引擎設(shè)計,在本文微觀交通仿真引擎設(shè)計中,所有仿真車輛的每一步仿真計算方式都是相同的。由此可以分析出,本文所設(shè)計的微觀交通仿真引擎的計算消耗與仿真車輛數(shù)強(qiáng)相關(guān),仿真車輛數(shù)越大,每一步仿真計算的消耗就越大,其時間復(fù)雜度為step×O(n),其中,step為仿真加速比(即仿真步數(shù)),n為仿真車輛數(shù)。同時,在本文所設(shè)計的微觀交通仿真引擎中,每個仿真車輛占用的內(nèi)存為100 B左右,100萬仿真車輛占用的內(nèi)存僅100 M。
根據(jù)以上分析,本文所設(shè)計的微觀交通仿真引擎對CPU的計算消耗需求大,對內(nèi)存的消耗可忽略不計。同時,本文所設(shè)計的微觀交通仿真引擎的計算時間復(fù)雜度為step×O(n),即與仿真加速比和仿真車輛數(shù)相關(guān)。因此,本文設(shè)計了單仿真引擎仿真車輛數(shù)變化、單仿真引擎仿真加速比變化和多仿真引擎并發(fā)執(zhí)行3種實驗來測試性能。
本文所設(shè)計的微觀交通仿真引擎性能測試的實驗環(huán)境如表2所示。
表2 微觀交通仿真引擎性能測試實驗環(huán)境
單仿真引擎仿真車輛數(shù)變化主要測試仿真車輛數(shù)對計算資源的消耗。本文選取雙向8車道的9個十字路口地圖作為仿真地圖,該仿真地圖的最大容量為2 400輛仿真車輛。在單仿真引擎仿真車輛數(shù)測試實驗中,車輛生成速率設(shè)置為50,仿真加速比固定設(shè)置為20,通過仿真車輛數(shù)的變化觀察單仿真引擎的CPU資源消耗變化。測試結(jié)果如表3、圖4、圖5、圖6所示。
圖4 仿真車輛數(shù)變化
圖5 隨仿真車輛數(shù)的CPU占用率
圖6 隨仿真車輛數(shù)變化的計算耗時
表3 單仿真引擎仿真車輛數(shù)性能測試
可以看出,隨著仿真車輛數(shù)的增加,單仿真引擎所占用的CPU與仿真計算耗時也隨之增加,增長趨勢基本相符,與仿真引擎的性能分析結(jié)果一致。
單仿真引擎仿真加速比主要測試仿真加速比對仿真計算資源的消耗。本文選取雙向8車道的十字路口地圖作為仿真地圖,該仿真地圖的最大容量為380輛仿真車輛。實驗中,仿真車輛生成速率設(shè)置為50,當(dāng)仿真車輛數(shù)達(dá)到仿真地圖最大容量時,通過調(diào)整仿真加速比來觀察CPU資源消耗的情況。測試結(jié)果如表4、圖7、圖8所示。
表4 單仿真引擎仿真加速比變化性能測試
圖7 隨仿真加速比變化的CPU占用率
從表4、圖7、圖8所展示的結(jié)果可以看出,隨著仿真加速比的增加,單仿真引擎所占用的CPU與仿真計算耗時也隨之增加,與仿真引擎的性能分析結(jié)果一致。
圖8 隨仿真加速比變化的計算耗時
本文在如表2所示的單臺服務(wù)器上,對面向多用戶的微觀交通仿真實驗系統(tǒng)進(jìn)行了多仿真引擎并發(fā)執(zhí)行的性能測試。本文選取雙向8車道的單十字路口地圖作為仿真地圖,該仿真地圖的最大容量為380輛仿真車輛,通過對仿真引擎數(shù)的增加來觀察仿真任務(wù)并發(fā)執(zhí)行數(shù)對服務(wù)器CPU資源消耗的影響,測試結(jié)果如表5、圖9所示。
表5 多仿真引擎并發(fā)執(zhí)行性能測試
圖9 多仿真引擎并發(fā)執(zhí)行的CPU占用率
從表5、圖9所展示的結(jié)果可以看出,在無仿真任務(wù)和仿真任務(wù)并發(fā)執(zhí)行的情況下,CPU占用率與仿真引擎的數(shù)量成線性比例增長。在單臺服務(wù)器上,本文所實現(xiàn)的一種面向多用戶的微觀交通仿真系統(tǒng)可以支持多個仿真引擎、多個仿真任務(wù)的并發(fā)執(zhí)行。并且,還可以通過增加服務(wù)器的數(shù)量來支持更多的仿真任務(wù)并發(fā)執(zhí)行。
同時,由于仿真引擎只有在請求仿真任務(wù)的時候才會增加對CPU的消耗,而且仿真任務(wù)的執(zhí)行時長是根據(jù)仿真請求步數(shù)確定的,不會無限地執(zhí)行下去,會有一定的空閑期。因此,在實際的應(yīng)用過程中,出現(xiàn)多個仿真任務(wù)并發(fā)執(zhí)行的情況相對較少,從理論上講,單臺服務(wù)器可以支持更多的仿真引擎和仿真任務(wù)執(zhí)行。
本文從仿真類型、代碼開源、仿真功能、在線仿真、仿真控制等幾個方面對多種交通仿真系統(tǒng)進(jìn)行了橫向比較。其次,針對道路交通虛擬仿真實驗的多用戶、多并發(fā)、可操作等特性,提出了一種面向多用戶的微觀交通仿真實驗系統(tǒng),并從系統(tǒng)架構(gòu)和仿真引擎方面對該仿真系統(tǒng)進(jìn)行了設(shè)計。最后,對面向多用戶的微觀交通仿真實驗系統(tǒng)的性能進(jìn)行了分析,并從單仿真引擎仿真車輛數(shù)變化、單仿真引擎仿真加速比變化和多仿真引擎并發(fā)執(zhí)行3個方面對該系統(tǒng)進(jìn)行了測試。測試結(jié)果表明,本文所實現(xiàn)的一種面向多用戶的微觀交通仿真系統(tǒng)可以支持多個仿真引擎、多個仿真任務(wù)的并發(fā)執(zhí)行,并且可以通過增加服務(wù)器的數(shù)量來支持更多的仿真任務(wù)并發(fā)執(zhí)行,能夠滿足多用戶的同時在線仿真需求。