基本定义

以下描述了仿真模块 sumosumo-gui 所需的输入。

输入文件#

道路网络#

对于一次仿真,必须使用选项 --net-file <NETWORK_FILE>(或 -n <NETWORK_FILE>)提供一个 SUMO 道路网络。该网络通常使用 netconvertnetgenerate 构建。

交通需求(路径)#

必须提供要仿真的车辆。其描述通常包括车辆类型、车辆和车辆路径。路径通常使用选项 --route-files <ROUTES_FILE>[,<ROUTES_FILE>]*(或 -r <ROUTES_FILE>[,<ROUTES_FILE>]*)提供给仿真模块。如您所见,您可以在单次仿真运行中使用多个路径文件。

Caution

车辆元素(行程、车辆、流)必须按出发时间(depart / begin time)排序。

原因是路径文件是增量读取的,以节省内存并支持大型仿真。所有作为 --route-files <ROUTES_FILE>[,<ROUTES_FILE>]* 参数给出的文件都是分步读取的。从开始时间步开始,每 n 个时间步为接下来的 n 个时间步加载新的路径。n 可以使用 --route-steps <INT> 控制,其中 <=0 强制 sumo/sumo-gui 完全加载文件。仅获取接下来步骤的路径意味着车辆类型——或者可能是“全局”路径——必须在使用它们的路径之前给出。

您也可以将包含车辆定义的路径作为 additional-file 提供给 sumo/sumo-gui

Caution

vType 和命名路径必须位于引用这些类型和路径的车辆定义之前。

附加文件#

一个或多个 additional-file(s) 用于加载附加实体:

所有这些附加结构/定义都使用 --additional-files <FILE>[,<FILE>]* 提供给仿真。每个文件都被完全读入内存,并且文件列表从左到右处理。

解析顺序#

为了确保正确解析引用,了解何时加载什么非常重要。顺序如下:

  1. 读取网络
  2. 按照选项中给出的顺序读取附加文件(从上到下完全读取)
  3. 打开路径文件并读取前 n 步
  4. 每 n 个时间步,读取接下来 n 个时间步的路径

定义要仿真的时间段#

每次仿真都需要定义要仿真的时间段。这通过选项 --begin <TIME>(或简写为 -b <TIME>)和 --end <TIME>-e <TIME>)提供给 sumosumo-gui。请注意,是否给出 --end 选项会影响仿真行为。详细信息如下所述。

仿真从 --begin 给出的时间开始,默认为 0。所有出发时间(depart)早于开始时间的车辆都将被丢弃。

仿真逐个执行每个时间步。

仿真在以下情况下结束:

  • 使用 --end 给出了最终时间步,并且已达到该时间步(一步之后的时间 >= 结束时间)。
  • 未给出 --end 值,并且所有车辆都已仿真完毕。仿真的状态是最后一辆车离开仿真区域时的状态。如果 TraCI 连接处于活动状态,仿真将在最后一辆车之后继续(可能是“永远”)。
  • 通过 TraCI 接收到关闭命令。

定义时间步长#

sumo/sumo-gui 默认使用每秒一个时间步。您可以使用 --step-length <TIME> 选项覆盖此设置。<TIME> 通过给出 [0.001 到 1.0] 之间的秒数值来指定。

示例:--step-length 0.01 将使用 10ms 的时间步长运行仿真。

Caution

从技术上讲,可以使用更大的值,但许多跟驰模型未在大于 1 的值下进行测试,可能无法按预期工作。步长还设置了驾驶员反应时间的下限,当使用大于 1 的值而未调整其他模型参数(tau)时,这会增加碰撞的可能性。

设置较小的步长会产生许多后果:

  • 仿真需要更长的时间来模拟给定的时间量(因为需要更多的步骤来完成)
  • 生成的运动通常更平滑
  • 车辆插入和变道在给定时间内更容易成功,因为条件检查得更频繁
  • 车辆速度调整的频率会增加,除非通过设置 action-step-length 来防止(见下文)

定义动作步长#

指定选项 --default.action-step-length <TIME> 意味着车辆仅在给定长度的间隔内执行加速度调整或车道变更操作的计算,而不是在每个仿真步中执行(这是默认行为)。使用与仿真步长不同的动作步长会自动将积分方法切换为 'ballistic'(弹道式)。

选择大于仿真步长的动作步长可能会加速仿真,但请注意,大于假定反应时间 tau 的值可能会导致碰撞。有关详细信息,请参见车辆类型跟驰模型 参数的描述。

定义积分方法#

有两种可用的数值积分方法,用于控制仿真的动态更新。目前,默认是欧拉更新(Euler update),它认为车辆在一个时间步内的速度是恒定的。作为替代方案,SUMO 提供了弹道更新(ballistic update),它认为车辆在一个时间步内的加速度是恒定的。可以通过给出选项 --step-method.ballistic 或在配置文件中包含以下内容来激活它:

<processing>
   <step-method.ballistic value="true"/>
</processing>

特别是对于较大的时间步长(例如 1 秒),弹道更新对于基于连续动力学的跟驰模型会产生更真实的动态效果。另请参见 Martin Treiber, Venkatesan Kanagaraj, Comparing Numerical Integration Schemes for Time-Continuous Car-Following Models

弹道更新导致位置使用时间步之间的平均速度更新,而不是当前时间步的速度。考虑以下步长为 1s 的示例:

车辆在位置 x 处,以 4.5m/s 的速度行驶在步骤 t,并在步骤 t+1 刹车至速度 0。

  • 欧拉更新:车辆在步骤 t+1 停在位置 x(瞬时减速)
  • 弹道更新:车辆在步骤 t+1 停在位置 x + 2.25(连续减速)

Caution

弹道更新目前与子车道模型(sublane-model)结合使用时效果不佳。参见 #2581