目录
这项输出的值通过给出诸如平均车速、平均密度等宏观值来描述路网内的交通科学情况。这项输出可以针对车道、边缘或边缘组来生成。
下面将要描述的是,如何生成这两个输出以及它们包含哪些值。之后给出的是值的含义以及对于时间间隔(intervals)的描述。最后给出了一些约束输出的其他可能性。
!注意:
请注意这些输出也可以被称作“聚合的车道/边缘状态(aggregated lane/edge states)”“平均数据(meandata)”或“edge/lane-dumps”。
仿真示例
平均数据的定义方法
基于边的状态转储可以通过在sumo config(即仿真文件)中加入一个 additional-file 来定义,例如:
<additional>
<edgeData id="<MEASUREMENT_ID>" file="<OUTPUT_FILE>" .../>
</additional>
基于车道的转储则是这样的:
<additional>
<laneData id="<MEASUREMENT_ID>" file="<OUTPUT_FILE>" .../>
</additional>
!注意:
属性“id”仅用于区分有多个edgeData定义的输出。该值是任意的,不影响输出。
有关附加属性的更多信息可以参考下面的表格。
属性名称 | 值类型 | 描述 |
---|---|---|
id ID | id (string) | 所监测内容的ID。需要通过用户定义的ID来区分单个输出文件中的多组监测值。 |
file 文件 | filename | 输出文件的路径。这一路径可以是相对的。 |
freq 频率 | int (time) | 聚合周期(The aggregation period)内检测器收集到的值应被相加。如果没有被定义,从开始到结束之间的所有时间间隔都会被聚合。 |
begin 开始时间 | int (time) | 开始将数据写入输出文件的时间,此时间之前的时间间隔将不会被记录。如果未给定则默认为模拟开始时间。 |
end 结束时间 | int (time) | 停止写入时间,此时间之后的时间间隔将不会被记录。如果未给定则默认为模拟结束时间。 |
excludeEmpty 排除空(车道) | string (true, false, defaults) | 如果设置为 true,则不会写入在此期间未被车辆使用的边缘/车道;默认值是false。如果设置为“default”,取决于边缘长度和最大速度的 行程时间和速度的默认值 将被打印出来。 |
withInternal 加上内部 | bool | 如果设置为true,连接点内部的边/车道的相关信息(junction internal edges/lanes)也将被写入。默认为false。 (这句话的主语并不是很理解) |
maxTraveltime 最长旅行时间 | float (time) | 如果仅发生非常小的运动,则以秒为单位的最大行程时间;默认为100000。 |
minSamples 最小样本 | float (time) | 车辆必须在边缘/车道上运行(才能确定其为非空)的最小总秒数,默认>0。 |
speedThreshold 速度阈值 | float (m/s) | 认为车辆停止(状态)的最大车速,默认0.1。 The maximum speed to consider a vehicle halting; default 0.1. |
vTypes 车辆种类 | string | (输出)要考虑的车辆类型ID的用空格分隔的列表,""表示全部,默认为""。 |
trackVehicles 跟踪车辆 | bool | 是否要对聚合时间间隔中进入边缘/车道的所有车辆进行聚合检测。 whether aggregation should be performed over all vehicles that entered the edge/lane in the aggregation interval |
detectPersons 监测人员 | string list | 是否记录行人而非车辆。允许的值是 walk。 注意:更多的模式在计划中。 |
writeAttributes 写入的属性 | string list | 应被写入的属性名称组成的列表(默认为全部属性) |
edges 边缘 | string list | 限制输出到给定的边id列表 |
edgesFile 边缘文件 | filename | 将输出限制为给定的文件中给定的边列表(每行一个 edgeID 或以“edge:”为前缀的 id,就像在selection file中) |
aggregate 聚合的 | bool | 是否将所有边缘的交通数据聚合为一个值(边缘ID将为 |
生成的输出
基于边缘的网络状态
对于基于边缘的状态转储,输出文件如下列所示:
<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"/>
... more lanes...
</edge>
... more edges ...
</interval>
... further intervals ...
</meandata>
请注意,与上面的示例不一样的是,对于每个边缘,所有的值都在一行中报告。
值的说明
基于边缘的转储与基于车道的转储都以相同的方式进行值的计算:每辆车的移动——即使速度为0——都在间隔中被记录和保存。间隔后,这些值将会在归一化之后写入文件。在边缘转储的情况下,这些值不仅通过所收集的车辆移动次数与车道长度进行归一化,还通过边缘的车道数归一化。
写入的值的含义如下表所示:
名称 | 类型/单位 | 描述 |
---|---|---|
begin 开始 | (simulation) seconds | 开始记录数据的第一个时间步长 |
end 结束 | (simulation) seconds | 记录数据的最后一个时间步长 + DELTA_T |
edge@id 边缘的ID | (edge) id | 所报告的边缘的名称 |
lane@id 车道的ID | (lane) id | 所报告的车道的ID |
sampledSeconds 采样秒数 | s | 在测量间隔内,每秒钟出现在边缘/车道上的车辆数相加(如果一辆车进入/离开边缘/车道,则可能是亚秒级别)(不是很理解,单位不是s吗) |
traveltime 旅行时间 | s | 通过边缘/车道所需要的时间,请注意,这只是基于平均速度的估计值,而非车辆所需的准确时间。这个值基于车头部位通过边缘的时间。 |
overlapTraveltime 重叠的行程时间 | s | 完全通过边缘/车道所需的时间,请注意,这只是基于平均速度的估计,而不是车辆所需的确切时间。该值基于车辆的任何部分处于边缘的时间。 |
density 密度 | #veh/km | 边缘的车辆密度 |
laneDensity 车道密度 | #veh/km/lane | 边缘中每条车道的车辆密度 |
occupancy 占用率 | % | 边缘或车道的占用率,以%为单位。100%则表示车辆在边缘上一个接一个的排列(最小间隔为0) Occupancy of the edge/lane in %. A value of 100 would indicate vehicles standing bumper to bumper on the whole edge (minGap=0). |
waitingTime 等待时间 | s | 车辆被视为停止(低于速度阈值speedThreshold)的总时长(所有车辆的总合) |
timeLoss 时间损失 | s | 车辆因行驶速度低于预期而损失的总秒数(所有车辆的总和) |
speed 速度 | m/s | 所报告的时间间隔内边缘/车道上的平均速度。 注意:这是关于时间和空间的平均值(空间平均速度),而不是车辆的平均速度(时间平均速度)。由于慢速车辆会在边缘上花费更多时间,他们对于平均速度的影响会成比例性的增大。 Caution: This is an average over time and space (space-mean-speed), rather than a local average over the vehicles (time-mean-speed). Since slow vehicles spend more time on the edge they will have a proportionally bigger influence on average speed. |
departed 出发 | #veh | 在所述时间间隔内从边缘/车道出发的车辆数量 |
arrived 到达 | #veh | 在边缘车道上完成路线的车辆数量 |
entered 进入 | #veh | 从上游进入边缘/车道的车辆数量 |
left 离开的 | #veh | 通过向下游移动而离开边缘/车道的车辆数量 |
laneChangedFrom 从此变道的车辆数 | #veh | 从当前车道变道的车辆数量 |
laneChangedTo 变道至此的车辆数 | #veh | 变道至当前车道的车辆数量 |
vaporized 汽化(消失?) | #veh | 在此边缘蒸发的车辆数量(仅在 #veh > 0 时出现) The number of vehicles vaporized on this edge (only present if #veh > 0) |
teleported 传送 | #veh | 从此边缘传送的车辆数量(仅在 #veh > 0 时出现) The number of vehicles teleported from this edge (only present if #veh > 0) (上述两个属性可能是死锁现象出现时的属性) |
请注意,在统计车道平均数值的情况下,两个换道条目(的数值)与该边缘上的换道次数总和相等。此外,每条车道上的换道是分别独立计算的,这意味着,如果一辆车从车道1换至车道3,则会进行两次换道计数。
如何聚合/导出更多值
为了在更长的时间段内聚合相同边缘/车道的输出,可以将车辆计数结果简单相加,密度和占用率可以被简单地取平均值(如果时间间隔的长度是相等的话),速度则应当以sampledSecond的加权平均值作为权重。为了进一步整合旅行时间,需要首先计算平均速度,然后用边缘/车道的长度除以速度值。
对于多个边缘/车道的空间整合并没有这么容易,尤其是当他们是连续的时候,因为每个车辆都会在他所在的每一条车道上生成数据,即使他在多车道上行驶过也是如此。对于有许多小而快速移动的车辆的情况,这种误差可以忽略不计。但是如果你的仿真中有许多长而慢的车辆,你就不能想上面那样简单地整合。
从给定的数值中,可以得到以下测量值(period 表示聚合时间间隔的长度):
- 边缘车辆的平均数(#)
- Average number of vehicles on the edge (#) =
sampledSeconds / period
- Average number of vehicles on the edge (#) =
- 平均交通量(#/h)
- Average traffic volume (#/h) =
speed * 3.6 * density
- Average traffic volume (#/h) =
- 边缘/车道起点的平均交通量(#/h)
- Traffic volume at the begin of the lane / edge (#/h) =
3600 * entered / period
- Traffic volume at the begin of the lane / edge (#/h) =
- 边缘/车道起末端平均交通量(#/h)
- Traffic volume at the end of the lane / edge (#/h) =
3600 * left / period
- Traffic volume at the end of the lane / edge (#/h) =
- 总行驶距离(m)
- Total distance travelled (m) =
speed * sampledSeconds
- Total distance travelled (m) =
- 边缘长度
- Edge length =
sampledSeconds / period * 1000 / density
- Edge length =
以下的<edgedata>边缘数据都是合理的计数,因为他们只计算每辆车一次,但他们包括/派出了一些特殊情况。
- entered(进入)
- entered + departed(进入+出发)
- left(离开)
- left + arrived(离开+到达)
!注意:
当使用<lanedata>车道数据时,离开+到达 的总和包括了所有因换道而驶出该车道的车辆。而离开+到达+从此换道(left + arrived + laneChangedFrom)的总和,可能计算一个车辆多次。如果需要单条车道上的总计数,最好使用检测器 detector。
注意
- 默认情况下,所有边缘都被写入,即使是那些没有车辆行驶的边缘。如果车道/边缘没有收集到数据,则不会写入属性速度、行驶时间、密度、占用率和等待时间。可以通过将
excludeEmpty
属性设置为 true来禁止写入未使用的边缘/车道 。 - 即使在有
sampledSeconds
="0.00" 的边缘/车道上,由于sampledSeconds
的实际值可能是 0.001 并且在输出中被切断。为了在您考虑数据有效性之前定义最小样本数,请使用minSamples
来定义平均数值。 - 即使没有收集到数据 (
sampledSeconds
="0") ,出发(depart)和换道至此(laneChangedTo) 也可能并不是0,因为内部车道更改和出发发生在时间步的末尾。(这里不太理解) - 间隔末尾是是间隔开始 + 聚合时间(interval begin + aggregation time),这意味着在这些步骤中收集的值不包括时间间隔末尾本身。如果模拟在最后一个间隔结束之前结束,则该间隔将被修剪。
- 输出文件将会生成,不必早先存在,如果存在则将被覆盖且无任何警告。生成输出文件的文件夹必须存在。
- 如果您只需要有关特定时间段内网络状态的信息,您可以通过创建具有属性
begin=""
和end=""
的多个转储来限制转储的生成。它们都可能具有相同的 id 并写入相同的输出文件。
也可以看看
- 基于边缘/车道的车辆污染物排放输出 和基于边缘/车道的车辆噪声排放输出 具有相似的格式
- mpl_dump_onNet.py脚本mpl_dump_onNet.py可以将此输出的值显示为彩色网络(并且存在进一步的可视化工具 )。
- 您可以自动生成平均数据定义。有关详细信息,请参阅输出工具。