交通信号灯

SUMO 提供了一些在仿真过程中保存交通信号灯状态的方法,该功能主要用于评估自适应交通信号灯算法。我们现在将描述这些输出。

TLS 状态#

在仿真中实例化#

要启用写入 tls 状态信息,您必须在其中一个附加文件中添加以下定义:

<timedEvent type="SaveTLSStates" source="<TLS_ID>" dest="<OUTPUT_FILE>"/>

其中的属性含义如下:

属性名称 值类型 描述
type 枚举 (字符串) 事件触发的类型;此处始终为 "SaveTLSStates"。
dest 文件名 保存状态的目标文件。
source 引用的 tls id 要写入状态的交通信号灯的 id。如果未给出,将保存所有 tls。
saveDetectors 布尔值 是否保存检测器状态。
saveConditions 布尔值 是否保存条件状态。

生成的输出#

输出如下所示:

<tlsStates>
   <tlsState time="<SIM_STEP>" id="<TLS_ID>" programID="<TLS_SUBID>" phase="<PHASE_INDEX>" state="<STATE>"/>
   ... further states ...
</tlsStates>

状态在每个仿真步长保存。状态本身被编码为字符 'G'、'Y' 和 'R' 的列表,分别代表“绿”、“黄”和“红”,参见 Simulation/Traffic_Lights。每个字符描述一个由交通信号灯控制的连接(link)。只保存当前程序的状态(另请参阅“添加新程序”)。属性含义如下:

名称 类型 描述
time (仿真) 秒 生成此条目的仿真时间
id id 负责该连接的 tls 的 id。
programID id 负责该连接的 tls 的子 id(当前)。
phase uint 程序中报告相位的索引
state id 当前状态

可选输出#

如果设置了 'saveDetectors' 或 'saveConditions' 属性,则会将附加属性写入输出。 这些属性仅针对由检测器控制的交通信号灯和具有自定义切换规则的交通信号灯写入。

元素 名称 类型 描述
tlsStates detectors 列表 (字符串) 控制此交通信号灯的所有检测器的 ids
tlsState detectors 列表 (整数) 控制此交通信号灯的所有检测器的激活状态
tlsStates conditions 列表 (字符串) 控制此交通信号灯的所有(可见)条件的 ids
tlsState conditions 列表 (整数) 控制此交通信号灯的所有(可见)条件的值

TLS 切换#

在仿真中实例化#

此输出包含有关连接(车道到车道的连接)的绿灯相位的信息。每个绿灯相位由其开始、结束和持续时间描述。当连接的绿灯相位结束时,会将条目写入文件。要启用写入 tls 切换信息,您必须在其中一个附加文件中添加以下定义:

<timedEvent type="SaveTLSSwitchTimes" source="<TLS_ID>" dest="<OUTPUT_FILE>"/>

其中的属性含义如下:

属性名称 值类型 描述
type 枚举 (字符串) 事件触发的类型;此处始终为 "SaveTLSSwitches"。
dest 文件名 保存状态的目标文件。
source 引用的 tls id 要写入状态的交通信号灯的 id。如果未给出,将保存所有 tls。

生成的输出#

输出如下所示:

<tlsSwitches>
   <tlsSwitch tls="<TLS_ID>" programID="<TLS_SUB_ID>" \
      fromLane="<LINKS_SOURCE_LANE>" toLane="<LINK_DESTINATION_LANE>" \
      begin="<BEGIN_OF_GREEN_PHASE>" end="<END_OF_GREEN_PHASE>" \
      duration="<DURATION_OF_GREEN_PHASE>"/>
   ... further switch points ...
</tlsSwitches>

每个条目写入单行。值的含义如下:

名称 类型 描述
tls id 负责该连接的 tls 的 id。
programID id 负责该连接的 tls 的子 id(当前)。
fromLane id 连接起始车道的 id。
toLane id 连接终止车道的 id。
begin (仿真) 秒 该连接上一个绿灯相位的开始时间。
end (仿真) 秒 该连接上一个绿灯相位的结束时间。
duration (仿真) 秒 该连接上一个绿灯相位的持续时间。

TLS 切换状态#

在仿真中实例化#

此输出保存 tls 状态,与 TLS States - 输出类似,但不是每秒保存一次,而仅在相位或程序(另请参阅“添加新程序”)发生变化时保存。通过在其中一个附加文件中添加以下定义来实例化输出:

<timedEvent type="SaveTLSSwitchStates" source="<TLS_ID>" dest="<OUTPUT_FILE>"/>

其中的属性含义如下:

属性名称 值类型 描述
type 枚举 (字符串) 事件触发的类型;此处始终为 "SaveTLSSwitchStates"。
dest 文件名 保存状态的目标文件。
source 引用的 tls id 要写入状态的交通信号灯的 id。如果未给出,将保存所有 tls。

生成的输出#

输出如下所示:

<tlsStates>
   <tlsState time="<SIM_STEP>" id="<TLS_ID>" programID="<TLS_SUBID>" phase="<PHASE_INDEX>" state="<STATE>"/>
   ... further states ...
</tlsStates>

每个条目写入单行。值的含义与 SaveTLSStates-output 中的值相同。

TLS 程序#

在仿真中实例化#

要启用写入 tls 程序信息,您必须在其中一个附加文件中添加以下定义:

<timedEvent type="SaveTLSProgram" source="<TLS_ID>" dest="<OUTPUT_FILE>"/>

其中的属性含义如下:

属性名称 值类型 描述
type 枚举 (字符串) 事件触发的类型;此处始终为 "SaveTLSProgram"。
dest 文件名 保存状态的目标文件。
source 引用的 tls id 要写入状态的交通信号灯的 id。如果未给出,将保存所有 tls。

生成的输出#

输出是一个可加载的 tlLogic 元素,记录了交通信号灯的完整状态序列:

<tlsStates>
   <tlLogic id="<TLS_ID>" programID="<TLS_SUBID>" type="static/>
      <phase state="..." duration="..."
      ...
   </tlLogic>
</tlsStates>

每当状态发生变化时,就会保存一个新的相位。每当 programID 发生变化时,就会写入一个新的 tlLogic。

耦合的车道区域检测器#

在仿真中实例化#

可以添加与交通信号灯耦合的 E2 检测器。然后,tls 用于确定间隔(聚合)时间,而不是给出固定的聚合时间。在这种情况下,每次交通信号灯切换时都会生成输出。要使用此功能,请将属性 tl="<TL_ID>" 设置为所需的交通信号灯 id,而不是属性 <period>

<e2Detector id="<ID>" lane="<LANE_ID>" pos="<POSITION_ON_LANE>" length="<DETECTOR_LENGTH>" tl="<TL_ID>" file="<OUTPUT_FILE>" [timeThreshold="<FLOAT>"] [speedThreshold="<FLOAT>"] [jamThreshold="<FLOAT>"]/>

另一项功能允许您仅在信号灯为特定连接(进入车道和驶出车道之间的连接)变红时收集度量。这允许测量该连接处红灯前的最大排队长度。要启用此功能,必须将以下车道的名称:to="<LANE_ID>" 添加到属性列表中。 进入车道已由 "lane" 属性给出。