几天前,我被人群密度的计算困住了。经过反复猜测,强行将我的模型中可以使用的数量纳入公式,昨天终于算出了一个值,不知道是否正确。但是我还是想记录下计算的过程和心得,也整理一下自己的思路,看看自己有没有什么问题。
人群压力计算的来源文章:Helbing, D., Johansson, A., & Al-Abideen, HZ (2007)。人群灾难动力学:实证研究。物理评论 E,75(4)@ >, 046109.
以下所有公式均来自:Jiang, C., Ni, Z., Guo, Y., & He, H. (2019). Pestrian Flow Optimization to Reduced Crowd Disasters Through Human-Robot Interaction 。 IEEE Transactions on Emerging Topics in Computational Intelligence. 本文的补充材料。
正如 Helbing 的文献中提到的,根据流体动力学(fluid dynamics),存在一种流动-密度关系(flow-density relationship)。
公式1
在,
是流量,
是人口密度,并且
是平均速度,这里的平均速度在最大密度处将等于0,即
. 然后在括号中
表示观测点的坐标,那么某一时刻某一点的流量实际上就是此时观测点的密度和速度的乘积。
论文中的密度计算和我之前理解的“单位面积人数”不太一样。
公式 2
这里的密度是局部密度,这意味着
时间点
地方的密度。m为测量区域(圆形区域)内的总人数,
代表行人
眼下
时间坐标(向量)。
是高斯距离相关的权重函数,我不知道翻译是什么,如下:
公式 3
可以看出小学求平均速度的公式,
与行人
位置
, 测量圆心的位置
, 测量区域的半径(圆)
有关的。
到目前为止的计算没有问题。
首先计算每个点的密度,使用一个三维数组
要做到这一点,首先确定圆心的位置,然后取出每个行人此刻的坐标,计算每个行人到测量圆心的距离。如果距离大于
然后直接设置这个localDensity[x][y][id]为0,如果距离小于
然后用上面的公式3计算这个人的c值(暂时我只明白这是这个圆形测量区域的行人。
对该区域的密度有很大贡献),然后是各个测量点
可以计算密度。
下一步是计算局部速度,
公式 4
看到这里有点不舒服。
因为这个局部速度的分母部分是针对测量点的
所有贡献的行人
的 c 值之和。
分子部分是要测量的点
贡献行人移动速度
与行人
用于测量点
的
值相乘和相加。
这里需要遍历一个测量点上的所有行人,得到
先将该值与当前速度值相乘,存储,然后在后续计算中取出,相加,计算为局部速度。在这里很容易头晕。
顺便说一下,在计算中,为了保证正确性,在计算行人时
用于测量点
c的值,我也通过了当前行人
的速度值被重新分配,即如果行人
在里面
是圆的中心,半径是
在测量区域内,行人
速度是它自己的速度。如果它在此测量区域之外,则指定此速度。
为了
. 以免后面的乘法和求和的计算出错。原来速度的存储方式也在这里改变了。此时的行人速度为
,但是这里强行添加了测量圆心的坐标(一维数据很难整合成三维,增加了数据的复杂度,而且仿真运行时的计算量也直接(不知道是不是这个计算会无缘无故的增加计算量和难度小学求平均速度的公式,但是因为要遍历所有的测量点和所有的行人,感觉如果是这样的话不容易出错你需要这么准确的点,否则你的计算结果会更加不确定)
在计算这个局部速度的时候,我想到了这个计算的意义。好像是大家的速度和对这个区域的贡献的乘积之和,除以这个区域的密度,作为这个区域的局部速度,它有权重不是特别好理解,但是好像是比直接平均这个区域所有人的速度更科学一点,但我不能说它是什么。
继续前进,是时候计算人群压力了。
在人群疏散过程中,经常会因出现瓶颈或出口容量有限而出现拥堵,而由于人群压力的增加,在一些拥挤的场景中会出现“走走停停”(stop-and-go)的现象。流)和“湍流”。通过建立人群压力的概念,可以对这两种现象进行量化,人群压力的计算:
公式 5
是的
此刻的人群压力等于当前时刻观察区域的空间平均密度乘以速度变化。
在,
公式 6
这里
尖括号表示观测中心点
的平均值。
然后我可以计算速度变化量,这让我头晕目眩。
因为之前的计算
,但是“速度减去速度的平均值,然后是差的平方的平均值”确实令人困惑。想了一天多,想不通这个数额怎么算。(一开始感觉观察点的速度降低了,观察点的速度是平均的。这不就是把自己减去自己,不就是0吗?一直绕着这个弯,出不来)
之后,硬着头皮又把纸翻了一遍,继续往下看。有一个人群压力公式可以计算 t 时刻的 x 位置:
公式 7
这里的速度变化是:
公式 8
这个量比上面的公式6具体多了,感觉是可以计算出来的。
因为之前已经放入公式4
算了,特别是在
在当前的基础上
是圆的中心,与
计算半径内的行人速度,是一个二维变量
,然后是上一项
每个人都是
瞬间的速度值,然后取平均值,我的处理是,在点
在圆心的观察区,检查所有的
和
, 其中之一不是
表示此人在该区域内,并以此为基础统计该观察区域的人数。然后简单粗暴
,然后求这个的平方值,然后直接用平方和除以该区域的人数就可以得到速度变化。
至此,感觉人群密度终于得到了。
本来以为是一个很简单的统计,结果发现公式也不是很简单,因为这里的密度和速度考虑到了不同位置的不同行人当前的观察点。
的贡献,以及权重分配和求和就是根据这样的特点进行的。那么速度的变化量也是比较迂回的。
事实上,我不知道我是否正在寻找这种方式的速度变化,但现在我会先做数学。将三维数组相加相加,形成二维数组,再将加减乘除相加,形成一维数组。一不小心,全是苦涩的泪水。
我昨天做了数学,得到了这样一个结果,虽然不是很漂亮,但至少不是全零。我还是很满意的。
忘了这一套,我觉得我很佩服这个领域的前辈。他们真的很擅长数学(数学渣就是蓝瘦蘑菇)。
好了,结束了,这张纸条,没有彩图,真的很丑。
暂无评论内容