APP下载

一种结合导航点的社会力疏散仿真软件研究

2019-04-15倪仲锐刘婷婷柴艳杰

计算机应用与软件 2019年4期
关键词:线程障碍物目的地

倪仲锐 刘 箴 刘婷婷 陆 静 柴艳杰

1(宁波大学信息科学与工程学院 浙江 宁波 315211) 2(宁波大学科学技术学院 浙江 宁波 315211)

0 引 言

人群疏散仿真模型可以模拟人群疏散现象,通过人群疏散仿真模型的仿真数据可以判断场景中出口数量和位置是否合理,是否满足人群疏散的要求,从而为制定科学合理的疏散方案提供决策支持。目前常见的仿真模型主要有社会力模型SFM(Social Force Model)[1-3],元胞自动机模型CA(Cellular Automata)[4-6],势能场模型PF(Potential Field)[7-8]等。这些模型都可以实现人群的疏散仿真。

其中社会力模型是由Helbing 等[1]1951年提出, 该模型采用牛顿动力学公式来描述行人的运动, 将行人的受力分别表示为,行人指向目的地的驱动力、行人之间的作用力、行人与障碍物之间的作用力,这些力的合力作用于行人,使行人产生运动。

元胞自动机模型的概念最早是由冯诺依曼[9]提出,应用于模拟人工生命系统。1998年M Fukui等[10]将元胞自动机模型应用于人群的仿真,在该模型中行人的空间被划分为多个元胞空间,每个元胞空间具有一定的状态规则,行人依据当前的元胞空间和状态规则来进行移动。

势能场模型由Khatib等[7]在1986 年提出应用于机器人避碰路径规划。在势能场模型中,行人位于空间中的某个位置中,行人会同时受到目的地、其他行人、障碍物的势能场影响。在这些势能场的相互作用下,行人就会在空间进行运动。

其中社会力模型应用最为广泛,该模型在人群疏散仿真中有广泛的研究,如Yang X等[11]通过改进的社会力模型对人群的运动进行向导。Liu Q等[12]利用社会力量模型仿真恐怖袭击中人群疏散。纪庆革等[13]提出密度场下的短程社会力模型。刘箴等[14]利用社会力模型研究人行桥上突发事件下的人群恐慌行为。张开冉等[15]基于社会力模型的车站负重人群疏散模拟研究。焦宇阳等[16]通过引入下降速度心理力,改进传统社会力模型,实现三维楼梯空间的社会力模型。曲昭伟等[17]利用行人的随机行为改进社会力模型。

虽然社会力模型已经有广泛的应用,但是也存在一些不足,本文在实现社会力模型的基础上,对不足之处进行了改进。例如在行人的期望速度过快或者场景中行人的数量过多时会出现行人的抖动或者穿透障碍物的现象,这些现象影响到仿真的效果,本文对产生的这种现象的原因进行了分析,采用多线程的方法进行了优化。在特殊场景下,仅依靠社会力的驱动时,行人在场景中无法到达目的地或者移动速度较慢,本文采用增加导航点的方式改进行人的疏散仿真。本文通过改进的社会力模型开发了一个疏散仿真软件,实现多种情景下的人群疏散仿真。

1 社会力模型

在实际的逃生过程中,人们总是会根据自身的目的地和所处的周围环境来确定逃生路线。在逃生过程中会与障碍物和其他人保持一定的距离,由于观察到这个现象,在1995年Helbing等采用牛顿的力学公式和行人的逃生行为提出了社会力模型。在该模型中行人用抽象的一个粒子来描述,该粒子受到目的地的吸引产生一个自身的驱动力,同时该粒子受到与障碍物和其他粒子的斥力和摩檫力的影响,在这些力的合力作用于该粒子,使得其在一个二维的空间中连续运动,具体使用动力学公式来描述:

(1)

式中:fi为行人指向目的地的驱动力,fij表示为行人间的作用力,fiw表示行人与障碍物间的作用力。 这些力的合力作用于行人, 产生一个加速度,驱动行人在二维空间中连续运动。

(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与障碍物边缘的切线方向。

通过社会力模型可以实现对人群疏散的仿真,在仿真的过程中行人可以避免相互碰撞,避开障碍物,本文采用该模型实现一个人群疏散仿真系统。

2 模型算法及优化

2.1 算法流程

本文基于社会力模型实现了疏散仿真,实现算法流程图如图1所示。通过该算法实现了社会力模型,可以驱动人群在场景中的疏散仿真,该算法在行人期望速度1.5 m/s,行人数量不超过200个的情况下可以较为流畅地仿真,仿真效果较好。但是随着行人的期望速度和行人的数量增加,仿真过程中行人会出现抖动和穿透障碍物的现象,这种现象影响到了仿真的真实感。这个问题是需要通过一些优化方法来解决。

图1 社会力模型算法流程图

2.2 行人抖动和穿透问题分析

对行人抖动和穿透现象对比分析,发现产生这个现象的原因是由两个因素产生的,期望速度和仿真时两帧间隔时间,在仿真过程要实时计算每个行人的下一帧位置,可以通过下式来表示获得下一帧的位置。

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,从而解决问题。

2.3 算法优化

经过分析社会力模型的算法,发现在计算每个行人的社会力时,行人之间是相互独立的,因此这部分可以采用多线程并行计算来进行优化。本文把行人平均分割成若干个组,每个组内的行人通过一个线程来计算社会力,这样就可以并行计算社会力,提高效率降低帧间隔时间。同时也可以把仿真显示这部分通过一个线程运行,以此提高效率。优化后的算法流程图如图2所示。

图2 采用多线程优化社会力模型算法流程图

社会力模型采用多线程的算法优化后,仿真的效果流畅,行人的抖动现象和穿透现象有了较大的改善。对优化前后的帧间隔时间进行了统计,对比数据如表1所示,其中行人的期望速度为1.5 m/s,采用不同的仿真人数进行对比,优化采用8个线程数。

表1 优化前后的帧间隔对比

从表1中可以看出,采用了多线程优化的算法后,帧间隔时间大幅降低,仿真的效果提高,可见采用多线程优化社会力模型可以有效提升仿真的速度和数量。

为了对比线程数量对仿真效果的影响,在表2采用不同线程数统计的帧间隔时间。其中行人的期望速度为1.5 m/s,行人的数量为400个。

表2 不同线程数量的对比

从表2中可以看出,随着线程数量的增加,帧间隔时间也在减少,但是并不是线程数量越多,时间会减少得越多,因为这个和实际的CPU核心数量有关系。当线程的数量超过实际核心数量时,就会存在部分线程串行执行的情况。当线程过多时,系统还要处理线程的切换,这时就不一定能够降低时间。

可见通过采用多线程优化的方法,可以解决社会力模型仿真中的抖动和穿透现象,提高仿真的效果。

3 社会力模型结合导航点方法

在社会力模型中,行人会在目的地驱动力的作用下,向出口方向逃生,在一般的场景中社会力可以较好地完成行人的疏散仿真,但在特定的场景中,疏散的过程就会存在问题。如行人不能够沿着正确的路径疏散,行人在疏散过程中移动速度过慢,这些问题会影响仿真的效果。

3.1 行人无法疏散问题

社会力模型是通过对行人的目的地驱动力,行人间作用力和障碍物作用力三者累加的合力来使行人移动,但是如果在场景中的某个位置产生的合力互相抵消,那么行人就无法移动,不能完成疏散。如图3所示。

图3 行人无法疏散示意图

在该场景中,小球A、B、C表示行人的初始位置,小球D表示目的地,矩形表示障碍物。小球A和C可以沿着虚线的轨迹移动到目的地,但是小球B移动到小球B’的位置后就静止,因为在该位置的合力互相抵消,就无法移动。因此仅通过社会力模型,在特殊的场景中就无法完成疏散仿真。

3.2 行人移动过慢问题

社会力模型中的目的地驱动力始终是指向目的地,当遇到障碍物时,就会使行人的速度变慢,随着行人运动方向与目的地方向夹角的增大,行人的速度会更加缓慢,如图4所示。

图4 行人移动过慢示意图

在图中行人A全程以期望速度进行疏散,但是行人B只是在虚线段op和qr之间是以期望速度运行,而在pq之间由于受到障碍物的阻挡速度变慢,并且在从p到q的过程中由于夹角θ的变大而导致速度是越来越慢。实际上行人A距离目的地比行人B还要远,但是仿真的结果却是A先抵达目的地,仿真效果不符合实际情况。

3.3 采用导航点方法

上述两种问题产生的原因是行人的目的地设置的不合理,为了解决这些问题,可以在场景增加一些导航点,帮助行人在疏散过程中合理选择路径。这些导航点可以依据场景的布局合理选择,每个导航点赋予一个导航因子,该因子表明该导航点距离目的地的远近程度。该因子采用导航点与目的地的曼哈顿距离的倒数来表示,计算公式如下:

(10)

式中:nax、nay是导航点的坐标,ex、ey是目的地的坐标,行人在场景中选择导航点的规则是选择满足一定距离内导航因子最大的导航点作为目的地,这样行人就可以在场景中按照合理的路径完成疏散,避免了上述问题。在上述场景中增加导航点如图5所示,增加导航点后行人就不会出现无法移动和移动过慢的问题。

图5 增加导航点示意图

在场景中增加了黑色的导航点后,行人的疏散轨迹会沿着导航点行进,不会出现移动过慢的问题,通过这种方法可以有效改善仿真的合理性。

4 社会力模型结合行人个体因素

社会力模型主要考虑行人在运动过程中所受到的各种力的因素,而没有考虑行人在心理、生理上的因素。人群在疏散过程中,由于行人个体因素的差异,每个行人的期望速度是不一致的,主要和每个行人的心理行为和健康状况有关系,这些因素会影响人群的整体逃生时间。因此将行人的心理、生理因素增加到社会力模型中可以使仿真更加完善。

心理行为采用行人对当前状况的恐慌程度来表示,恐慌程度越大,行人的期望速度就会越快,反之就会越慢。行人的恐慌程度与距离出口的远近有关系,当行人距离出口较远时恐慌程度较高,反之恐慌程度较低。采用恐慌值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。通过该公式可以使行人的个体因素对期望速度产生影响,使仿真效果趋于合理。

5 软件实现

软件开发环境采用Microsoft Visual Studio 2017,开发语言采用C#,项目类型为Windows窗体应用,图形设备接口采用双缓冲技术的GDI接口。

5.1 主界面

软件主界面如图6所示。

图6 仿真实验界面

该界面左侧为仿真区域,其中矩形框表示障碍物,圆形表示行人。界面的右侧为操作界面,主要功能有参数设置、地震仿真、生成日志、生成轨迹线等,其中参数设置包括有行人数量、期望速度、导航方式,场景出口方向、位置及宽度、并行线程数量等。在仿真结束后可以生成每个行人的疏散数据, 包括每个行人的疏散时间,每个时间疏散的行人数量,绘制疏散轨迹线,还可以使用这些数据用于仿真分析统计。

5.2 核心功能类

为了保持良好的软件结构,本软件的核心功能采用类来进行编写,主要类的描述如表3-表5所示。

表3 社会力模型类

续表3

表4 向量计算类

表5 行人仿真类

5.3 多边形障碍物避碰算法

在由复杂的多边形障碍物构成的场景中,实现行人对障碍物避碰算法,算法如下:

输入:

行人集合A

多边形顶点集合O

步骤:

Step1循环行人集合A

Step2循环多边形顶点集合O

Step3计算Ai当前位置分别与Oi中相邻两个顶点组成边E的最短距离D

Step4计算出该最短距离D在边E上的相交点C

Step5找出最短距离D中的最小值,将对应的相交点C作为计算社会力的避碰点

Step6根据该避碰点计算社会力

6 仿真实验

仿真实验环境是操作系统Windows 10,主频为2.3 GHz,内存容量为8 GB。在仿真实验中,仿真场景中的1个像素表示实际场景中的0.1 m,商场场景区域为120×60 m,行人的半径为0.4 m,在场景中随机均匀分布。行人未疏散状态时的期望速度为1.5 m/s,疏散状态时标准期望速度为3 m/s,出口的宽度为6 m。

仿真过程中默认的导航方式采用目的地点的方式,本文称这种方式为原始社会力导航,为了对比疏散效果,部分场景导航方式为导航点的方式。该商场场景布局如图7所示,其中矩形框为障碍物,圆形为导航点,这样分布的导航点可以使行人在场景中完成疏散,避免行人紧贴障碍物移动。本文设计多种不同的情景模式来仿真人群的疏散实验,每种情景实验重复5次,对仿真结果进行分析对比。

图7 商场场景布局图

6.1 线程数量不同的商场场景地震疏散实验

为对比不同线程数量仿真时间的真实性,在场景、行人位置相同的情况下,进行实时仿真和数值仿真的对比,导航方式为原始社会力导航,出口的宽度为6 m。数值仿真是直接设定固定的每次计算社会力的间隔时间,设置间隔时间为0.005 s,计算出来的仿真时间作为基准时间。进行了4组的数值仿真,并与实时仿真进行对比,对比结果如表6-表9所示。

表6 行人200人的仿真对比

表7 行人320人的仿真对比

表8 行人400人的仿真对比

表9 行人480人的仿真对比

通过实验数据可以看出,在200人和320人的仿真情况下,实时仿真和数值仿真的疏散时间基本相同,在实时仿真中采用不同线程数量的仿真时间也基本一致。在400人和480人的仿真情况下,单线程的实时仿真的疏散时间就会偏离数值仿真的时间,而且人数越多偏离越大,且仿真效果也不佳。但随着仿真的线程数量的增多,仿真疏散时间会接近数值仿真的时间,且仿真效果较好。

单线程在仿真时,当人数较少时,计算量会较少,同时每帧的间隔时间较短,行人没有抖动现象,这时的疏散时间同数值仿真时间基本一致。当人数较多时,计算量会加大,每帧的间隔时间较长,会导致行人产生抖动现象,这增加了行人疏散的距离,也对行人的疏散有很大的阻挡作用,从而增加总体的疏散时间。采用单线程时会发生行人穿透障碍物的现象,使仿真效果不合理。从轨迹线图中可以看出,图8(a)的轨迹线相对于图8(b)的轨迹线清晰,而图8(b)的轨迹线由于行人的抖动而产生了较多的噪声。

通过该组实验,可以看出采用多线程可以弥补单线程的不足,可以提高实时仿真的效果,使疏散时间更具有可信性。

(a) (b)图8 不同线程数量不同对比

6.2 导航方式不同的商场场景地震疏散实验

仿真人数为300人,线程数量为8个,导航方式分别为原始社会力导航和导航点。

通过对比疏散时间数据,其中原始社会力导航平均疏散时间为39.2 s,导航点的为35.6 s,使用导航点仿真行人的疏散时间会降低3.6 s,原因从图9(a)中可以看出是使用导航点导航时行人避免行走在障碍物的边缘位置,这样在疏散过程中是以期望速度疏散,不会出现移动缓慢现象,更加接近真实情况。而在图9(b)中,行人在疏散过程中存在贴近障碍物边缘行走的情况,这样就会出现移动缓慢,导致疏散时间变长。

(a) (b)图9 导航方式不同的仿真

图10的轨迹线也可以看出图10(a)的疏散轨迹尽量避开障碍物的边缘。而图10(b)中由于行人是直接指向出口点进行疏散的,必然会贴近障碍物移动。可见采用合理的导航点方式进行疏散仿真可以使行人的疏散轨迹更加趋于合理,完善疏散仿真效果。

(a) (b)图10 导航方式不同的轨迹线

6.3 多种障碍物场景的地震疏散实验

为了使仿真软件适应不同障碍物场景,在场景中实现了可以任意增加多边形作为障碍物,如矩形、三角形、菱形、五边形、六边形等,可以灵活地布局障碍物,满足不同场景疏散仿真的要求。本节实验设计一个游戏场馆的场景,用不同多边形表示游戏区域,选择一些关键的节点作为导航点进行疏散仿真实验,游戏场馆场景的布局图如图11所示,其中多边形为障碍物,圆形为导航点。

图11 游戏场馆场景布局图

在场景中随机分布行人,行人的期望速度为3 m/s,出口的宽度为6 m,采用8线程分布进行了200人、320人、400人和480人的疏散仿真,图12(a)是仿真效果,图12(b)是疏散轨迹线。不同行人数量的疏散仿真时间对比如表10所示。通过不同的多边形组合可以创建出不同的场景类型,满足对多种场景仿真实验的要求。

(a) (b)图12 游戏场馆场景仿真

表10 疏散仿真时间对比

6.4 结合恐慌值和健康值的地震疏散实验

上述实验中行人的逃生速度就是期望速度,但在疏散过程中由于行人的恐慌程度和健康程度区别,逃生速度存在较大的差异。本节实验采用商场场景,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的行人呈现出不同逃生速度,可见采用合理的恐慌值和健康值可以疏散仿真的结果趋于合理。

7 结 语

本文采用多线程优化、增加导航点、结合恐慌值和健康值的社会力模型建立人群疏散仿真软件,利用该软件实时仿真商场及游戏场馆的人群疏散。对不同导航模式、不同行人数量等进行仿真实验,分析了仿真实验的数据,得出相应结论。通过该软件可以对场景的疏散功能进行仿真,为定制疏散策略提供依据。

然而,本文的方法仍有不足之处。采用多线程可以优化仿真效果,但是当人数达到一定数量时,还是会出现系统瓶颈,还需要进一步优化,可以考虑优化算法步骤或者采用GPU加速来实现。本文的导航点采用人工标记的方式,存在一定的主观性和不确定性,需要提出一种可以根据场景信息自动生成导航点的方法。人群的疏散过程中存在多种因素,还应考虑与人群的群体性、情绪性等相结合,才能人群疏散仿真更加真实。这些也是本文需要进一步研究的方向。

猜你喜欢

线程障碍物目的地
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
恋爱中的城市
浅析体育赛事售票系统错票问题的对策研究
迷宫弯弯绕
高低翻越
赶飞机
月亮为什么会有圆缺
动物可笑堂
Java的多线程技术探讨