
SimWalk这软件做行人仿真和疏散安全评估的朋友应该都不陌生。从建模、标定参数一路跑到仿真结束很多人觉得项目就算完了其实真正的重头戏刚开始——结果分析与可视化。上一篇我们聊到仿真的求解与运行这一篇专门针对 SimWalk 的结果分析与可视化环节把“跑出来的数据”变成项目报告里能用、能说服人、能指导设计改进的图表和结论。为什么单独花一篇讲这个因为我在实际项目里见过太多这样的坑模型搭得挺细致仿真也跑完了结果打开输出文件夹几十个 CSV、几百 MB 数据不知道先看哪个或者导出了密度图但颜色条上限是默认值高密度区域一片红根本没法对照规范做安全评估。结果分析不是“把图导出来交差”它决定你的仿真结论靠不靠谱也决定评审会上你的底气和说服力。这一篇面向正在用 SimWalk 做疏散分析、交通枢纽评价、公共空间设计的工程师和研究人员也适合刚入手人群仿真、想少走弯路的新手。1. 结果分析在整个SimWalk项目里到底扮演什么角色1.1 结果分析解决的不是“看图”问题而是“决策”问题很多人以为结果分析就是把密度云图导出来看哪里红哪里蓝。真没这么简单。SimWalk 本质上是微观行人仿真每一个行人都是一条带时间戳的轨迹仿真跑一次可能产生几十万条记录。这些原始数据如果不提炼没法直接回答任何工程问题。结果分析阶段要回答的是这类具体问题商场二层这个扶梯口在高峰期会不会堵人体育馆疏散时最远的观众在多少分钟内能到达安全出口候车大厅这个检票闸机群布局能不能扛住未来十年的客流量这些问题的答案靠的不是“看颜色”而是从仿真数据里提取密度、流量、疏散时间、排队长度等一系列指标再对着规范或者设计基准去判定。我在实际项目里的习惯是仿真开始前先想清楚最终要回答哪几个问题再反推要记录哪些输出量。不是先跑完仿真再想怎么分析那样经常发现关键词数据没输出还得重跑一遍。SimWalk 的支持力度很强允许按网格、按区域、按行人类型分别输出数据但前提是你得在仿真设置阶段就规划好。1.2 结果分析做得不好项目会在最后一步垮掉人群仿真项目有一个普遍规律模型阶段花的时间很多但评审阶段大家盯着的只有结果图表。业主不会去看你的参数标定过程也不会关心你用了哪种行人模型他们只关心密度超过多少、疏散需要多长时间、要不要增加出口宽度。这就意味着结果分析的能力直接决定你整个仿真项目能不能闭环。我见过一个项目仿真做完了结果报告里贴了一张默认配色密度图连颜色条都没标注单位评审专家当场质疑“这图我们怎么知道算不算危险”。其实数据是可以支撑结论的但呈现方式不对就白白浪费了一大半工作。反过来有一次我只要把密度图配色调整成与规范一致再用疏散时间做一条双纵轴对比曲线评审便顺利通过。同样的数据表达方式不同效果完全不一样。1.3 可视化解决了“同行内部懂、外部看不懂”的困境人群仿真有一个尴尬之处懂仿真的人看数据不懂仿真的人看热闹。而项目结论最终要说服的往往是建筑师、甲方、甚至评审委员会的跨专业专家他们不可能逐个检查你的模型构建细节。可视化在这里承担了“翻译官”的角色。一个动态的人群流动图比十页密度表更能让建筑师意识到安全出口不足一张与测绘图纸叠加的高密度区域热图比任何口头描述都更能说明问题。我在做交通枢纽项目时喜欢输出一种“时间切片”式的可视化——每隔30秒导出一张区域密度图拼成序列评审专家一眼就能看出高峰时段进站口是怎么形成瓶颈的。这类表达方式普通人看5秒就懂不需要培训。2. SimWalk结果分析的核心指标与数据口径2.1 密度判断拥挤程度最直观的指标密度是人群仿真的基础指标单位是“人/平方米”SimWalk 默认按网格统计。密度反映的是空间某一时刻的人群聚集程度但它的意义通常不能光看绝对值要结合服务水平LOS等级来解读。我常参考 SFPE 手册里的分级框架不同分级的含义大致为小于 0.5 人/平方米时基本自由行走1 到 2 人/平方米时开始明显受限超过 3 人/平方米时基本处于停滞状态。需要强调不同规范、不同地区和不同应用场景的阈值不完全一样理想的密度上限应按项目当地的标准来判断。做安全评估时如果你不附带这个分级表只看密度云图读者很难说出哪些区域算“危险”。这也是结果分析最常见的一个疏漏。2.2 速度与流量评价通行效率的关键数据除了密度速度和流量是另外两个核心指标。速度指标关注行走是否顺畅比如通道平均速度降到了 0.5 米/秒以下就说明拥堵已经形成。流量指标关注单位宽度通道的通过能力常见口径是“人/米/秒”或“人/米/分钟”它在瓶颈分析中特别关键。SimWalk 支持按网格输出速度和流量的统计值也支持对单个行人轨迹上的点计算瞬时速度。我的习惯是优先关注“流量”而不是速度因为流量是速度和密度的乘积关系能直观反映这个通道到底通得多好。一个 2 米宽的扶梯口如果仿真实测流量只有理论通行能力的一半那么问题大概率出在入口的进出流线交叉而不是扶梯本身这时你只需要调整一个出入口的栏杆布局可能就解决了一大半拥堵。2.3 疏散时间与出口通过量安全评估的硬指标疏散类项目里指标优先级最高的是疏散时间和出口通过量。总疏散时间直接对标消防设计规范出口通过量则能让你精确定位最弱势的疏散路线。SimWalk 在疏散模式下会记录每个行人的“起止时间”即开始疏散时间和到达安全区域的时间把这些数据按时间排列后可以生成疏散累积曲线。这里要注意一个实操细节疏散曲线横轴的“起始时间”应该统一否则会出现后来的行人疏散时间“比总疏散时间还长”的错觉。更严谨的处理方式是人为定义一个统一的疏散开始信号时间然后记录“从信号开始到该行人到达安全区”的耗时这样绘制的曲线才公平。2.4 输出数据的格式与单位口径先弄清楚单位再动手SimWalk 结果输出的格式通常包括文本/CSV类的网格统计、每个行人的轨迹文件、以及一些可视化快照。每个文件里包含的基础字段有 X/Y 坐标、时间帧、局部密度、速度、流量等。下游分析最怕的就是单位不一致比如速度可能用米/秒也可能用千米/小时网格密度可能是每平方米人数也可能是每格人数。我自己踩过这个坑导出的密度 CSV 里某个网格的数值看起来巨大后来发现那格是 1 平方米但统计单位是“每 0.25 平方米”导致全部数据都比预期高 4 倍。所以拿到 SimWalk 导出文件后的第一件事永远是检查表头和说明文件明确单位口径。如果需要换算随手在分析脚本里乘一个换算系数比事后核对十张图再发现错误要省很多时间。3. 可视化实操从SimWalk数据导出到能直接上报告的高质量图3.1 仿真结束后的数据导出流程SimWalk 在仿真完成后结果数据并不会自动生成一套完整的可视化图纸需要你主动选择需要的输出项。以一般版本的操作习惯来看仿真结束后进入结果/导出相关模块选择网格统计项设置网格尺寸和时间间隔再导出成 CSV 或文本文件。这里有两个参数对后来出图效果影响很大。第一个是网格大小网格太大密度热图糊成一片看不出局部瓶颈网格太小统计噪声大数据量也爆炸。我一般推荐网格步长取 0.5 米左右这个尺寸在建筑内部空间里既能保留通道细节又不会产生过大的波动。第二个参数是时间步长如果你想做动态序列图时间步长取 5 秒或 10 秒比较合理。步长太大峰值密度容易被平滑掉导致最高风险时段被掩盖。同理导出的轨迹文件里通常也包括每一帧的位置坐标用于绘制路径图。3.2 用Python对SimWalk导出数据进行清洗与统计拿到 CSV 后一般不会直接画图要先清洗和统计。我会用 Python 的 pandas 和 numpy 做这步先读取网格统计表按时间帧分组计算每个网格在整个仿真时长内的平均密度和峰值密度。import pandas as pd import numpy as np # 假设SimWalk导出的密度网格CSV含字段time_step, grid_x, grid_y, density df pd.read_csv(simwalk_density.csv) # 按网格坐标聚合计算平均密度和最大密度 avg_density df.groupby([grid_x, grid_y])[density].mean().reset_index() max_density df.groupby([grid_x, grid_y])[density].max().reset_index() # 合并到一张表便于后续出图 grid_stats avg_density.merge(max_density, on[grid_x, grid_y], suffixes(_avg, _max)) grid_stats.to_csv(grid_density_summary.csv, indexFalse)这里有个异常值处理的细节。SimWalk 在仿真开始阶段行人可能还没完全进入计算区域会有一两帧的密度值偏低仿真结束时同理。如果直接把全部时间帧都平均进去会把整体密度拉低。我的做法是过滤掉仿真开始的 5% 时间帧让分析窗口覆盖稳定运行区间。这个小处理不会显著改变结论但能让图更真实。3.3 密度热图SimWalk结果可视化的主力图型密度热图几乎是每一个仿真报告里都会出现的图型呈网格状色块分布。画这种图时推荐用 matplotlib 的 pcolormesh 或 imshow因为它们支持不规则网格和自定义颜色映射。import matplotlib.pyplot as plt import pandas as pd # 读上一步统计出的网格数据 grid pd.read_csv(grid_density_summary.csv) # 将网格坐标转为行列索引矩阵 x grid[grid_x].values y grid[grid_y].values z grid[density_avg].values # 网格尺寸0.5m计算画图用的边界 x_grid np.arange(x.min() - 0.25, x.max() 0.25, 0.5) y_grid np.arange(y.min() - 0.25, y.max() 0.25, 0.5) z_grid z.reshape((len(y_grid) - 1, len(x_grid) - 1)) fig, ax plt.subplots(figsize(10, 8)) # 使用类达广州规范配色的映射低密度蓝绿、高密度红褐 pcm ax.pcolormesh(x_grid, y_grid, z_grid, cmapYlOrRd, shadingauto) plt.colorbar(pcm, axax, labelDensity (persons/m²)) ax.set_xlabel(X (m)) ax.set_ylabel(Y (m)) ax.set_aspect(equal) plt.tight_layout() plt.savefig(density_heatmap.png, dpi300)这张图出来之后我建议立刻叠一下建筑平面底图把墙、门、楼梯的位置画出来。密度热图不叠底图读者根本不知道红色区域对应的是哪个具体位置。最简单的叠加方法是把建筑轮廓的坐标读取进来用 matplotlib 里的 Polygon 或 plot 再画一层黑色线框。一个可用的替代方案直接在分析软件里打开建筑底图再叠加导出的密度图导出最终合成图。我在项目中通常会用后者快速出草稿等配色和阈值确定后再用代码控制出正式图。3.4 速度场与轨迹流线理解拥堵原因的另一把钥匙密度热图告诉你哪里堵速度场告诉你为什么堵。用 matplotlib 的 quiver 画箭头场每个网格位置画一个箭头箭头的长短和颜色表示速度大小方向表示行人的主导运动方向。轨迹流线适合展示疏散路径是否合理。SimWalk 可以导出每个行人的轨迹坐标但千万注意几十万条轨迹直接画是不行的图上会黑成一团。我习惯先做抽样按行人 ID 每 10 个取一个或者使用密度阈值筛选出拥挤区域的轨迹。更高级一点用累计轨迹密度来表现“走廊利用率”——每条轨迹覆盖过的网格轨迹计数加一最后形成一张利用率分布图效果比单纯轨迹线更稳定、更像专业规划图里的“流量期望线”。3.5 进阶时序动态图与地理信息叠加如果你要做的汇报对象是非技术背景的业主静态的热图往往还不够他们更愿意看动态演化过程。SimWalk 自带 2D/3D 动态显示可以录屏但如果你想要高质量、可供报告使用的动态图我的做法是把每个时间步的密度网格批量导出成 PNG再用 ffmpeg 合成视频。ffmpeg -framerate 10 -i frame_%03d.png -c:v libx264 -pix_fmt yuv420p density_animation.mp4时序列图还有一个特别好用的简化技巧不挨个展示每一帧而是挑出 T0、T060秒、T0120秒三个平静转拥堵的关键帧放在同一张图里横向对比。这种表达方式省空间又精准讲述拥堵形成的全过程。此外SimWalk 支持把结果导出为与地理坐标相关的数据在大型片区级项目中可以导入 GIS 工具里与真实地形、建筑轮廓进行比例叠加方便向规划部门汇报。4. 常见问题排查与实操避坑记录4.1 导出的密度数值比预想低是不是仿真出了错有朋友遇到密度图上最大才 0.8 人/平方米但监控视频里明明看到人挤人。首先要排查统计口径确认是否用了瞬时密度而非平均密度或网格大小偏大导致“平均掉”了局部拥堵。其次要检查仿真的行人生成速率是否与真实客流匹配。常见错误是使用均匀生成方式旅客只在高峰时段瞬时生成仿真里的密度峰值自然不高。这个时候不要急着改图回到客流数据源头检查各入口的流量分配曲线。4.2 轨迹线一团乱麻图表没法看轨迹画出来像毛线球是因为抽样比例太高或者没有聚类处理。解决办法有两个一是按行人组别抽样比如按起点-终点组合各抽 10%保持不同流线的辨识度二是先把轨迹转成网格访问频次再画频次热力图。参考我做交通枢纽的经验后者在汇报里效果好得多因为它直接回答“空间利用是否均衡”而不只是提出“轨迹长什么样”。4.3 网格步长怎么定密度分布极其敏感同一个仿真网格步长 0.25 米和 1 米的结果看起来可能完全不一样。步长小了峰值密度偏高但热图噪声明显步长大了峰值密度偏低容易掩盖真实拥堵风险。我在实际项目里推荐用“通道宽度的一半”作为网格步长。比如通道宽 1 米就用 0.5 米网格如果是宽敞大厅步长可以放宽到 1 米。网格改小时相应地调整密度阈值如果能按服务水平分级来做颜色映射就不太容易受网格大小影响了。4.4 仿真结果与现场实测对不上最多的是速度对不上。SimWalk 里默认行人期望速度可能偏理想但现场人群里有老人、儿童、带行李旅客平均速度会明显下降。遇到这种情况不要只在后处理里改必须回到仿真参数里做敏感标定。实操是导出现场观测到的关键断面流量与仿真输出对比。如果流量偏差超过 15%优先调整行人组成和期望速度分布而不是调整模型的其他高级参数。我把每次这样标定的结论整理成速查表下次做同类型项目时可以直接引用。现象优先排查项次要排查项密度整体偏低网格步长偏大、时间窗口包含空载期行人生成速率不足、客流曲线输入有误热图噪声太大网格步长偏小统计时间间隔过短速度整体偏低行人组成缺少健步人群期望速度分布参数偏保守疏散总时间偏大出口选择逻辑受限出口宽度定义与实际不符轨迹图看不清抽样比例过大未按OD组合分组上色最后再分享一个让我少加班的小技巧每次评审前我会把 SimWalk 的默认密度配色替换成与规范一致的固定配色方案并且在图面上直接把分级色块对应的 LOS 等级标注出来。这样从图上就能直接读“这块区域属于什么风险级别”比让评审专家捧着规范表格自行对照要省太多沟通成本。结果分析从来不是把数据导出来贴到文档里就完事它是一场需要你主动“倒逼数据说话”的工程。机型不同、规范不同、汇报对象不同但把核心指标、单位口径和层次化的可视化这三点抓住你在任何人群仿真项目里都能把结果这一环节做得干净利落。