加载#
车辆可以通过 XML 输入 加载,或者 通过 TraCI 在运行时添加。当从 XML 加载时,并非所有车辆都会一次性加载。相反,车辆会以块(chunks)的形式加载,块的大小可以通过选项 --route-steps 进行配置。这样做是为了在执行长时间模拟时节省内存。
一旦车辆被加载,就可以通过 TraCI 访问和操作(在某种程度上)。使用 'move to' 或 'move to XY' 函数,甚至可以强制将车辆插入路网中。
插入(出发)#
为了让车辆插入路网,必须满足一些必要的约束:
- 车辆(从其尾部到其前部位置 + minGap)不得与其他车辆相交(包括它们的 minGap)
- 车辆必须根据其 carFollowModel 与任何前导车辆保持安全距离
- 任何后随车辆必须根据其 carFollowModel 保持安全距离
- 车辆必须能够在其路线上为任何即将到来的非优先通行路口刹车
- 车辆必须能够在其路线上为任何预定的停车点刹车
如果车辆由于上述任何原因无法被插入,其插入将被延迟(见下文)。该 departDelay 会被记录在 行程信息输出 中,也可以在 sumo-gui 中通过车辆参数对话框进行检查。
关于位置、速度和出发时间的插入精确性质取决于 许多参数 以及路网的当前状态。
延迟出发#
如果在指定的出发时间没有足够的空间插入车辆,该车辆将被放入插入队列,并在随后的模拟步骤中重复尝试插入。如果使用了选项 --max-depart-delay <TIME>,车辆在指定的 <TIME> 秒后仍无法插入,则会被丢弃。
有两种方法可以将车辆插入模拟:
- 尝试在每个模拟步骤中插入每个车辆
- 对于每个有待插入车辆的边(edge),在其中一个车辆无法插入后,中止尝试插入车辆
在无拥堵的路网中,这些方法表现相似,但在拥堵的路网中,有大量车辆无法插入时,变体 2) 要快得多。在旧版本的 sumo 中,1) 是默认值,可以使用选项 --sloppy-insert 切换到 2)。自版本 0.18.0 起,变体 2) 是默认值,可以使用选项 --eager-insert 切换到 1)。
Caution
如果有许多边存在延迟插入,每个模拟步骤中的额外插入尝试可能会减慢模拟速度
调查插入延迟#
使用 sumo-gui 有几个选项可以显示插入延迟:
- 按 插入延迟 为车辆着色
- 按 插入积压 为街道着色
- 打开车辆统计列表,列出整个网络的 插入积压车辆 数量。
- 单个车辆的参数对话框列出 期望出发时间 和 出发延迟
以下模拟输出提供有关插入延迟的信息:
模拟步长的影响#
插入尝试只能在每个模拟步骤中发生。这可能导致插入间距出现伪影,因为在默认步长为 1s 时,(通常)太短,无法在连续的步骤中在同一出发位置插入车辆。 默认情况下,下一次尝试发生在第一辆车出发后 2 秒,这个间隔可能比 carFollowModel 要求的要大得多。有多种方法可以避免这种影响:
- 可以减小步长
- 必须通过以下任何一种方法修改插入位置
- 指定特定的 departPos
- 使用
departPos="last" - 设置选项 --extrapolate-departpos
强制插入 / 避免出发延迟#
通常建议采取以下补救措施来改善插入流:
- 在多车道道路上,确保所有车道都用于插入,例如通过设置
departLane="random"(或free或best)。使用departLane="best_prob"可实现最高的插入容量,这倾向于将较快的车辆放在超车道上(参见 容量比较) - 设置选项 --extrapolate-departpos
- 使用
departSpeed="avg"或departSpeed="last"插入(参见 容量比较)
对于专门的用例,以下提示可能有助于实现更多插入:
- 或者:结合使用
departPos="last"和departSpeed="desired":车辆位置将调整到前导车辆后方允许以期望速度行驶的最大位置 - 使用固定的 departSpeed(数值)插入并设置选项 --ignore-route-errors。 车辆将在指定时间以不安全的速度插入,如果紧急制动仍能允许无碰撞动态
- 使用 属性
insertionChecks禁用部分或全部插入检查 - 使用 traci.vehicle.moveTo 或 traci.vehicle.moveToXY 在指定时间和地点强制将车辆插入路网。
影响出发的全局选项#
- --random-depart-offset <TIME>: 随机延迟所有车辆的出发时间
- --max-num-vehicles <INT>: 限制路网中可能存在的车辆总数。 设置此选项可能导致延迟插入
- --max-depart-delay <TIME>: 在设定的时间后将车辆从插入队列中移除
- --eager-insert <BOOL>: 尝试插入每条边上所有延迟插入的车辆。默认情况下,每条边的插入在每个时间步中的第一次失败后停止
- --step-length <FLOAT>: 可以通过设置较小的步长来提高插入尝试的频率,也可以增加可能的车头时距数量(对于固定的 departPos)。
- --extrapolate-departpos <BOOL>: 如果车辆的出发时间是模拟步长的一个分数,则将其默认出发位置向下游移动。出发位置的偏移量与步长离散化产生的出发延迟成正比。
其他#
- 有关如何实现高插入流的提示,请参见 常见问题解答
- 车辆也可以通过使用 校准器 插入
- 即使在出发前也可能触发车辆重路由 当使用 device.rerouting 时
- 出发边可以在运行时确定,当使用 交通分配区 (TAZ) 时
- 使用不同选项和插入属性可实现的插入容量表
