此输出中的值通过提供平均车速、平均密度等宏观值,从交通科学的角度描述网络内的状况。此输出可以针对车道、路段或路段组生成。
下文将描述如何生成这两种输出以及它们包含的值。随后将给出这些值的含义以及对时间间隔的描述。最后,还将给出一些限制输出的附加可能性。
Note
请注意,这些输出也被称为“聚合车道/路段状态”、“平均数据”或“路段/车道转储”。
在仿真中实例化#
平均数据定义#
基于路段的状态转储在 additional-file 中定义:
<additional>
<edgeData id="<MEASUREMENT_ID>" file="<OUTPUT_FILE>" .../>
</additional>
对于基于车道的转储,只需编写:
<additional>
<laneData id="<MEASUREMENT_ID>" file="<OUTPUT_FILE>" .../>
</additional>
定义的文件可以通过 sumo 选项 --additional-files FILENAME 加载,或者在 .sumocfg 文件中使用 <additional-files value="FILENAME"/> 声明。
Note
属性 'id' 仅用于在有多个 edgeData 定义时区分输出。该值在其他情况下是任意的,不会影响写入的输出。
有关附加属性,请参见下表。
| 属性名称 | 值类型 | 描述 |
|---|---|---|
| id | id (字符串) | 此测量集的 id。此用户定义的 id 用于在单个输出文件中区分多个测量集。 |
| file | 文件名 | 输出文件的路径。路径可以是相对路径。 |
| period (别名 freq) | int (时间) | 探测器收集的值的聚合周期。如果未给出,则聚合从开始到结束的整个时间间隔(见下文)。 |
| begin | int (时间) | 开始写入的时间(在此时间之前开始的间隔将被丢弃)。如果未给出,则使用仿真的开始时间。 |
| end | int (时间) | 结束写入的时间(在此时间或之后开始的间隔将被丢弃)。如果未给出,则使用仿真的结束时间。 |
| excludeEmpty | 字符串 (true, false, defaults) | 如果设置为 true,则在此期间未被车辆使用的路段/车道将不会被写入;默认: false。如果设置为 "defaults",则会根据路段长度和最大速度打印出行程时间和速度的默认值。 |
| withInternal | bool | 如果设置,交叉口内部路段/车道也将被写入;默认: false。 |
| maxTraveltime | float (时间) | 当仅发生微小移动时写入的最大行程时间(秒);默认 100000。 |
| minSamples | float (时间) | 车辆在路段/车道上的总秒数的最小值,以将其视为非空;默认: >0。 |
| speedThreshold | float (m/s) | 考虑车辆停止的最大速度;默认 0.1。 |
| vTypes | 字符串 | 考虑的车辆类型 id 的空格分隔列表。如果未给出,将考虑所有 vTypes。 |
| trackVehicles | bool | 是否对在聚合间隔内进入路段/车道的所有车辆执行聚合 |
| detectPersons | 字符串列表 | 是否记录行人而不是车辆。允许的值是 walk。 注意: 计划支持更多模式 |
| writeAttributes | 字符串列表 | 应写入的属性名称列表(默认为所有属性) |
| edges | 字符串列表 | 将输出限制为给定的路段 id 列表 |
| edgesFile | 文件名 | 将输出限制为文件中给出的路段列表(每行一个 edgeID,或带有 'edge:' 前缀的 id,如选择文件中所示) |
| aggregate | bool | 是否将所有路段的交通统计聚合为单个值(路段 id 将为 AGGREGATED)。 |
简化定义#
如果不需要上述任何附加属性,可以通过设置以下选项之一来声明平均数据定义,而无需定义附加文件:
- --edgedata-output FILENAME
- --lanedata-output FILENAME
生成的定义将分别命名为 DEFAULT_EDGEDATA 和 DEFAULT_LANEDATA,并将聚合整个仿真长度的值(没有交通的路段将不会包含在输出中)。
生成的输出#
基于路段的网络状态#
对于基于路段的状态转储,输出文件将如下所示:
<meandata>
<interval begin="<INTERVAL_BEGIN>" end="<INTERVAL_END>" id="<MEASUREMENT_ID>">
<edge id="<EDGE_ID>" sampledSeconds="<COLLECTED_VEHICLE_SECONDS>" \
traveltime="<MEAN_TRAVEL_TIME>" \
density="<MEAN_DENSITY>" occupancy="<MEAN_OCCUPANCY>" \
waitingTime="<TOTAL_WAITING_TIME>" speed="<MEAN_SPEED>" \
departed="<EMITTED_VEH_NUMBER>" arrived="<ARRIVED_VEH_NUMBER>" \
entered="<ENTERED_VEH_NUMBER>" left="<LEFT_VEH_NUMBER>" \
laneChangedFrom="NUMBER_OF_LANE_LEAVERS" laneChangedTO="NUMBER_OF_LANE_ENTERER"/>
... more edges ...
</interval>
... further intervals ...
</meandata>
请注意,与上面的示例相反,对于每个路段,所有值都在一行中报告。
基于车道的网络状态#
生成的输出如下所示:
<meandata>
<interval begin="<INTERVAL_BEGIN>" end="<INTERVAL_END>" id="<MEASUREMENT_ID>">
<edge id="<EDGE_ID>">
<lane id="<LANE_ID>" sampledSeconds="<COLLECTED_VEHICLE_SECONDS>" \
traveltime="<MEAN_TRAVEL_TIME>" \
density="<MEAN_DENSITY>" occupancy="<MEAN_OCCUPANCY>" \
waitingTime="<TOTAL_WAITING_TIME>" speed="<MEAN_SPEED>" \
departed="<EMITTED_VEH_NUMBER>" arrived="<ARRIVED_VEH_NUMBER>" \
entered="<ENTERED_VEH_NUMBER>" left="<LEFT_VEH_NUMBER>" \
laneChangedFrom="<NUMBER_OF_LANE_LEAVERS>" laneChangedTo="<NUMBER_OF_LANE_ENTERER>" \
speedRelative="<MEAN_SPEED_RELATIVE>" />
... more lanes...
</edge>
... more edges ...
</interval>
... further intervals ...
</meandata>
请注意,与上面的示例相反,对于每个车道,所有值都在一行中报告。
值描述#
路段转储和车道转储的计算方式相同:在间隔期间记录并保存每个车辆移动——即使是那些 v=0 的移动。间隔过去后,这些值在归一化后被写入文件。
关于 edgeData density,值通过收集的车辆移动次数和车道长度进行归一化。对于 laneDensity,它们还通过路段的车道数进行归一化。
写入值的含义如下表所示。
| 名称 | 类型 | 描述 |
|---|---|---|
| begin | (仿真) 秒 | 收集值的第一个时间步 |
| end | (仿真) 秒 | 收集报告值的最后一个时间步 + DELTA_T |
| edge@id | (路段) id | 报告路段的名称 |
| lane@id | (车道) id | 报告车道的名称 |
| sampledSeconds | s | 在测量间隔内,每秒出现在路段/车道上的车辆数量之和(如果车辆进入/离开路段/车道,则可能是亚秒)。 |
| traveltime | s | 通过路段/车道所需的时间,请注意,这只是基于平均速度的估计值,而不是车辆所需的确切时间。该值基于车辆前端通过路段所需的时间。 |
| overlapTraveltime | s | 完全通过路段/车道所需的时间,请注意,这只是基于平均速度的估计值,而不是车辆所需的确切时间。该值基于车辆的任何部分在路段上的时间。 |
| density | #veh/km | 路段上的车辆密度 |
| overlapDensity | #veh/km | 路段上的车辆密度。如果车辆的任何部分沿其长度接触路段,则计算该车辆。不应用于流量计算 |
| laneDensity | #veh/km/lane | 路段上每车道的车辆密度 |
| occupancy | % | 路段/车道的占用率(%)。值为 100 表示车辆在整个路段上首尾相接地停止(minGap=0)。 |
| waitingTime | s | 车辆被视为停止(速度 < speedThreshold)的总秒数。对所有车辆求和 |
| timeLoss | s | 由于以低于期望的速度行驶而损失的总秒数(对所有车辆求和) |
| speed | m/s | 报告间隔内路段/车道上的平均速度。 注意: 这是时间和空间的平均值(空间平均速度),而不是车辆的局部平均值(时间平均速度)。由于慢速车辆在路段上停留的时间更长,它们将对平均速度产生按比例更大的影响。 |
| speedRelative | - | 平均速度值(见上文)与车道限速的商 |
| departed | #veh | 在所述间隔内发射到路段/车道上的车辆数量 |
| arrived | #veh | 在路段车道上完成其路线的车辆数量 |
| entered | #veh | 通过从上游移动而进入路段/车道的车辆数量 |
| left | #veh | 通过向下游移动而离开路段/车道的车辆数量 |
| laneChangedFrom | #veh | 从该车道变更出去的车辆数量 |
| laneChangedTo | #veh | 变更到该车道的车辆数量 |
| vaporized | #veh | 在该路段上蒸发的车辆数量 (仅当 #veh > 0 时存在) |
| teleported | #veh | 从该路段传送的车辆数量 (仅当 #veh > 0 时存在) |
| flow | #veh/小时 | 每小时通过该路段的车辆数量。在位置 0 之后出发或在路段结束之前到达的车辆将按比例折扣 |
请注意,在 edge 平均数据的情况下,两个 laneChanged 条目等于该路段上的车道变更总数。此外,每个车道变更都是单独计算的,这意味着如果一辆车从车道 1 变更到车道 3,它将产生两个车道变更计数。
如何聚合/派生更多值#
为了在更大的时间段内聚合相同路段/车道的输出,只需对计算车辆的值求和,密度和占用率可以简单地平均(如果间隔长度相等),速度应使用 sampledSeconds 作为权重进行加权平均。要进一步聚合行程时间,首先计算平均速度,然后用速度除以路段/车道长度。
空间聚合(跨多个路段或车道)并不容易,特别是如果它们是连续的,因为每个车辆都会在其所在的每个车道上生成数据,即使它在多个车道上也是如此。在许多快速移动的短车情况下,误差可以忽略不计,但如果车辆又长又慢,则不能按上述方式聚合。
可以从给定的值派生以下测量值(周期表示聚合间隔的长度):
- 路段上的平均车辆数 (#) =
sampledSeconds / period - 平均交通量 (#/h) =
speed * 3.6 * density - 车道/路段起点的交通量 (#/h) =
3600 * entered / period - 车道/路段终点的交通量 (#/h) =
3600 * left / period - 行驶的总距离 (m) =
speed * sampledSeconds - 路段长度 =
sampledSeconds / period * 1000 / density
有时人们想知道有多少车辆在路段上。此值的准确定义取决于如何计算出发、到达和变更车道的车辆。每辆车要么在 arrived、left 或 laneChangedFrom 中,每辆车也要么在 departed、entered 或 laneChangedTo 中。但是,如果车辆执行了来回车道变更,则可能在 laneChangedFrom 和 laneChangedTo 中被多次计算。
以下 <edgeData> 值都是合理的计数,因为它们每个车辆只计算一次,但它们包括/排除了一些特殊情况。
- entered
- entered + departed
- left
- left + arrived
Note
使用 <laneData> 时,left + arrived 的总和排除了所有通过变更车道离开车道的车辆。而 left + arrived + laneChangedFrom 的总和可能会多次计算车辆。如果需要车道上的总计数,最好使用探测器。
注意事项#
- 默认情况下,所有路段都会被写入,即使没有车辆在上面行驶。如果车道/路段没有收集数据,则不会写入属性 speed、traveltime、density、occupancy 和 waitingTime。可以通过将
excludeEmpty属性设置为 true 来禁用写入未使用的路段/车道。 - 即使在 sampledSeconds="0.00" 的车道/路段上,因为实际的 sampledSeconds 数可能是 0.001,并在输出中被截断。要在考虑数据有效之前定义最小样本数,请在平均数据定义中使用
minSamples。 - 即使没有收集数据(sampledSeconds="0"),departed 和 laneChangedTo 也可能不为 0,因为内部车道变更和出发发生在时间步的末尾。
- 间隔结束是间隔开始 + 聚合时间,意味着值是在这些步骤内收集的,不包括结束时间本身。如果仿真在最后一个间隔结束之前结束,则该间隔将被修剪。
- 输出文件将被生成,不必预先存在,如果存在将被覆盖而不发出任何警告。输出文件所在的文件夹必须存在。
- 如果只需要特定时间段内的网络状态信息,可以通过创建多个具有
begin=""和end=""属性的转储来限制转储的生成。它们都可以具有相同的 id 并写入同一个输出文件。
可视化/绘图#
- sumo-gui 可以加载 edgeData 文件,并根据其任何属性为网络路段/车道着色
- sumo-gui 可以在仿真运行时根据收集的任何属性为路段/车道着色
- netedit 可用于加载/查看/编辑 edgeData 文件
- mpl_dump_onNet.py 脚本可以将此输出的值显示为彩色网络(并且存在更多可视化工具)。
- plotXMLAttributes 可以提取和绘制值,例如下面的基本图

另请参阅#
- 基于路段/车道的车辆污染物排放输出 和 基于路段/车道的车辆噪声排放输出,它们具有类似的格式
- 您可以自动生成平均数据定义。有关更多信息,请参阅输出工具。
