校准器#
这些触发器类型的对象可以在 additional-file 中指定,允许动态调整交通流量、速度和车辆参数(vTypes)。此类对象的语法为:<calibrator id="<ID>" lane="<LANE_ID>" output="<OUTPUT_FILE>"/>。它们可用于根据感应线圈测量值修改仿真场景,也可用于模拟基于位置的驾驶行为变化。
校准器将移除超出指定流量的车辆,并且如果仿真的正常交通需求未达到指定的 vehsPerHour 数量,它将插入新车辆(指定类型的)。此外,边上的速度将被调整为指定的 speed,类似于可变限速标志的工作原理。
如果车道上的交通拥堵程度超出给定流量和速度的预期,校准器也会移除车辆。这确保了无效拥堵不会在校准器上游蔓延。此行为可通过属性 'jamThreshold' 控制(见下文)。
如果未给定目标流量,提供的类型信息将用于修改通过校准器的车辆类型。
<additional>
<vType id="t0" speedDev="0.1" speedFactor="1.2" sigma="0"/>
<route id="c1" edges="beg middle end rend"/>
<calibrator id="calibtest_edge" edge="beg" pos="0" output="detector.xml">
<flow begin="0" end="1800" route="c1" vehsPerHour="2500" speed="27.8" type="t0" departPos="free" departSpeed="max"/>
<flow begin="1800" end="3600" route="c1" vehsPerHour="2500" speed="15.0" type="t0" departPos="free" departSpeed="max"/>
</calibrator>
<calibrator id="calibtest_lane" edge="middle_1" pos="0" output="detector.xml">
<flow begin="0" end="1800" route="c1" vehsPerHour="600" speed="27.8" type="t0" departPos="free" departSpeed="max"/>
<flow begin="1800" end="3600" route="c1" vehsPerHour="800" speed="15.0" type="t0" departPos="free" departSpeed="max"/>
</calibrator>
</additional>
以下属性/元素用于校准器元素内:
| 属性名 (Attribute Name) | 值类型 (Value Type) | 描述 (Description) |
|---|---|---|
| id | id (string) | 校准器的 ID |
| edge | id (string) | 用于测量和校准流量的边的 ID。(必须指定 edge 或 lane 之一) |
| lane | id (string) | 用于测量和校准流量的车道的 ID(必须指定 edge 或 lane 之一) |
| pos | float | 校准器在指定车道上的位置(当前被忽略,参见 [1]) |
| period (alias freq) | float | 校准尝试之间的时间间隔。默认为步长。设置较高的值会限制最大可实现流量 |
| routeProbe | id (string) | routeProbe 元素的 ID,用于确定生成车辆的路线分布。 |
| jamThreshold | float | 用于检测和清除意外拥堵的阈值,如果平均边速度低于 FLOAT * speedLimit。范围 [0, 1]。默认值:0.5(在中观模型中为 0.8) |
| output | file (string) | 用于写入校准器信息的输出文件或 NULL |
| vTypes | string | 考虑的车辆类型 ID 的空格分隔列表(用于计数/移除/类型修改),"" 表示所有;默认 ""。 |
作为校准器定义的子元素定义的 flow 元素遵循通用的流量定义格式。唯一的区别是,必须给定属性 vehsPerHour 或 speed 或 type(或这些属性的任意组合)。
默认情况下,边校准器将使用 departLane="free",而车道校准器将使用 departLane="x",其中 x 是校准器车道的车道索引。所有校准器默认为 departSpeed="max"。
插入新车辆的决策#
区间 (begin, end) 定义了进行校准的时间。区间的长度也定义了比较观测流量和期望流量的聚合周期。校准的目标是确保在区间结束时插入正确数量的车辆。同时,应尽可能保留现有交通的时空结构。
使用较短或较长的校准区间存在权衡。
- 使用较短的连续区间时,可能会发生车辆先被移除随后又被插入的情况,因为它们没有以均匀密度到达
- 使用较长的区间时,可能会发生车辆插入非常晚的情况,因为校准器试图等待可能仍然会出现的现有车辆
period 属性定义了检查插入车辆的频率。此值默认为仿真步长。较大的值可以节省计算时间,但也可能导致插入车辆的聚类更紧密。
决定何时确切插入(和移除)车辆的算法在 Erdmann, Jakob (2012) Online-Kalibrierung einer Mikroskopischen Verkehrssimulation. ViMOS 2012, 29.11.2012, Dresden, Deutschland. 中有描述。
生成车辆的路线#
每当给定区间内的测量流量低于指定流量时,就会插入新车辆。如果指定了 routeProbe 属性,则从命名的路线探测器的分布中采样路线。否则,使用流量的 route 属性。请注意,此值也可以指定路线分布的名称。
仅校准流量#
如果在 <flow> 定义中省略了属性 'speed',校准器将仅通过移除或插入车辆来影响流量:
<additional>
<vType id="t0" speedDev="0.1" speedFactor="1.2" sigma="0"/>
<route id="c1" edges="beg middle end rend"/>
<calibrator id="calibtest_edge" edge="beg" pos="0" output="detector.xml">
<flow begin="0" end="1800" route="c1" vehsPerHour="2500" type="t0"/>
<flow begin="1800" end="3600" route="c1" vehsPerHour="2500" type="t0"/>
</calibrator>
</additional>
仅校准速度#
如果在 <flow> 定义中仅给定属性 'speed',校准器的作用类似于 variableSpeedSign:
<additional>
<calibrator id="calibtest_edge" edge="beg" pos="0" output="detector.xml">
<flow begin="0" end="1800" speed="10"/>
<flow begin="1800" end="3600" speed="20"/>
</calibrator>
</additional>
校准车辆类型#
当校准器流量定义时没有属性 vehsPerHour 但有属性 type 时,这就定义了一个类型校准器。
这种类型的校准器将修改所有通过车辆(或所有匹配校准器 vTypes 属性的车辆)的类型。正常行为是用流量元素中设置的类型替换通过车辆的类型。
Note
校准类型时,可以从流量定义中省略 'route' 属性。
Caution
类型修改发生在车辆进入校准器边时,无论配置的校准器位置如何。
Caution
类型校准目前不适用于中观模型。
类型相关的映射#
如果交通包含多种车辆类型(例如乘用车和卡车),可能需要:
- 仅修改部分观测到的类型
- 执行相关映射:carType -> carType2,truckType -> truckType2
两者都可以通过使用校准器的 vTypes 属性使其仅应用于类型子集来实现。对于相关映射,可以定义多个校准器(每个具有不同的 vTypes 属性),如下例所示:
<additional>
...
<calibrator id="forCars" edge="E1" pos="0" vTypes="myCarType">
<flow begin="0" end="1800" type="myCarType2"/>
</calibrator>
<calibrator id="forTrucks" edge="E1" pos="0" vTypes="myTruckType">
<flow begin="0" end="1800" type="myTruckType2"/>
</calibrator>
</additional>
如果仿真中有许多不同的车辆类型,为每个 vType 创建一个校准器可能定义起来很麻烦。在这种情况下,最好定义类型分布之间的映射,如下所述。
vTypeDistributions 之间的映射#
如果满足以下条件,则会激活特殊行为:
- 流量元素中的 type 引用了 vTypeDistribution
- 通过车辆的类型是从 vTypeDistribution 中抽取的
- 两个 vTypeDistributions 具有相同数量的成员类型
在这种情况下,通过车辆的新类型将映射到新 vType 分布中的特定类型:
- 将计算原始 vTypeDistribution 中实际车辆类型的索引
- 新 vTypeDistribution 中具有该索引的类型将用作新的车辆类型
示例路线文件输入:
<vTypeDistribution id="dist1">
<vType id="car" probability="70"/>
<vType id="truck" maxSpeed="10" probability="30" vClass="truck"/>
</vTypeDistribution>
示例附加文件输入:
<vTypeDistribution id="bad_weather">
<vType id="car2" speedFactor="0.8" decel="3"/>
<vType id="truck2" decel="2" tau="1.5" vClass="truck"/>
</vTypeDistribution>
<calibrator id="c1" lane="middle_0" pos="0" output="detector.xml">
<flow begin="900" end="1800" route="r1" type="bad_weather"/>
</calibrator>
在此示例中,所有汽车将被映射到较慢的汽车(类型 'car' 到 'car2'),所有卡车将被映射到保持更大间距的卡车。
在交叉路口上校准#
您可以通过以下方式为整个交叉路口定义类型校准:
<additional>
<calibrator id="cars" node="J1" pos="0">
<flow begin="0" end="1800" type="myNewCarType"/>
</calibrator>
<calibrator id="carsUndone" node="J2" pos="0" local="true">
<flow begin="0" end="1800" type="myNewCarType2"/>
</calibrator>
</additional>
这将在车辆进入接近交叉路口的边之一时更改车辆类型。上面带有 local 属性的第二个变体还将在车辆离开交叉路口的任何出边时撤销更改(恢复为原始类型)。与通用类型校准一样,pos 属性被忽略。
基于流量测量构建不依赖路线知识的场景#
Note
routeSampler 工具提供了更简单、更稳健的方法。
由于校准器能够将较高或较低的流量适应到指定值,因此可用于将(几乎)任意的交通需求适应到给定的测量集。因此,从测量值构建场景的一种策略是,生成随机交通并使用校准器结合路线探测器。
每个给定测量值的边都应接收一个校准器和一个路线探测器。一旦第一辆车通过路线探测器,校准器就能够使用该车辆的路线。为了使校准器能够在第一辆车之前发挥作用,它需要一个回退路线,该路线只需包含单个边(即放置校准器的边)。
示例 additional-file:
<additional>
<vType id="t0" speedDev="0.1"/>
<routeProbe id="cali_edge1_probe" edge="edge1" period="60" file="output.xml"/>
<route id="cali1_fallback" edges="edge1"/>
<calibrator id="cali_edge1" edge="edge1" pos="0" output="detector.xml" routeProbe="cali_edge1_probe">
<flow begin="0" end="1800" route="cali1_fallback" vehsPerHour="2500" speed="27.8" type="t0" departPos="free" departSpeed="max"/>
<flow begin="1800" end="3600" route="cali1_fallback" vehsPerHour="2500" speed="15.0" type="t0" departPos="free" departSpeed="max"/>
</calibrator>
</additional>
使用随机需求以及这些 <calibrator> 和 <routeProbe> 定义运行仿真,将实现交通在每个校准器边处匹配指定流量的仿真。然而,校准器后方(或之间)的交通流的真实性取决于随机路线与现实世界路线的拟合程度。这种拟合的重要性随着校准器边之间网络的规模和复杂性而增加。
