做Legion人群仿真做到第6期,模型画完了,空间定义好了,路径连上了,人流需求也灌进场景里了,很多朋友到这一步就直接点“Run”,等模拟器跑完就把密度图导出去写报告。我以前也这么干过,后来被审图专家一次灵魂拷问“你仿真步长设的多少?随机种子跑了几组?行人速度分布用的哪本规范的数据?”问得哑口无言,才重新老老实实把仿真参数这一个看似不起眼的环节捡起来研究。这篇就把Legion设置仿真参数这件事从头捋一遍,不堆理论,直接按我平时做站房和人流安全评估项目的顺序,从全局参数、行人本体参数、行为参数、路径选择参数到输出统计参数,一层层说清楚每个参数是干什么的、默认值合不合理、实际项目中该怎么调。无论你是刚接触Legion的新手,还是已经会用但没细究过参数含义的老手,这篇都应该对你有用。
1. 先想清楚“仿真结果给谁看”,再动参数
仿真参数不是填表就完事,它直接决定你最后导出的密度图、服务水平等级、排队长度这些结论有没有说服力。我在做地铁站换乘大厅、体育场馆散场模拟、商业综合体疏散评估时,第一条原则就是:先明确这个模型跑出来要给谁看、回答什么问题,再回头定参数。
1.1 同一套模型,不同结论要盯不同指标
做车站类项目,专家评审通常会问“高峰小时扶梯口排队会不会倒灌到站台”,这时候你重点要看的是排队长度和扶梯口局部密度;做体育场馆,结论核心是“最后一波观众多久能散完”,重点变成总疏散时间和出口流量;做商场,业主关心的是“中庭促销活动时会不会出现拥挤踩踏风险”,需要看瞬时密度峰值和区域LOS。
这些评价指标不一样,参数的敏感度也不一样。比如看排队长度,时间步长和行人间距的设定影响很大;看总疏散时间,速度分布和路径选择成本是主导因素;看局部密度峰值,随机种子就显得特别重要。换句话说,参数设置没有一套万能模板,必须跟着结论倒推。
1.2 服务水平LOS是绕不开的“通用语言”
不管哪个项目,最终报告里几乎都要用到服务水平(Level of Service,简称LOS)这个概念。Fruin提出的行人交通设施服务水平分级,把人流密度分成A到F六个等级,是目前行业里最通行的语言。Legion自带这套标准的计算逻辑,但你必须在参数设置里把密度统计方式、阈值标准选对,否则结果可能和别人对不上。
后来我做项目养成一个习惯:拿到模型第一件事不是打开仿真运行按钮,而是先在纸上写清楚“本项目的核心结论是哪三句话”,然后推导出要用的指标,再反推哪些参数必须重点校核。这个流程看着浪费时间,实际上能省掉大量返工。
2. 全局参数三件套:仿真时长、时间步长、随机种子
进入Legion的仿真运行设置,首先面对的是几个全局参数。这三个参数新手最容易忽略,因为它们不像行人属性那样直观,但恰恰是决定模型可靠性和计算成本的关键。
2.1 仿真时长怎么定:覆盖完整高峰时段再留余量
仿真时长不能随手填。以前接到一个商业综合体项目,对方说“就模拟晚高峰17:30到19:00”,我直接把时长设成5400秒,结果跑到一半发现,地下车库通往商业的扶梯在18:45才开始出现真正的排队,等跑完一看,19:00截止时队伍还没散干净。也就是说,如果只截到19:00,你会漏掉“高峰期结束后残余客流如何消散”这个重要信息。
我的经验是:仿真时长=分析时段长度+系统“清空”时间余量。比如你要看晚高峰17:30到19:00的地铁站换乘,至少设定到19:10甚至19:15,让最后一批进入系统的行人能走到目的地、产生完整行程时间数据。如果做消防疏散场景,时长指“最后一个人离开建筑物或到达安全区的时间”,通常先用预模拟跑一版,看看大致什么时候清空,再把仿真时长上调10%到20%设为正式值。
Legion里仿真时长的单位一般是秒,设置之前先确认模型里的客流到达曲线是否覆盖整个时段。如果到达曲线只定义到19:00,就算仿真跑到19:30,之后也没有新行人进场,只会看到存量人群慢慢消散。
2.2 时间步长不是越小越好:精度与计算成本的平衡
时间步长,通俗说就是模拟器每隔多长时间计算一次所有人的位置和状态。这个参数直接权衡着仿真精度和计算耗时。
Legion不同版本的默认步长不完全一样,有的版本默认0.5秒,有的允许你在运行设置里调整。我的建议是:除非要精细分析某个小范围区域的排队和避让细节,否则就用默认步长附近的值跑。步长太小(比如0.1秒以下),计算量会成倍增加,几万人的场景一跑就是十几个小时,对项目周期来说很不划算;步长太大(比如超过1秒),行人位置更新太粗,会看到明显的不自然“瞬移”,局部密度也会失真。
实际项目里,我用过一个比较顺手的组合:大范围路网级仿真用0.5秒步长,重点区域小模型用0.2秒。跑完对比关键指标,两者在“通道平均密度”和“总疏散时间”上的差异通常在5%以内,但计算耗时差很多。这个差异可以接受,耗时却直接影响交付节点。
注意:时间步长改了之后,数据输出间隔(Data Interval)也要跟着核对。有些版本里两者是独立的,如果不小心把输出间隔设得比步长还小,会产生大量冗余数据文件,拖慢磁盘读写。
2.3 随机种子与多次运行:让结论有统计意义
随机种子这个参数,是很多项目被专家质疑的重灾区。Legion在生成行人、分配初始位置、采样速度、决定部分微观行为时都会用到随机数,随机种子不同,仿真结果会出现上下波动。单次仿真跑出来的密度图、排队长度,本质上是“一次抽样的结果”,不一定代表一般水平。
我现在做的每个正式项目,同一个需求场景至少跑3组随机种子,时间允许就跑到5组,取均值或中位数作为主要结论,波动较大的指标额外附上范围。比如某通道的密度均值可能是2.1、2.3、2.2人/㎡,三个种子之间差0.2,这种波动在报告里就写“平均峰值密度约2.2±0.1人/㎡”。如果某个指标在不同种子间波动特别大,比如标准差超过均值的15%,那就说明该区域对随机因素比较敏感,需要在报告里说明,甚至回头检查模型本身是不是有路径设置不合理的问题。
3. 行人本体参数:速度分布、身体尺寸和人群结构
全局参数定完,下一步就要“造人”了。Legion里没有“默认行人”,每个行人都有自己的一套属性和行为特征,而这些都靠参数来定义。
3.1 Profile:人群不是铁板一块
Profile可以理解成“人群成分表”,它定义了这个场景里会出现哪几类人、每类人占多少比例。一个典型的枢纽站Profile可能是:普通成人80%,老人10%,儿童5%,携带大件行李者5%。不同类型的行人,步行速度、身体尺寸、上下楼能力都不一样。
设置Profile时,最常见的错误是只填一种“标准人”,比例100%。真实情况里,地铁站早晚高峰以通勤成人为主,男女比例接近;火车站节假日会突然多出一大批携带行李箱的人,他们的速度、占用空间和避让行为都和空手通勤者明显不同;医院场景要有轮椅使用者,体育场散场时有大量结伴同行的人群。
我通常会把Profile拆得比名义分类更细一点:比如“成年男性通勤者”和“成年女性通勤者”分开,因为两者的自由速度和身体尺寸有明显差异;这个拆分看上去增加了工作量,但对通道密度和楼梯瓶颈的计算影响很直接。
3.2 步行速度:为什么必须用分布而不是固定值
这是新手最容易犯的硬伤:把所有人的步行速度设成同一个值,比如都会走路速1.2m/s。这样跑出来的结果是——所有行人齐步走,队伍整整齐齐,通道口会出现不自然的“等间距排队”,密度图也会像打印出来的网格一样均匀,一看就是假的。
真实行人速度天然存在离散性,同龄同性别的人在平整通道上的自由速度也会有±0.2m/s左右的波动。Legion里用速度分布来描述这种离散性,一般设置两个关键值:自由速度均值(Mean Free Speed)和标准差(Standard Deviation)。参考常规数据:城市通勤混合人群自由速度均值可以取1.2到1.4m/s,标准差0.2到0.3m/s;老年人和儿童均值建议降到1.0m/s上下。
上下楼速度是容易被忽略的第二层。平地上走1.3m/s的人,爬楼梯时速度会明显下降。Legion里楼梯速度通常按楼梯几何条件自动计算一部分,但你也应该检查对应楼梯坡道参数是否与实际图纸一致。如果模型里有一段很长的楼梯,而你保留了默认的平地速度,仿真会出现“飞一般跑下楼”的行人,这在评审时相当露怯。
3.3 身体尺寸:别小看肩宽0.05m的差别
Legion里的每个Agent在空间里是有“占地”的。最直接的影响参数是肩宽(Body Depth)和体厚(Body Width),这两个值决定了行人与行人之间的距离底线。肩宽设大了,相同面积里能容纳的行人数量就少,密度自然会被压低;肩宽设小了,你可能会算出非常激进的密度结果。
普通成人肩宽在0.45m到0.50m之间,携带行李者可能会占用到0.6m。别小看这0.05m的差异——一条2m宽的通道,横向最多并排的人数会从4个变成3个半,反映到流量上就是每小时少几百人。实际项目里,如果模拟对象是春运期间的火车站,建议把携带行李者的比例和身体尺寸都调高,否则容易过度自信。
设置身体尺寸时还要留意模型里是否用“圆形”还是“椭圆”来表示行人占地。圆形简化了转向,计算快,但在侧身通过窄缝时不够真实;椭圆更像真实人体的俯视投影,能模拟出侧身让行的效果,但计算开销更大。我一般会先在关键瓶颈处做个小范围对比测试,再决定全模型用哪种。
4. 行为参数:反应时间、进取性与局部避让
如果说全局参数和行人属性是“硬件”,行为参数就是“软件”,它决定了人与人之间如何互动。这部分参数在Legion里往往藏在比较深的菜单里,默认值通常也能跑,但如果你知道它们是什么意思,就能解释很多“为什么仿真结果和实测不一样”的问题。
4.1 微观行为模型是个“受力”系统
Legion底层是微观Agent模型,你可以通俗地把每个行人想象成一个小磁铁:他既有一个“想到达目的地”的驱动力,也受到周边行人的排斥力(保持个人空间)、墙和障碍物的约束力、以及密集人群中的挤压力。这个受力系统决定了每一步实际往哪走。
受力模型的好处是能自然涌现出很多真实现象:通道里行人自动形成几股同向客流、迎面相遇时双方会提前侧身、瓶颈处会出现“排队-波动-释放”的脉冲效应。反过来,如果参数设得不对,也会涌现出很多假象:行人重叠、来回抖动、卡在墙角出不来。
了解这套逻辑是为了理解怎么调参数。遇到“局部地区行人在空地上原地转圈”这类问题,很多人第一反应是模型画错了,实际往往是行为参数或者局部空间网络的设置问题。
4.2 反应时间、进取性和协作度
在Legion的高级行为参数里,有几个概念值得花时间理解:
反应时间(Reaction Time):行人从“感知到前方变化”到“做出行动”之间的延迟。反应时间设得越短,行人避让越灵敏,队列越紧凑;设得越长,行人会显得“迟钝”,容易撞上或急停。一般建议在0.5秒到1.0秒之间,具体看场景人群——早晚高峰通勤者的反应速度会比提着行李箱的旅客快一些。
进取性(Aggression):可以理解成“在拥挤环境下争取移动空间的意愿”。进取性高的行人会以较小的人间距前进,甚至强行插入空隙;进取性低的行人会主动保持更大距离,宁可慢一点也不愿和人贴太近。真实人群里这两种人都存在,但如果你把所有人的进取性都调高,通道流量会上升,同时局部密度也会变得很不真实。
协作度(Cooperation):表现的是行人在避让时是否“互相配合”。协作度高的行人会在迎面相遇时双方各让一点,流畅通过;协作度低的话,会出现僵持或者一方强行通过。紧急疏散场景和节日逛街场景的协作度预期完全不同。
这三个参数很难有绝对正确的数值,因为不同文化、不同场景下的行人行为差异很大。我的做法是:先保持默认值,跑一版基准结果,再根据实测视频或已有研究文献进行微调,每次只改一个参数,观察对关键指标的影响方向和幅度。
4.3 楼梯与坡道的速度修正
楼梯是Legion模型里最容易出问题的地方之一,因为楼梯上的人和水平通道上的人行为模式差异很大。上楼梯费劲、速度慢,下楼梯相对快但也比平地慢;楼梯越陡、踏步越高,速度下降越明显。Legion里有针对楼梯的速度修正参数,有些版本会根据楼梯几何自动推算,有些版本需要你手动指定“上楼梯速度修正系数”和“下楼梯速度修正系数”。
常规取值往往可以参考:上楼梯速度大约是平地的50%到70%,下楼梯大约是平地的70%到85%。如果模型里有一段很长的换乘通道,包含多处楼梯和扶梯,速度修正系数对总行程时间的影响非常大。之前做过一个案例,自动扶梯的输送能力没问题,但旁边的疏散楼梯被低估了通行能力,原因就是下楼梯速度修正系数设得太保守,导致仿真结果里大家宁愿在扶梯口排队也不走楼梯,和实际观察明显不符。
提醒:调整楼梯速度修正系数后,一定要同步检查扶梯的参数。Legion里扶梯通常作为一个移动表面处理,它有自身的运行速度、输送方向和承载上限。如果扶梯参数没有和实际设备铭牌核对,输出的闸机口排队长度会产生偏差。
5. 路径选择参数:行人凭什么走这条路不走那条路
全局参数、行人属性、行为参数都设好了,行人该往哪个方向走还是另一回事。Legion里的行人不是漫无目的地乱逛,它们会基于空间拓扑和路径网络做选择。这部分参数直接决定你看到的人群分布。
5.1 成本函数与拥挤惩罚
Legion的路径选择核心是一个“成本函数”。行人从A点到B点,有几条路可选时,模型会计算每条路的“成本”——通常是距离、预期行走时间、拥挤程度、舒适度等因素的加权组合,最后选择成本最低的那条。
很多人忽略的是“拥挤惩罚”这个维度。如果一条通道的预期密度很高,行人会主动觉得“这条路很挤,不好走”,从而偏向绕远一点的另一条通道。这在真实世界中非常常见:地铁站里大家宁愿排长队等扶梯,也不愿走旁边几乎没人的楼梯,那是因为扶梯的“心理成本”更低。但在消防疏散或紧急疏散模拟中,行人对拥挤的敏感度会变化,可能更倾向于跟着标志走最近出口,这时候拥挤惩罚的权重就应该调低。
实际上我常遇到的情况是:把所有通道的拥挤权重都设成一样,跑出来某条通道爆满、旁边一条空着——这显然不合理。这时应该检查的是该通道的容量是否合理、路径网络的连接有没有问题,而不是盲目调高全局拥挤惩罚。
5.2 熟悉度:不是所有行人都是“全局最优”导航者
“熟悉度”(Familiarity)思想很简单:不是每个人都像装了全局导航一样知道走哪里最省时。本地常客知道捷径,知道高峰期哪条通道人少;外地旅客只看引导标志,只知道沿主通道走,不敢随便钻小通道。
在模型里,你可以给不同Profile设置熟悉度或者路径选择行为倾向。比如通勤者Profile的熟悉度高,可能更容易选择效率更高的路径;游客Profile的熟悉度低,会倾向于选择更显眼的、更符合直觉的路径,哪怕那条路人更多。
我做高铁站项目时会把到达旅客的熟悉度设得比较低,因为带着行李第一次来的人,大概率不会选择穿过商业区绕到远端出口;而早晚高峰的上班族,熟悉度就高一些,会更灵活地选择人少的换乘通道。
5.3 空间偏好与楼梯惩罚的实际设置
路径成本里还可以加入空间偏好。比如商业综合体的中庭,既是通行空间也是停留空间,行人在中庭边缘走、在店铺前驻足,这些行为可以通过设置局部区域的吸引力或排斥力来模拟。很多人会把“人群感兴趣的区域”设成强吸引,结果人越聚越多,与现实相反——现实中一旦人多到一定程度,后来的行人反而会避开。
楼梯惩罚也是一个实际项目中很容易用到的参数:在扶梯和楼梯并排的地方,行人选择扶梯的倾向远高于楼梯,因为你光看距离远近的话,两者差不多,但走楼梯的体力成本更高。通过给楼梯路径增加一个额外的“成本惩罚”,就能模拟出“扶梯口排长队、楼梯却空闲”的真实场景。
这里要强调调试思路:每次只改一个参数,跑一版对比图,看关键断面的流量分布是否符合常识。不要一次改五个参数,否则出了问题根本不知道是谁引起的。
6. 输出统计参数:密度网格、LOS阈值和动画导出
参数设置完,模型能跑出结果了,但结果能不能“拿出来说事”,还得看输出统计参数设得对不对。很多仿真报告被质疑,不是模型逻辑错误,而是密度统计方式说不清。
6.1 密度图和统计窗口
Legion输出密度图时,通常需要设置网格大小和时间统计窗口。网格大小决定空间分辨率,一般默认0.5m×0.5m就够用。网格太小,单格里的行人数只有0或1,密度图会显得很碎,噪声大;网格太大,细节被抹平,瓶颈处的高密度区会看不出来。
时间统计窗口更关键。每帧实时密度的瞬时波动非常大,报告里直接用瞬时值会出现“这片区域平均密度1.8人/㎡,但某一帧峰值突然跳到4.5人/㎡”这种场面。更稳妥的做法是用一定时间窗口的平均密度来画图。我的经验是:高峰时段平稳运行的分析,统计窗口取60秒到300秒;疏散模拟这种短时剧烈变化的场景,窗口不宜太长,否则会抹掉危险峰值,取5秒到30秒比较合理。
做车站类项目,我一般会同时输出“全时段峰值密度图”和“平均密度图”两张,前者用来找风险点,后者用来评估服务水平。
6.2 LOS阈值怎么落到软件里
LOS分级在Fruin标准里的密度阈值是固定的,但你必须确认软件里的适用范围和你的项目一致。通常使用这些密度区间(人/㎡):
| 服务水平 | 密度范围(人/㎡) | 状态描述 |
|---|---|---|
| A | ≤0.83 | 自由流动 |
| B | 0.83 ~ 1.44 | 略有约束 |
| C | 1.44 ~ 2.22 | 正常行走 |
| D | 2.22 ~ 3.33 | 行走受限 |
| E | 3.33 ~ 5.56 | 非常拥挤 |
| F | >5.56 | 停滞 |
但要注意,Fruin标准最初是基于特定人群特征提出的,用在中国的地铁站、大型活动场馆时,如果条件允许,最好结合实际情况微调。我在不少项目里采用的是甲方的企业标准或地方规范,可能对某些场所额外要求“密度不超过D级”“排队区域允许短时E级”。
软件里设置LOS阈值时,核对这些数值不要填错。填错一个档位,整张服务水平图全变,报告就会站不住脚。
6.3 数据输出间隔与动画导出
我见过不少同事在仿真设置里忽略了Data Output Interval。数据输出间隔决定了软件每多少秒保存一次中间计算结果,它和时间步长是两个独立概念。如果后续要做轨迹分析、速度散点图、排队长度时序曲线,数据输出间隔必须足够细,我一般设为1秒;如果只为了出几张密度图和一段动画,间隔可以放宽到5秒甚至更长,减少数据文件体积和读写压力。
动画导出参数里,帧率通常选10帧/秒或25帧/秒。25帧的高码率视频适合做汇报片头展示;做日常迭代分析时用10帧就够了,导出速度快得多。还要看你渲染时要不要叠加密度色块、LOS色块、Agent个体颜色这些图层,图层的开关在导出前务必检查一遍,别导出才发现颜色方案不对又重跑。
7. 参数设置完,怎么自查和校准
最后这部分是我每次正式提交仿真结果前都会做的工作,也是绝大多数教程不会细讲的部分。
7.1 自查清单
我会把下面的清单打印出来,跑正式方案的24小时之前逐项过一遍:
- 仿真时长是否覆盖完整高峰时段加清空余量
- 随机种子是否至少3组并确认不同种子都有输出
- Profile各类型比例之和是否为100%,各类型速度、身体尺寸是否符合场景人群特征
- 楼梯/坡道的速度修正系数是否和现场几何条件匹配
- 扶梯参数(速度、方向、输送能力)是否与设备铭牌一致
- 路径选择成本中的拥挤惩罚、楼梯惩罚是否合理
- 密度图网格尺寸、时间统计窗口、LOS阈值是否符合报告要求的规范
- 数据输出间隔是否满足后续轨迹和时序分析需求
- 动画导出的图层、帧率、视角是否已确认
- 模型是否存在孤立空间、悬空路径、重复叠加的空间区域
这些项目看着琐碎,但每一条都曾经让我返过工。
7.2 常见警告和坑
运行日志提示“空间容量不足”或“Agent无法生成”:通常是行人到达率设得太高,超过空间物理容量上限。先检查模型里对应区域面积和到达率,必要的时候调整到达曲线或增加疏散出口。
密度图出现局部黑色高亮:可能是统计窗口太短,把个别帧的随机拥挤放大了。加长统计窗口再看;如果仍然严重,就得回查这个区域的路径连接。
行人在某一点原地打转:大概率是路径网络在这个位置断裂或空间定义有重叠,优先检查拓扑连接,而不是调行为参数。
整体速度远高于预期:第一时间检查速度分布均值,再看楼梯坡道速度修正是否生效,最后看数据输出间隔是否与步长冲突。
7.3 用实测数据校准的简化流程
条件允许的情况下,我强烈建议用现场实测数据做一次参数校准,步骤不复杂:
- 选一个典型通道,实测高峰时段每分钟通过人数、最大排队长度或局部密度;
- 在模型中使用同一时段的到达曲线,跑一版基准仿真;
- 对比仿真输出与实测值,误差超过15%就启动调参;
- 调整顺序有讲究:先查到达率曲线是否准确,再调速度分布和身体尺寸,接着调行为参数,最后动路径成本;每调一步都要重新对比一次;
- 记录每一步的参数值和误差变化,这个记录在报告评审时非常好用,也是你自己积累调试经验最直接的素材。
这个流程看着简单,但真正坚持做的人不多。很多人一上来就调反应时间、调整体参数,方向错了越调越偏。我之前做过一个大型体育馆的散场模拟,最初跑出来总疏散时间比实测慢了近两成,排查之后发现是到达率曲线里观众从看台到通道的疏散启动时间设置过于保守,调回来之后误差一下就缩到了5%以内。
参数设置这件事,归根到底不是“把数字填好”,而是“理解每个数字在替谁说话”。我自己的习惯是每一个正式场景至少跑3组随机种子,跑完必看密度云图里有没有不合常理的局部堆积,再用实测数据校准一轮。这套流程虽然不炫酷,但胜在稳,评审会上不管被问哪个参数,我都能讲清楚它是怎么来的、为什么取这个值。下一篇如果还有机会,可以接着聊怎么把Legion导出的海量数据整理成一张让业主一眼看懂的图。