基于车道或路段的交通度量

此输出中的值通过提供平均车速、平均密度等宏观值,从交通科学的角度描述网络内的状况。此输出可以针对车道、路段或路段组生成。

下文将描述如何生成这两种输出以及它们包含的值。随后将给出这些值的含义以及对时间间隔的描述。最后,还将给出一些限制输出的附加可能性。

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_EDGEDATADEFAULT_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

有时人们想知道有多少车辆在路段上。此值的准确定义取决于如何计算出发、到达和变更车道的车辆。每辆车要么在 arrivedleftlaneChangedFrom 中,每辆车也要么在 departedenteredlaneChangedTo 中。但是,如果车辆执行了来回车道变更,则可能在 laneChangedFromlaneChangedTo 中被多次计算。

以下 <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 可以提取和绘制值,例如下面的基本图

另请参阅#