RawDump

网络转储(也称为 netstate 输出netstate dump)是 SUMO 中实现的第一个输出功能。它包含每个车道、每辆车以及每个仿真步的详细信息。由于其高详细程度,它非常灵活,但通常需要额外的编程来解析和过滤实际所需的信息。Simulation/Output/FCDOutput 具有类似的详细程度,但不会根据车辆所在的车道对其进行分组。

在仿真中实例化#

要强制 SUMO 构建包含网络转储的文件,请在命令行(或配置)参数中添加 --netstate-dump <FILE>(或 --ndump <FILE>--netstate <FILE>)。

或者,将该选项添加到配置文件中,例如:

<output>
   <netstate-dump value="<FILE>" />
</output>

<FILE> 是输出将写入的文件名。任何同名的其他文件都将被覆盖,目标文件夹必须存在。

生成的输出#

网络转储是一个 xml 文件,包含每个仿真步中网络的每条车道上的所有车辆。对于每辆车,都会写入其名称、速度及其在各自车道上的位置。一个原始转储文件如下所示:

<netstate>
   <timestep time="<TIME_STEP>">
      <edge id="<EDGE_ID>">
         <lane id="<LANE_ID>">
            <vehicle id="<VEHICLE_ID>" pos="<VEH_POSITION>" speed="<VEH_SPEED>"/>

            ... 如果该车道上还有更多车辆 ...

         </lane>

         ... 如果该车道还有更多车道 ...

         ... 如果当前该车道上有处于活动状态的人员或容器,则可选
         <person id="<ID>" pos="<OFFSET_FROM_EDGE_BEGIN>" speed="<SPEED>"/>
         ...
         <container id="<ID>" pos="<OFFSET_FROM_EDGE_BEGIN>" speed="<SPEED>"/>
         ...

      </edge>

      ... 更多车道 ....

   </timestep>

... 下一个仿真步 ...

</netstate>

Note

如果人员或容器在车辆内运输,它们将作为该车辆的子元素写入,而不是作为车道的子元素。

写入值的含义如下表所示。

名称 类型 描述
time (仿真) 秒 该 timestep 元素中描述的值对应的时间步
id id 车道/车辆的 id
pos m 在描述的时间步内,车辆在车道上的位置(前保险杠距离车道起点的距离)
speed m/s 在描述的时间步内,车辆的速度
posLat m 距离车道中心的偏移量(仅在使用子车道模型时)
personNumber # 车辆内人员的数量(不适用于 MESO
containerNumber # 车辆内容器的数量(不适用于 MESO
stage string 当前阶段的描述(仅适用于人员和容器)

附加选项#

选项 --netstate-dump.precision <INT> 控制在将位置和速度写入输出文件时的有效数字位数。选项 --netstate-dump.empty-edges <BOOL> 控制是否在输出中包含没有车辆的车道。

注意事项#

正如您可能想象的那样,这种输出非常冗长。它的主要缺点是生成文件的大小。很容易在几分钟内生成几个 GB 大小的文件。当然,可以编写一些很好的工具来解析该文件(使用 SAX 解析器)并生成一些有意义的信息,但我们不知道有谁做过这件事。另一个问题是,当必须写入如此大量的数据时,仿真的执行速度当然会下降。

通常,即使车道上没有车辆,也会写入所有车道。您可以使用布尔开关 --netstate-dump.empty-edges 更改此行为。在这种情况下,只会写入包含车辆的车道。