自 0.18.0 版本起,SUMO 支持加载和保存仿真状态。
保存#
在固定时间保存#
要在仿真期间的指定时间保存状态,请添加选项 --save-state.times。
sumo --save-state.times TIME1,TIME2,TIME3
默认情况下,状态将写入名为 <PREFIX>_<TIME><SUFFIX> 的文件,其中 <PREFIX> 可通过选项 --save-state.prefix 设置(默认为 state),<TIME> 为仿真时间,<SUFFIX> 为 .xml.gz 或 .xml,由选项 --save-state.suffix 控制(默认为 .xml.gz)。
Note
文件扩展名 '.xml.gz' 表示 gzip 压缩的 xml,所有 Sumo 应用程序均可直接使用,也可使用标准文件压缩工具解压缩。
使用选项 --save-state.times 时,也可使用选项 --save-state.files 指定输出文件。
sumo --save-state.files FILE1,FILE2,FILE3
以显式设置文件名。特别是,如果需要纯文本 xml 文件作为输出(而不是压缩格式 .xml.gz),则应给出文件名(后缀为 .xml)。
周期性保存#
或者,可以使用选项 --save-state.period <TIME> 来周期性地保存状态。 选项 -save-state.prefix 和 --save-state.suffix 的使用方法如上所述。
选项 --save-state.period.keep N 可用于删除除最后 N 个状态文件之外的所有文件。
手动保存#
sumo-gui 允许使用菜单选项 Simulation -> Save 保存状态文件。
通过 TraCI 保存#
函数 traci.simulation.saveState(FILENAME) 可用于从脚本触发保存。
其他选项#
- --save-state.rng: 保存随机数生成器状态
- --save-state.transportables: 保存人员和容器状态
- --save-state.constraints: 保存铁路信号约束
- --save-state.precision: 设置保存状态时的小数精度
加载#
选项 --save-state <FILE> 用于使用给定的状态文件初始化仿真。 建议使用保存状态文件时相同的输入文件启动仿真,并将选项 --begin 设置为保存状态时的时间。可以无误地添加其他文件(即更多车辆)。
如果设置了选项 --save-state.offset,从仿真状态加载的所有时间将按给定的量进行偏移。这可用于将午夜后的仿真秒重置为 0,并确保加载的车辆仍能正常运行。
选项 --save-state.remove-vehicles ID1,ID2,... 允许从加载的状态中移除车辆。这为通过再次使用 .rou.xml 文件插入选定车辆来重新定位它们提供了可能性。
通过 TraCI 加载#
有两种通过 TraCI 加载状态的方法:
traci.load(['-n', 'net.net.xml', '--load-state', FILENAME]): 重新加载整个仿真(包括重新加载路网)traci.simulation.loadState(FILENAME): 清除路网中的所有车辆和人员,然后加载状态。(避免重新加载路网)
第二种函数比第一种更快(或快得多),具体取决于路网的大小。
详情#
尚未出发的车辆不包含在仿真状态中,必须从输入文件加载。当从输入文件加载已在仿真状态中存在的车辆时,这些车辆会被自动忽略,且加载过程不会报错。
随机数生成器 (RNG)#
默认情况下,随机数生成器 的状态不会被保存。因此,从状态重新加载后,仿真行为将与原始仿真不同。
当设置选项 --save-state.rng 时,所有随机数生成器的状态将包含在状态中,并在加载时恢复。 保存此额外状态会增加约 500Kb 的开销。如果此开销过大,可以通过设置较低的 --thread-rngs 值(默认为 64)来减少。 该值不应低于用于路由或仿真的线程数(--threads、--device.rerouting.threads)。
Note
包含 RNG 状态的状态是平台相关的。这意味着您无法在 Linux 上加载 Windows 的 rng 状态,反之亦然。
已知问题#
- 无法仅从状态文件加载流(必须同时加载原始路径文件)
- laneChangeModel 的内部状态未保存
- carFollowModel 的内部状态未保存(并非所有模型都有此状态)。
- 停车区域内的确切位置 未保存
SUMO 的旧版本#
在 0.18.0 之前的版本中,一种可能的解决方法是在虚拟机 (VM) 中运行 SUMO,因为虚拟机的状态可以随时保存。在 Linux 上使用 VirtualBox 的测试表明,如果为虚拟机分配足够的硬件资源(例如,如果同时运行另一个程序通过 TraCI 与 SUMO 通信,则应为虚拟机分配足够的 CPU 核心),SUMO 在虚拟机中的运行速度不会明显慢于在主机上直接运行。
