信号灯输出

TransSimHub 中提供了 generate_traffic_lights_additions 的工具,来生成 .add.xml 文件,从而在模拟过程中保存交通灯状态的一些可能性。 这些保存的结果主要用于评估自适应交通灯算法。 详细内容可以参考 Traffic Lights Output

信号灯 addition 生成

我们使用 sumo_tools 中的 generate_traffic_lights_additions 工具可以生成自定义的 .add.xml 文件。 下面是整体的流程,完成的代码见 Traffic Lights Output Example

from tshub.sumo_tools.additional_files.traffic_light_additions import generate_traffic_lights_additions

generate_traffic_lights_additions(
    network_file='xxx.net.xml',
    output_file='./tls.add.xml'
)

运行上面的代码,可以生成如下的配置文件。 我们只需要在运行仿真的时候,带上这个配置文件即可, 或是在 .sumocfg 中的 additional-files 指定这个文件即可。

<additional xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/additional_file.xsd">
    <timedEvent type="SaveTLSStates" source="htddj_gsndj" dest="SaveTLSStates_htddj_gsndj.out.xml"/>
    <timedEvent type="SaveTLSProgram" source="htddj_gsndj" dest="SaveTLSProgram_htddj_gsndj.out.xml"/>
    <timedEvent type="SaveTLSSwitchStates" source="htddj_gsndj" dest="SaveTLSSwitchStates_htddj_gsndj.out.xml"/>
    <timedEvent type="SaveTLSSwitchTimes" source="htddj_gsndj" dest="SaveTLSSwitchTimes_htddj_gsndj.out.xml"/>
</additional>

输出结果例子

TLS States

每一个 step 记录一次每一个信号灯的状态。输出格式如下:

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

下面是一个输出的例子:

<tlsStates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/tlsstates_file.xsd">
    <tlsState time="0.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="1.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="2.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="3.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="4.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="5.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="6.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="7.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="8.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    ...
</tlsStates>

TLS Switches

记录每一个 connection 绿灯的信息。包含开始和结束时间,connectionfromLanetoLane 等信息。

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

下面是一个输出的例子:

<tlsSwitches xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/tlsswitches_file.xsd">
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_n7_0" toLane="161701303#10_0" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_n7_1" toLane="gsndj_n6_1" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_n7_2" toLane="gsndj_n6_2" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_s4_0" toLane="29257863#5_0" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_s4_1" toLane="gsndj_s5_0" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_s4_2" toLane="gsndj_s5_1" begin="0.00" end="27.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_n7_3" toLane="29257863#5_2" begin="33.00" end="39.00" duration="6.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="gsndj_s4_3" toLane="161701303#10_3" begin="33.00" end="39.00" duration="6.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="29257863#2_0" toLane="gsndj_n6_0" begin="45.00" end="72.00" duration="27.00"/>
    <tlsSwitch id="htddj_gsndj" programID="0" fromLane="29257863#2_0" toLane="29257863#5_0" begin="45.00" end="72.00" duration="27.00"/>
    ...
</tlsSwitches>

TLS Switch States

记录每一个 phase 的改变。每一个 phase 的开始时间,和对应的 state

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

下面是一个输出的例子:

<tlsStates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/tlsstates_file.xsd">
    <tlsState time="0.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="27.00" id="htddj_gsndj" programID="0" phase="1" state="rrrrrryyyyrrrrryyyr"/>
    <tlsState time="33.00" id="htddj_gsndj" programID="0" phase="2" state="rrrrrrrrrrGrrrrrrrG"/>
    <tlsState time="39.00" id="htddj_gsndj" programID="0" phase="3" state="rrrrrrrrrryrrrrrrry"/>
    <tlsState time="45.00" id="htddj_gsndj" programID="0" phase="4" state="GGGGrrrrrrrGGGrrrrr"/>
    <tlsState time="72.00" id="htddj_gsndj" programID="0" phase="5" state="yyyyrrrrrrryyyrrrrr"/>
    <tlsState time="78.00" id="htddj_gsndj" programID="0" phase="6" state="rrrrGGrrrrrrrrGrrrr"/>
    <tlsState time="84.00" id="htddj_gsndj" programID="0" phase="7" state="rrrryyrrrrrrrryrrrr"/>
    <tlsState time="90.00" id="htddj_gsndj" programID="0" phase="0" state="rrrrrrGGGGrrrrrGGGr"/>
    <tlsState time="117.00" id="htddj_gsndj" programID="0" phase="1" state="rrrrrryyyyrrrrryyyr"/>
    <tlsState time="123.00" id="htddj_gsndj" programID="0" phase="2" state="rrrrrrrrrrGrrrrrrrG"/>
    <tlsState time="129.00" id="htddj_gsndj" programID="0" phase="3" state="rrrrrrrrrryrrrrrrry"/>
    <tlsState time="135.00" id="htddj_gsndj" programID="0" phase="4" state="GGGGrrrrrrrGGGrrrrr"/>
    ...
</tlsStates>

TLS Programs

记录信号灯的 program,包含 state 和持续时间。

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

下面是一个输出的例子:

<tlLogic id="htddj_gsndj" type="static" programID="0">
    <phase duration="27.00" state="rrrrrrGGGGrrrrrGGGr"/>
    <phase duration="6.00"  state="rrrrrryyyyrrrrryyyr"/>
    <phase duration="6.00"  state="rrrrrrrrrrGrrrrrrrG"/>
    <phase duration="6.00"  state="rrrrrrrrrryrrrrrrry"/>
    <phase duration="27.00" state="GGGGrrrrrrrGGGrrrrr"/>
    <phase duration="6.00"  state="yyyyrrrrrrryyyrrrrr"/>
    <phase duration="6.00"  state="rrrrGGrrrrrrrrGrrrr"/>
    <phase duration="6.00"  state="rrrryyrrrrrrrryrrrr"/>
    <phase duration="27.00" state="rrrrrrGGGGrrrrrGGGr"/>
    ...
</tlLogic>