公共交通

引言#

大多数公共交通使用固定路线(公共汽车、有轨电车和火车),本页描述如何对这类交通进行建模。关于更灵活的需求响应式交通,请参阅 出租车

以下描述说明如何对公共汽车进行建模,但相同的规则也适用于有轨电车、地铁和火车。

公交站点#

可以定义公交站点的位置,并让车辆(“公交车”)在这些位置停靠预设的时间。在 SUMO 中,公交站点位置的定义格式如下:

<busStop id="<BUS_STOP_ID>" lane="<LANE_ID>" startPos="<STARTING_POSITION>" endPos="<ENDING_POSITION>" [lines="<LINE_ID>[ <LINE_ID>]*"]/>

这意味着公交站点是车道上的一个区域。各参数含义如下:

属性名称 值类型 值范围 默认值 描述
id 字符串 id 公交站点的 ID;必须唯一
lane 字符串 有效的车道 ID 公交站点所在的车道名称
startPos 浮点数 -lane.length < x < lane.length(负值从车道末端向后计数) 0 车道上的起始位置(车道上较低的位置),单位为米
endPos 浮点数 -lane.length < x < lane.length(负值从车道末端向后计数) lane.length 车道上的结束位置(车道上较高的位置),单位为米,必须比 startPos 大 0.1m 以上
friendlyPos 布尔值 true,false false 是否自动更正无效的站点位置(默认 false
name 字符串 简单字符串 公交站点名称。仅用于可视化目的。
color 颜色 参见 颜色定义 "76,170,50" 公交站点颜色。仅用于可视化目的。
lines 字符串列表 由空格 (' ') 分隔的名称列表 意为停靠此公交站点的公交线路名称。仅用于可视化目的。
personCapacity 整数 >= 0 min(6, (endPos-StartPos) * 2.4) 尝试进入的人数过多会在人行道上造成上游拥堵。
parkingLength 浮点数 >= 0 (endPos - startPos) 可用于停放车辆的空间

注意

请注意,必须通过 --additional-files 参数将公交站点添加到配置中(参见 additional-file)。

注释

别名 <trainStop> 可以在任何地方代替 <busStop> 使用,功能完全相同。

通用参数 <param key="waitingWidth" value="FLOAT"/><param key="waitingDepth" value="FLOAT"/> 可用于定义公交站点处等待人员的视觉间距。

通道车道#

每个公交车或火车站点可以有额外的子元素,用于模拟从网络其他部分的通道(例如,通往铁路网络站点的道路通道)。其形式如下:

<busStop id="myStop" lane="A_0" startPos="230" endPos="250">
   <access lane="B_0" pos="150"/>
</busStop>

从 OSM 导入公共交通信息时,铁路站点的通道信息会自动添加。

属性名称 值类型 值范围 描述
lane 字符串 ID 可由此通道到达此站点的车道名称
pos 浮点数, "random", "doors" 车道沿线的位置 沿车道到达站点的位置
length 浮点数 >= 0 使用此元素的行人计算通道时间的距离
friendlyPos 布尔值 是否应将无效的 pos 静默转换为最接近的正确近似值

doors 目前仅在退出火车或公交车时使用。下车乘客后续步行的起始位置将从火车或公交车的车门位置中随机选择。 车门位置本身无法定义,但它们源自车辆车厢数量和每节车厢的车门数量,参见车厢定义

虚拟站点#

虽然可以在任何地方停车,但定义作为基础设施可见但仅在使用时可见的公交站点可能很有用。 这使得可以为按需公共交通多式联运路径规划定义有限的潜在停靠位置列表。为了区分“真实”公交站点和“虚拟”公交站点,可以设置通用参数 emptyColor

    <busStop id="example" lane="E0_0" startPos="50" endPos="60" color="255,145,4">
        <param key="emptyColor" value="1,1,1,0"/>
    </busStop>

如果公交站点既没有等待人员也没有停靠车辆,它将采用 emptyColor。如果颜色定义的第四个值(alpha-通道)设置为 0,则公交站点在为空时将不可见。

让车辆在公交站点停靠#

必须告知车辆它们必须在公交站点停靠。以下示例展示了如何执行此操作(取自 <SUMO_HOME>/examples/sumo/busses):

<additional xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/additional_file.xsd">
    <busStop id="busstop1" lane="2/1to1/1_0" startPos="20" endPos="40" lines="100 101 102"/>
    <busStop id="busstop2" lane="1/2to0/2_0" startPos="20" endPos="40" lines="100 101"/>
    <busStop id="busstop3" lane="0/1to0/0_0" startPos="20" endPos="40" lines="100 101 102"/>
    <busStop id="busstop4" lane="1/0to2/0_0" startPos="20" endPos="40" lines="100 101"/>

    <vType id="BUS" accel="2.6" decel="4.5" sigma="0" length="12" minGap="3" maxSpeed="70" color="1,1,0" guiShape="bus"/>

    <vehicle id="0" type="BUS" depart="0" color="1,1,0">
        <route edges="2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2 0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1"/>
        <stop busStop="busstop1" duration="20"/>
        <stop busStop="busstop2" duration="20"/>
        <stop busStop="busstop3" duration="20"/>
        <stop busStop="busstop4" duration="20"/>
    </vehicle>
</additional>

这里定义了一个名为 "0" 的车辆,类型为 "BUS"。"BUS" 是之前声明的引用车辆类型。该车辆有一个嵌入式路线(本例中是手动编写的)和一个停靠点列表。每个停靠点由两个属性描述:"bus_stop" 和 "duration",其中 "bus_stop" 是车辆应停靠的公交站点名称,"duration" 是车辆在公交站点等待的时间(秒)。请注意,车辆应停靠的公交站点顺序必须正确。

有关车辆 "stop" 元素属性的完整列表,请参阅 Definition_of_Vehicles,_Vehicle_Types,_and_Routes#Stops

不完整的路线定义#

也可以定义公交路线而不定义所有中间路段:

   <trip id="0" type="BUS" depart="0" color="1,1,0" from="2/0to2/1" to="2/0to2/1">
       <stop busStop="busstop1" duration="20"/>
       <stop busStop="busstop2" duration="20"/>
       <stop busStop="busstop3" duration="20"/>
       <stop busStop="busstop4" duration="20"/>
   </trip>

车辆将采用从 from-路段到 to-路段的最快路径,并按正确顺序访问所有站点。

甚至可以省略行程属性 'from' 和 'to',让公交车从第一个站点开始,到最后一个站点结束。使用 departPos="stop",车辆将直接在其路线的第一个站点插入:

   <trip id="0" type="BUS" depart="0" color="1,1,0" departPos="stop">
       <stop busStop="busstop1" duration="20"/>
       <stop busStop="busstop2" duration="20"/>
       <stop busStop="busstop3" duration="20"/>
       <stop busStop="busstop4" duration="20"/>
   </trip>

公共交通时刻表#

在大多数情况下,公共交通按照固定时刻表运行。这种时刻表必须使用站点中的 until 属性来定义。模拟中的车辆将遵守时刻表,因为它们在达到 until 时间之前不能离开站点,但由于交通状况,它们仍可能延误。当同时使用 untilduration 时,duration 定义了最短停靠时间,如果车辆已经晚点到达站点,这也可能导致出发延误。

注释

定义公共交通时刻表对于多式联运路径规划是必要的。

注意

用于多式联运路径规划的公共交通时刻表必须在加载模拟时完全定义。通过重定向器或 TraCI 在模拟期间定义的站点在规划 <personTrip> 路径时不会被考虑。

单个车辆和行程#

当为车辆和行程定义 until 值时,这些值表示绝对的模拟时间。 注意,可以使用秒或人类可读的时间。

<trip="bus" from="beg" to="end" line="bus" depart="6:0:0">
     <stop busStop="busStopA" until="6:30:00"/>
     <stop busStop="busStopB" until="6:32:30"/>
     <stop busStop="busStopC" until="23700"/>
</trip>

流 (Flows)#

当定义车辆流时,until 时间是流中第一辆车的绝对时间。对于所有后续车辆,时间将根据较晚的出发时间(周期 * 车辆索引)进行偏移。

下面的示例定义了一个插入两辆车的流。第一辆车将在 10,110,210 停靠,第二辆车将在 310,410,510 停靠:

<flow id="bus" from = "beg" to ="end" line="bus" begin="0" end="301" period="300">
    <stop busStop="busStopA" until="10"/>
    <stop busStop="busStopB" until="110"/>
    <stop busStop="busStopC" until="210"/>
</flow>

独立路线中的站点#

站点也可以是独立定义的路线(具有 ID)的一部分,并由车辆或流引用。在这种情况下,until 时间将被解释为“车辆出发后的时间”。

下面的示例定义了一个插入两辆车的流。第一辆车将在 500 出发,并在 510,610,710 停靠。第二辆车将在 800 出发,并在 810,910,1010 停靠:

<route id="busRoute" edges="A B C D E">
    <stop busStop="busStopA" until="10"/>
    <stop busStop="busStopB" until="110"/>
    <stop busStop="busStopC" until="210"/>
</route>

<flow id="bus" route="busRoute" line="bus" begin="500" end="801" period="300"/>

循环路线#

可以通过在上述定义中重复路段和站点来定义循环路线。 为了缩短输入描述,路线也可以使用属性 repeatcycleTime 来定义:

<route id="busRoute" edges="A B C D E" repeat="3" cycleTime="300">
    <stop busStop="busStopA" until="10"/>
    <stop busStop="busStopB" until="110"/>
    <stop busStop="busStopC" until="210"/>
</route>

这将路线路段和站点重复三次。 站点的 until 时间在每个周期中偏移 300 秒,因此模拟将此扩展为以下时刻表:

<route id="busRoute" edges="A B C D E A B C D E A B C D E" repeat="3" cycleTime="300">
    <stop busStop="busStopA" until="10"/>
    <stop busStop="busStopB" until="110"/>
    <stop busStop="busStopC" until="210"/>
    <stop busStop="busStopA" until="310"/>
    <stop busStop="busStopB" until="410"/>
    <stop busStop="busStopC" until="510"/>
    <stop busStop="busStopA" until="610"/>
    <stop busStop="busStopB" until="710"/>
    <stop busStop="busStopC" until="810"/>
</route>

与周期流(也重复给定的站点序列)相比,此模拟在循环中保持单个车辆。这允许将一个循环中的延误传递到下一个迭代中。流定义可以利用重复路线,以便有多个车辆同时服务于重复的循环。

注意

使用属性 repeat 时,路线的最后一个路段必须连接到路线的第一个路段,才能形成有效的路线定义。

其他时刻表属性#

以下站点属性与公共交通时刻表相关:

  • arrival: 定义预计到达公共交通站点的时间。设置此值会导致计算 arrivalDelay 并写入站点输出。它还启用函数 traci.vehicle.getStopArrivalDelay 的结果。
  • extension: 公共交通站点因登车乘客而可能延长的最长时间
  • line: 到达站点时要在车辆上设置的新线路属性。目前多式联路由器会忽略此属性!
  • tripId: 到达站点时更新车辆的 tripId 参数。此参数对模拟行为没有影响,但可能有助于反映车辆在运营日过程中的真实世界状态记录
  • started: 定义实际到达站点的时间(即来自真实世界数据源或先前的模拟运行)
  • ended: 定义站点结束的实际时间(即来自真实世界数据源或先前的模拟运行)。可通过设置 sumo 选项 --use-stop-ended 来覆盖 'until' 属性。

属性 startedended 用于考虑铁路时刻表的真实世界修改(列车顺序变化),当生成铁路信号约束用于基于时刻表的铁路模拟时。

可视化示例#

plotXMLAttributes.py 生成。

在不定义公交站点的情况下停车#

您也可以让车辆在公交站点以外的位置停车。车辆停靠的简短定义是:

<stop bus_stop="<BUS_STOP_ID>" | ( lane="<LANE_ID>" endPos="<POSITION_AT_LANE>" ) duration="<HALTING_DURATION>"/>

这意味着您可以使用公交站点或车道位置来定义车辆必须停靠的位置。有关车辆 stop 元素属性的完整列表,请参阅 Definition_of_Vehicles,_Vehicle_Types,_and_Routes#Stops

乘客#

如果要将使用公共交通线路的人员也建模为人员,则需要额外的定义

要利用多式联运路径规划,必须满足公共交通定义的额外约束。

导入公共交通#

OSM#

osmWebWizard 工具 可用于从 OpenStreetMap 为选定区域导入公共交通数据。

此导入使用一种中间数据格式(ptlines-file)来描述公共交通线路。此线路数据的用法在 Tutorials/PT_from_OpenStreetMap 中有说明。

GTFS#

工具 gtfs2pt.py 可用于为地理参考网络导入公共交通数据。

自动生成时刻表#

工具 ptlines2flows.py 可用于为给定的站点序列生成具有 'until' 和 'duration' 值的公共交通时刻表。时刻表时间是通过在后台运行模拟得出的。