倪仲銳 劉 箴 劉婷婷 陸 靜 柴艷杰
1(寧波大學信息科學與工程學院 浙江 寧波 315211) 2(寧波大學科學技術學院 浙江 寧波 315211)
人群疏散仿真模型可以模擬人群疏散現象,通過人群疏散仿真模型的仿真數據可以判斷場景中出口數量和位置是否合理,是否滿足人群疏散的要求,從而為制定科學合理的疏散方案提供決策支持。目前常見的仿真模型主要有社會力模型SFM(Social Force Model)[1-3],元胞自動機模型CA(Cellular Automata)[4-6],勢能場模型PF(Potential Field)[7-8]等。這些模型都可以實現人群的疏散仿真。
其中社會力模型是由Helbing 等[1]1951年提出, 該模型采用牛頓動力學公式來描述行人的運動, 將行人的受力分別表示為,行人指向目的地的驅動力、行人之間的作用力、行人與障礙物之間的作用力,這些力的合力作用于行人,使行人產生運動。
元胞自動機模型的概念最早是由馮諾依曼[9]提出,應用于模擬人工生命系統(tǒng)。1998年M Fukui等[10]將元胞自動機模型應用于人群的仿真,在該模型中行人的空間被劃分為多個元胞空間,每個元胞空間具有一定的狀態(tài)規(guī)則,行人依據當前的元胞空間和狀態(tài)規(guī)則來進行移動。
勢能場模型由Khatib等[7]在1986 年提出應用于機器人避碰路徑規(guī)劃。在勢能場模型中,行人位于空間中的某個位置中,行人會同時受到目的地、其他行人、障礙物的勢能場影響。在這些勢能場的相互作用下,行人就會在空間進行運動。
其中社會力模型應用最為廣泛,該模型在人群疏散仿真中有廣泛的研究,如Yang X等[11]通過改進的社會力模型對人群的運動進行向導。Liu Q等[12]利用社會力量模型仿真恐怖襲擊中人群疏散。紀慶革等[13]提出密度場下的短程社會力模型。劉箴等[14]利用社會力模型研究人行橋上突發(fā)事件下的人群恐慌行為。張開冉等[15]基于社會力模型的車站負重人群疏散模擬研究。焦宇陽等[16]通過引入下降速度心理力,改進傳統(tǒng)社會力模型,實現三維樓梯空間的社會力模型。曲昭偉等[17]利用行人的隨機行為改進社會力模型。
雖然社會力模型已經有廣泛的應用,但是也存在一些不足,本文在實現社會力模型的基礎上,對不足之處進行了改進。例如在行人的期望速度過快或者場景中行人的數量過多時會出現行人的抖動或者穿透障礙物的現象,這些現象影響到仿真的效果,本文對產生的這種現象的原因進行了分析,采用多線程的方法進行了優(yōu)化。在特殊場景下,僅依靠社會力的驅動時,行人在場景中無法到達目的地或者移動速度較慢,本文采用增加導航點的方式改進行人的疏散仿真。本文通過改進的社會力模型開發(fā)了一個疏散仿真軟件,實現多種情景下的人群疏散仿真。
在實際的逃生過程中,人們總是會根據自身的目的地和所處的周圍環(huán)境來確定逃生路線。在逃生過程中會與障礙物和其他人保持一定的距離,由于觀察到這個現象,在1995年Helbing等采用牛頓的力學公式和行人的逃生行為提出了社會力模型。在該模型中行人用抽象的一個粒子來描述,該粒子受到目的地的吸引產生一個自身的驅動力,同時該粒子受到與障礙物和其他粒子的斥力和摩檫力的影響,在這些力的合力作用于該粒子,使得其在一個二維的空間中連續(xù)運動,具體使用動力學公式來描述:
(1)
式中:fi為行人指向目的地的驅動力,fij表示為行人間的作用力,fiw表示行人與障礙物間的作用力。 這些力的合力作用于行人, 產生一個加速度,驅動行人在二維空間中連續(xù)運動。
(2)
fij=frejectij+ffrictionij
(3)
frejectij={Aiexp[(rij-dij)/Bi]+kg(rij-dij)}nij
(4)
(5)
fiw=frejectiw+ffrictioniw
(6)
frejectiw={Aiexp[(ri-diw)/Bi]+kg(ri-diw)}niw
(7)
ffrictioniw=kg(ri-diw)(vi·tiw)tiw
(8)
式(6)-式(8)為行人和障礙物間作用力公式,行人和障礙物間的作用fiw力由排斥力frejectiw和摩檫力ffrictioniw組成,其中式(7)的Ai、Bi、k為常數量數值同上。ri表示行人i的半徑,diw表示行人i和障礙物邊緣的距離,niw表示由障礙物邊緣到行人i的標準化向量。式(8)中vi表示行人i的實際速率,tiw表示行人i與障礙物邊緣的切線方向。
通過社會力模型可以實現對人群疏散的仿真,在仿真的過程中行人可以避免相互碰撞,避開障礙物,本文采用該模型實現一個人群疏散仿真系統(tǒng)。
本文基于社會力模型實現了疏散仿真,實現算法流程圖如圖1所示。通過該算法實現了社會力模型,可以驅動人群在場景中的疏散仿真,該算法在行人期望速度1.5 m/s,行人數量不超過200個的情況下可以較為流暢地仿真,仿真效果較好。但是隨著行人的期望速度和行人的數量增加,仿真過程中行人會出現抖動和穿透障礙物的現象,這種現象影響到了仿真的真實感。這個問題是需要通過一些優(yōu)化方法來解決。
圖1 社會力模型算法流程圖
對行人抖動和穿透現象對比分析,發(fā)現產生這個現象的原因是由兩個因素產生的,期望速度和仿真時兩幀間隔時間,在仿真過程要實時計算每個行人的下一幀位置,可以通過下式來表示獲得下一幀的位置。
pn=pc+vt·Δt
(9)
式中:pn為下一幀的位置向量,pc為當前幀的位置向量,vt為根據社會力模型計算出的當前幀速度向量,Δt為下一幀同當前幀的時間間隔。其中vi與行人的期望速度成正比關系,Δt與計算機的性能和算法的時間復雜度有關系。本算法的時間復雜度為n2,其中n為仿真的人數。當仿真人數較少時,Δt每幀的計算量較少,的數值較小,計算出來的pn的偏移量就會較少,仿真就會平滑。但如果人數較多,Δt就會增大,那么計算出的pn就會過度地偏離pc,這樣在仿真中就會產生抖動,由于偏離較大就可能會越過障礙物的邊緣位置而產生穿透現象。同樣如果vi過大也會產生這種現象。為了解決這個問題,就要減小pn相對于pc的偏移,這樣才能使行人的運動軌跡趨向平滑。最直接的辦法就是降低vi,但是考慮到仿真逃生的要求,行人必須以一定的速度逃生才接近真實情況,vi不能太小,必須符合實際的逃生期望速度,因此只能降低Δt。只要當Δt足夠小,那么計算出來的pn就不會過度地偏離pc,從而解決問題。
經過分析社會力模型的算法,發(fā)現在計算每個行人的社會力時,行人之間是相互獨立的,因此這部分可以采用多線程并行計算來進行優(yōu)化。本文把行人平均分割成若干個組,每個組內的行人通過一個線程來計算社會力,這樣就可以并行計算社會力,提高效率降低幀間隔時間。同時也可以把仿真顯示這部分通過一個線程運行,以此提高效率。優(yōu)化后的算法流程圖如圖2所示。
圖2 采用多線程優(yōu)化社會力模型算法流程圖
社會力模型采用多線程的算法優(yōu)化后,仿真的效果流暢,行人的抖動現象和穿透現象有了較大的改善。對優(yōu)化前后的幀間隔時間進行了統(tǒng)計,對比數據如表1所示,其中行人的期望速度為1.5 m/s,采用不同的仿真人數進行對比,優(yōu)化采用8個線程數。
表1 優(yōu)化前后的幀間隔對比
從表1中可以看出,采用了多線程優(yōu)化的算法后,幀間隔時間大幅降低,仿真的效果提高,可見采用多線程優(yōu)化社會力模型可以有效提升仿真的速度和數量。
為了對比線程數量對仿真效果的影響,在表2采用不同線程數統(tǒng)計的幀間隔時間。其中行人的期望速度為1.5 m/s,行人的數量為400個。
表2 不同線程數量的對比
從表2中可以看出,隨著線程數量的增加,幀間隔時間也在減少,但是并不是線程數量越多,時間會減少得越多,因為這個和實際的CPU核心數量有關系。當線程的數量超過實際核心數量時,就會存在部分線程串行執(zhí)行的情況。當線程過多時,系統(tǒng)還要處理線程的切換,這時就不一定能夠降低時間。
可見通過采用多線程優(yōu)化的方法,可以解決社會力模型仿真中的抖動和穿透現象,提高仿真的效果。
在社會力模型中,行人會在目的地驅動力的作用下,向出口方向逃生,在一般的場景中社會力可以較好地完成行人的疏散仿真,但在特定的場景中,疏散的過程就會存在問題。如行人不能夠沿著正確的路徑疏散,行人在疏散過程中移動速度過慢,這些問題會影響仿真的效果。
社會力模型是通過對行人的目的地驅動力,行人間作用力和障礙物作用力三者累加的合力來使行人移動,但是如果在場景中的某個位置產生的合力互相抵消,那么行人就無法移動,不能完成疏散。如圖3所示。
圖3 行人無法疏散示意圖
在該場景中,小球A、B、C表示行人的初始位置,小球D表示目的地,矩形表示障礙物。小球A和C可以沿著虛線的軌跡移動到目的地,但是小球B移動到小球B’的位置后就靜止,因為在該位置的合力互相抵消,就無法移動。因此僅通過社會力模型,在特殊的場景中就無法完成疏散仿真。
社會力模型中的目的地驅動力始終是指向目的地,當遇到障礙物時,就會使行人的速度變慢,隨著行人運動方向與目的地方向夾角的增大,行人的速度會更加緩慢,如圖4所示。
圖4 行人移動過慢示意圖
在圖中行人A全程以期望速度進行疏散,但是行人B只是在虛線段op和qr之間是以期望速度運行,而在pq之間由于受到障礙物的阻擋速度變慢,并且在從p到q的過程中由于夾角θ的變大而導致速度是越來越慢。實際上行人A距離目的地比行人B還要遠,但是仿真的結果卻是A先抵達目的地,仿真效果不符合實際情況。
上述兩種問題產生的原因是行人的目的地設置的不合理,為了解決這些問題,可以在場景增加一些導航點,幫助行人在疏散過程中合理選擇路徑。這些導航點可以依據場景的布局合理選擇,每個導航點賦予一個導航因子,該因子表明該導航點距離目的地的遠近程度。該因子采用導航點與目的地的曼哈頓距離的倒數來表示,計算公式如下:
(10)
式中:nax、nay是導航點的坐標,ex、ey是目的地的坐標,行人在場景中選擇導航點的規(guī)則是選擇滿足一定距離內導航因子最大的導航點作為目的地,這樣行人就可以在場景中按照合理的路徑完成疏散,避免了上述問題。在上述場景中增加導航點如圖5所示,增加導航點后行人就不會出現無法移動和移動過慢的問題。
圖5 增加導航點示意圖
在場景中增加了黑色的導航點后,行人的疏散軌跡會沿著導航點行進,不會出現移動過慢的問題,通過這種方法可以有效改善仿真的合理性。
社會力模型主要考慮行人在運動過程中所受到的各種力的因素,而沒有考慮行人在心理、生理上的因素。人群在疏散過程中,由于行人個體因素的差異,每個行人的期望速度是不一致的,主要和每個行人的心理行為和健康狀況有關系,這些因素會影響人群的整體逃生時間。因此將行人的心理、生理因素增加到社會力模型中可以使仿真更加完善。
心理行為采用行人對當前狀況的恐慌程度來表示,恐慌程度越大,行人的期望速度就會越快,反之就會越慢。行人的恐慌程度與距離出口的遠近有關系,當行人距離出口較遠時恐慌程度較高,反之恐慌程度較低。采用恐慌值P來表示行人的恐慌程度,P的取值范圍為[0,1],計算方法如下:
(11)
式中:Dexit為當前行人位置距離出口點的曼哈頓距離,Dmax為當場景中距離出口點的最遠曼哈頓距離。
健康狀況采用健康值H來表示,H的取值范圍為[0.5,1.5],健康值越高,行人的期望速度越高,反之期望速度越低。健康值為1的行人表示體力正常,大于1的行人表示體力較好,小于1的行人表示體力較差。采用不同的健康值分布來仿真不同健康值構成的人群逃生。
行人的期望速度和恐慌值和健康值相關,期望速度計算方法如下:
VE=(VS+VS×P)×H
(12)
式中:VE為當前行人的期望速度,VS為標準的期望速度,取值為3 m/s。通過該公式可以使行人的個體因素對期望速度產生影響,使仿真效果趨于合理。
軟件開發(fā)環(huán)境采用Microsoft Visual Studio 2017,開發(fā)語言采用C#,項目類型為Windows窗體應用,圖形設備接口采用雙緩沖技術的GDI接口。
軟件主界面如圖6所示。
圖6 仿真實驗界面
該界面左側為仿真區(qū)域,其中矩形框表示障礙物,圓形表示行人。界面的右側為操作界面,主要功能有參數設置、地震仿真、生成日志、生成軌跡線等,其中參數設置包括有行人數量、期望速度、導航方式,場景出口方向、位置及寬度、并行線程數量等。在仿真結束后可以生成每個行人的疏散數據, 包括每個行人的疏散時間,每個時間疏散的行人數量,繪制疏散軌跡線,還可以使用這些數據用于仿真分析統(tǒng)計。
為了保持良好的軟件結構,本軟件的核心功能采用類來進行編寫,主要類的描述如表3-表5所示。
表3 社會力模型類
續(xù)表3
表4 向量計算類
表5 行人仿真類
在由復雜的多邊形障礙物構成的場景中,實現行人對障礙物避碰算法,算法如下:
輸入:
行人集合A
多邊形頂點集合O
步驟:
Step1循環(huán)行人集合A
Step2循環(huán)多邊形頂點集合O
Step3計算Ai當前位置分別與Oi中相鄰兩個頂點組成邊E的最短距離D
Step4計算出該最短距離D在邊E上的相交點C
Step5找出最短距離D中的最小值,將對應的相交點C作為計算社會力的避碰點
Step6根據該避碰點計算社會力
仿真實驗環(huán)境是操作系統(tǒng)Windows 10,主頻為2.3 GHz,內存容量為8 GB。在仿真實驗中,仿真場景中的1個像素表示實際場景中的0.1 m,商場場景區(qū)域為120×60 m,行人的半徑為0.4 m,在場景中隨機均勻分布。行人未疏散狀態(tài)時的期望速度為1.5 m/s,疏散狀態(tài)時標準期望速度為3 m/s,出口的寬度為6 m。
仿真過程中默認的導航方式采用目的地點的方式,本文稱這種方式為原始社會力導航,為了對比疏散效果,部分場景導航方式為導航點的方式。該商場場景布局如圖7所示,其中矩形框為障礙物,圓形為導航點,這樣分布的導航點可以使行人在場景中完成疏散,避免行人緊貼障礙物移動。本文設計多種不同的情景模式來仿真人群的疏散實驗,每種情景實驗重復5次,對仿真結果進行分析對比。
圖7 商場場景布局圖
為對比不同線程數量仿真時間的真實性,在場景、行人位置相同的情況下,進行實時仿真和數值仿真的對比,導航方式為原始社會力導航,出口的寬度為6 m。數值仿真是直接設定固定的每次計算社會力的間隔時間,設置間隔時間為0.005 s,計算出來的仿真時間作為基準時間。進行了4組的數值仿真,并與實時仿真進行對比,對比結果如表6-表9所示。
表6 行人200人的仿真對比
表7 行人320人的仿真對比
表8 行人400人的仿真對比
表9 行人480人的仿真對比
通過實驗數據可以看出,在200人和320人的仿真情況下,實時仿真和數值仿真的疏散時間基本相同,在實時仿真中采用不同線程數量的仿真時間也基本一致。在400人和480人的仿真情況下,單線程的實時仿真的疏散時間就會偏離數值仿真的時間,而且人數越多偏離越大,且仿真效果也不佳。但隨著仿真的線程數量的增多,仿真疏散時間會接近數值仿真的時間,且仿真效果較好。
單線程在仿真時,當人數較少時,計算量會較少,同時每幀的間隔時間較短,行人沒有抖動現象,這時的疏散時間同數值仿真時間基本一致。當人數較多時,計算量會加大,每幀的間隔時間較長,會導致行人產生抖動現象,這增加了行人疏散的距離,也對行人的疏散有很大的阻擋作用,從而增加總體的疏散時間。采用單線程時會發(fā)生行人穿透障礙物的現象,使仿真效果不合理。從軌跡線圖中可以看出,圖8(a)的軌跡線相對于圖8(b)的軌跡線清晰,而圖8(b)的軌跡線由于行人的抖動而產生了較多的噪聲。
通過該組實驗,可以看出采用多線程可以彌補單線程的不足,可以提高實時仿真的效果,使疏散時間更具有可信性。
(a) (b)圖8 不同線程數量不同對比
仿真人數為300人,線程數量為8個,導航方式分別為原始社會力導航和導航點。
通過對比疏散時間數據,其中原始社會力導航平均疏散時間為39.2 s,導航點的為35.6 s,使用導航點仿真行人的疏散時間會降低3.6 s,原因從圖9(a)中可以看出是使用導航點導航時行人避免行走在障礙物的邊緣位置,這樣在疏散過程中是以期望速度疏散,不會出現移動緩慢現象,更加接近真實情況。而在圖9(b)中,行人在疏散過程中存在貼近障礙物邊緣行走的情況,這樣就會出現移動緩慢,導致疏散時間變長。
(a) (b)圖9 導航方式不同的仿真
圖10的軌跡線也可以看出圖10(a)的疏散軌跡盡量避開障礙物的邊緣。而圖10(b)中由于行人是直接指向出口點進行疏散的,必然會貼近障礙物移動??梢姴捎煤侠淼膶Ш近c方式進行疏散仿真可以使行人的疏散軌跡更加趨于合理,完善疏散仿真效果。
(a) (b)圖10 導航方式不同的軌跡線
為了使仿真軟件適應不同障礙物場景,在場景中實現了可以任意增加多邊形作為障礙物,如矩形、三角形、菱形、五邊形、六邊形等,可以靈活地布局障礙物,滿足不同場景疏散仿真的要求。本節(jié)實驗設計一個游戲場館的場景,用不同多邊形表示游戲區(qū)域,選擇一些關鍵的節(jié)點作為導航點進行疏散仿真實驗,游戲場館場景的布局圖如圖11所示,其中多邊形為障礙物,圓形為導航點。
圖11 游戲場館場景布局圖
在場景中隨機分布行人,行人的期望速度為3 m/s,出口的寬度為6 m,采用8線程分布進行了200人、320人、400人和480人的疏散仿真,圖12(a)是仿真效果,圖12(b)是疏散軌跡線。不同行人數量的疏散仿真時間對比如表10所示。通過不同的多邊形組合可以創(chuàng)建出不同的場景類型,滿足對多種場景仿真實驗的要求。
(a) (b)圖12 游戲場館場景仿真
表10 疏散仿真時間對比
上述實驗中行人的逃生速度就是期望速度,但在疏散過程中由于行人的恐慌程度和健康程度區(qū)別,逃生速度存在較大的差異。本節(jié)實驗采用商場場景,400個行人,線程數量8個,導航方式采用導航點方式,結合行人的恐慌值和健康值??紤]到仿真的總體疏散時間由最后逃生的行人決定,而行人的健康值是隨機分布,這樣導致整體的疏散時間有一定的隨機性,為了減少隨機性的影響,采用場景中90%的行人完成疏散的時間作為比較依據,疏散時間對比如表11所示。
實驗中恐慌值和健康值依照如下設置:
實驗1不采用恐慌值和健康值;
實驗2、實驗3、實驗4采用恐慌值和健康值;
實驗2健康值在[0.5,1.5]均勻分布;
實驗3健康值在[0.5,1]占40%,在(1,1.5]占60%;
實驗4健康值在[0.5,1]占60%,在(1,1.5]占40%。
表11 疏散仿真時間對比
表11中采用恐慌值和健康值的實驗2、3、4相比較實驗1的疏散時間較長,實驗3的平均健康值較高,因此疏散時間較短,而實驗4的平均健康值較低,因此疏散時間較長,實驗結果符合預期。在仿真過程中實驗2-實驗4的行人呈現出不同逃生速度,可見采用合理的恐慌值和健康值可以疏散仿真的結果趨于合理。
本文采用多線程優(yōu)化、增加導航點、結合恐慌值和健康值的社會力模型建立人群疏散仿真軟件,利用該軟件實時仿真商場及游戲場館的人群疏散。對不同導航模式、不同行人數量等進行仿真實驗,分析了仿真實驗的數據,得出相應結論。通過該軟件可以對場景的疏散功能進行仿真,為定制疏散策略提供依據。
然而,本文的方法仍有不足之處。采用多線程可以優(yōu)化仿真效果,但是當人數達到一定數量時,還是會出現系統(tǒng)瓶頸,還需要進一步優(yōu)化,可以考慮優(yōu)化算法步驟或者采用GPU加速來實現。本文的導航點采用人工標記的方式,存在一定的主觀性和不確定性,需要提出一種可以根據場景信息自動生成導航點的方法。人群的疏散過程中存在多種因素,還應考慮與人群的群體性、情緒性等相結合,才能人群疏散仿真更加真實。這些也是本文需要進一步研究的方向。