人员 (Persons)

人员 (Persons)#

人员通过步行或使用车辆在网络中移动。步行行为可以通过选择行人模型进行自定义。人员元素包含定义其计划阶段的子元素。这些阶段是乘车步行停靠元素的连接序列,如下所述。每个人员的计划中必须至少有一个阶段。

<person id="foo" depart="0">
    <walk edges="a b c"/>
    <ride from="c" to="d" lines="busline1"/>
    <ride .../>
    <walk .../>
    <stop .../>
</person>

可用的人员属性#

属性 (Attribute) 类型 (Type) 范围 (Range) 默认值 (Default) 备注 (Remark)
id string 有效的 XML id -
depart float (s) 或 人类可读时间triggered ≥0 或 'triggered' - 'triggered' 的解释见下文
departPos float(s) ≥0 - 人员生成时在出发边上的距离
type string 任何已声明的 vType DEFAULT_PEDTYPE 该类型应具有 vClass pedestrian
speedFactor float > 0 1.0 设置自定义的 speedFactor(desiredMaxSpeed 的乘数),并覆盖 vType 的 speedFactor 分布
color RGB颜色 "1,1,0" (黄色) 该人员的颜色

可用的 vType 属性#

属性 (Attribute) 类型 (Type) 范围 (Range) 默认值 (Default) 备注 (Remark)
width float (m) ≥0 0.48 人员的宽度 [m]
length float (m) ≥0 0.21 人员的净长度 (length) [m]
height float (m) ≥0 1.72 人员的高度 [m]
mingap float (s) ≥0 0.25 领导者后的空闲空间 [m]
maxSpeed float (s) ≥0 10.44 人员的绝对最大速度 [m/s]
desiredMaxSpeed float (s) ≥0 1.39 人员期望的最大速度 [m/s]
speedFactor float 或 分布规格 >0 1.0 人员期望的 desiredMaxSpeed 乘数
speedDev float ≥0 0.1 speedFactor 分布的偏差
color RGB颜色 "1,1,0" (黄色) 该人员类型的颜色
jmDriveAfterRedTime float (s) ≥0 -1 如果红灯持续时间低于给定阈值,此值会导致人员闯红灯。设置为 0 时,人员将在黄灯时行走,但会尝试在红灯时停下。如果此行为导致人员走得太快而无法停下,它将不会尝试停下。
jmIgnoreFoeProb float [0,1] 0 此值导致车辆和行人以给定的概率忽略拥有通行权的对方车辆。检查在每个仿真步骤重新执行。
jmIgnoreFoeSpeed float (m/s) ≥0 0 此值与 jmIgnoreFoeProb 结合使用。仅速度低于或等于给定值的车辆可能被忽略。
impatience float 或 'off' <= 1 0.0 当有车辆必须刹车时,人员在非优先通行的路口过马路的意愿
vClass class (enum) "pedestrian" 应为 "pedestrian" 或 "ignoring"(允许在任何地方行走)

Note

在 1.14.1 版本之前,步行人员(行人)的速度分布与车辆的工作方式不同。车辆的个体速度因子与道路限速相乘得出期望速度,而人员的个体速度因子与其 vType 的 maxSpeed 相乘(因为道路限速不适用于人员)。在更高版本中,人员使用 desiredMaxSpeed 和 maxSpeed,其方式与车辆完全相同。为了向后兼容,如果在 vType 中配置了 maxSpeed 而未给出 desiredMaxSpeed,则 desiredMaxSpeed 将从给定的 maxSpeed 值初始化。

当指定 type 时,仿真中生效的属性集取决于所选的行人模型。诸如 widthlengthimgFilecolor 等属性始终用于可视化。

重复人员 (personFlows)#

要定义具有相同计划的多个人员,可以使用元素 <personFlow>。 它使用与 <person> 相同的参数和子元素,除了出发时间。创建的人员的 id 为 "personFlowId.runningNumber",它们在给定的时间间隔内均匀或随机分布。以下附加参数是已知的:

属性名称 (Attribute Name) 值类型 (Value Type) 描述 (Description)
begin float (s) 或 人类可读时间triggered 第一个人员的出发时间。'triggered' 的解释见下文
end float(s) 出发间隔的结束时间(如果未定义,默认为 24 小时)
personsPerHour* perHour* float(#/h) 每小时的人员数量,等间距分布
period* float(s) 以该周期等间距插入人员
probability* float([0,1]) 每秒发出一个人的概率,另见 仿真/随机性
number* int(#) 人员总数,等间距分布

*: 只允许使用其中一个属性。

示例#

   <personFlow id="p" begin="0" end="10" period="2">
       <walk from="beg" to="end"/>
   </personFlow>
   <personFlow id="person" begin="0" end="1" number="4" departPos="80">
       <walk from="2/3to1/3" to="1/3to0/3" arrivalPos="55"/>
       <ride from="1/3to0/3" to="0/4to1/4" lines="train0"/>
       <walk from="0/4to1/4" to="1/4to2/4" arrivalPos="45"/>
       <stop lane="1/4to2/4_0" duration="20" startPos="40" actType="singing"/>
       <ride from="1/4to2/4" to="3/4to4/4" lines="car0"/>
   </personFlow>

仿真输入#

人员的输入由以下 3 种类型的阶段序列组成。

Note

人员计划也可以通过多模式路径规划生成。

乘车 (Rides)#

乘车定义了使用单一交通模式(例如汽车或公共汽车)移动的起点和终点。它们是计划定义的子元素。

属性 (Attribute) 类型 (Type) 范围 (Range) 默认值 (Default) 备注 (Remark)
lines list 有效的线路或车辆 id 或 ANY ANY 可供乘坐的车辆替代方案列表
from string 有效的边 id - 起始边的 id(可选,如果是后续移动或在车辆中开始仿真
to string 有效的边 id - 目的边的 id(可选,如果给出了 busStop 或其他停靠点)
fromPos float(m) 边的中间 起始边上的出发位置
arrivalPos float(m) 边的末端 目的边上的到达位置
busStop string 有效的公交站 id - 目的停靠点的 id
parkingArea string 有效的停车区 id - 目的停靠点的 id
trainStop string 有效的火车站 id - 目的停靠点的 id
chargingStation string 有效的充电站 id - 目的停靠点的 id
containerStop string 有效的集装箱停靠点 id - 目的停靠点的 id
group string "" 旅行组的 id。具有相同组的人员可以共享出租车行程

要使用的车辆必须已经存在(无论是公共交通车辆还是现有的客车),并且要行驶的路线由车辆定义。如果车辆在 'from' 边停下且满足以下所有条件,人员将进入车辆:

  • 车辆的 'line' 属性或车辆的 'id' 在乘车的 lines 属性定义的列表中给出,或者 lines 属性包含 'ANY'
  • 车辆停靠在乘车的目的地 'busStop'(或者如果未定义目的地 busStop,则停在目的边)
  • 车辆停在人员可及的范围内
    • 如果车辆停在公交站或其他停靠点,停靠点沿线的所有位置都在范围内
    • 如果车辆停靠定义了属性 startPosendPos,则这些值之间的任何位置都在范围内
    • 如果车辆在选项 --ride.stop-tolerance(默认 10)的范围内

Note

lines 属性可用于呼叫出租车,更多信息见 出租车

人员的位置是其 departPos 或前一个计划元素的到达位置。

给定的公交站(或任何其他停靠点)可以作为目的边和到达位置的替代。如果仍然给出了到达位置,则它必须在停靠点的范围内。

车辆中人员的位置取决于车辆的 'guiShape' 参数及其尺寸。车辆前部与第一个乘客位置之间的偏移可以通过在车辆的 vType 定义中添加 <param key="frontSeatPos" value="3.14"/> 来配置。

并排就坐的人员数量取决于车辆宽度,但可以通过在 vType 定义中设置 <param key="seatingWidth" value="1.3"/> 来覆盖。

Note

在 1.15.0 版本之前,属性 'lines' 是必需的。

步行 (Walks)#

步行定义了行人移动。它们是计划定义的子元素。

属性 (Attribute) 类型 (Type) 范围 (Range) 默认值 (Default) 备注 (Remark)
route string 有效的路线 id - 要步行的路线的 id
edges list 有效的边 id - 要步行的边的 id
from string 有效的边 id - 起始边的 id(可选,如果是后续移动)
to string 有效的边 id - 目的边的 id(可选,如果给出了 busStop 或其他停靠点)
duration float(s) >0 - 覆盖步行持续时间(否则由人员类型和行人动力学决定)
speed float(m/s) >0 - 覆盖步行速度(否则由人员类型和个体速度因子决定)
arrivalPos float(m) 边的中间 目的边上的到达位置
departPosLat float(m), 字符串 ("random", "left", "right", "center") 步行方向的右侧 出发时车道上的自定义横向位置(详情
busStop string 有效的公交站 id - 目的停靠点的 id
parkingArea string 有效的停车区 id - 目的停靠点的 id
trainStop string 有效的火车站 id - 目的停靠点的 id
chargingStation string 有效的充电站 id - 目的停靠点的 id
containerStop string 有效的集装箱停靠点 id - 目的停靠点的 id

您可以定义路线 route-id,或要经过的边列表 edges,或起始边 from 和目的边 to。 在第一种和第二种情况下,路线边按列出的顺序遍历。它们不需要在网络中连接。如果在同一边上的停靠点之间移动,则只需包含该边一次。在后一种情况下,将执行最短路径计算,如果连接 fromto 没有路径,则是错误。

当使用属性 fromto 作为路由器输入时,将通过沿允许行人通行的边(即人行道)进行路由,将其转换为使用属性 edges 的步行。

给定的公交站(或其他停靠点)可以作为目的边和到达位置的替代。如果仍然给出了到达位置,则它必须在停靠点的范围内。

停靠 (Stops)#

停靠定义了在计划的下一个元素开始之前的延迟。它们可用于模拟工作或购物等活动。人员的停靠遵循 规范#停靠 中的规范。但是,属性 indextriggeredcontainerTriggeredparking 不会被评估。 使用 <stop> 可以模拟具有固定持续时间的活动以及具有固定结束时间的活动。如果人员需要在两个位置之间传输而无需延迟,可以使用两个不同位置的停靠点序列,并为第一个停靠点设置属性 jump

参数 (Parameters)#

所有阶段都可以包含用户定义的参数,形式为 <param key="k" value="v"/>。 如果阶段是使用 personTrip 生成的,则这些阶段会继承该 trip 的参数。

仿真行为#

人员在其出发时间在其第一个步行、乘车或停靠的源边(即第一条边)开始其生命。她尝试开始其计划的下一步。

乘车 (Riding)#

人员检查给定列表中的线路的车辆是否在给定的边上停靠。如果存在这样的车辆,并且人员位于车辆停靠的起始和结束位置之间,人员将进入车辆并开始其乘车。如果存在这样的车辆但人员不位于车辆停靠的起始和结束位置之间,如果车辆由人员触发且人员与车辆之间的距离最多为 10 米,人员仍会进入。它不检查车辆是否在其当前路线上有期望的目的地。当车辆第一次停在目的边上(在明确定义的停靠点),乘车结束,人员继续计划的下一步。

如果设置了选项 --time-to-teleport.ride,人员将在指定时间后被传送到其乘车目的地,而不是等待仿真结束(或直到所有活动车辆离开仿真)。

步行 (Walking)#

人员的步行行为取决于所选的行人模型。通常,人员遵循给定的边序列,速度受其类型的 desiredMaxSpeed 属性限制。它从前一计划阶段的位置开始,或者如果没有前一阶段,则在指定的 departPos 开始。步行在指定的 arrivalPos 结束,默认为最后一条边的末端。两个位置属性都支持特殊值 maxrandom,其工作方式如车辆所述。

停靠 (Stopping)#

人员停止的时间为 currentTime + durationuntil 中的最大值。

进出 (Access)#

每当人员在公交站或火车站(统称为 stoppingPlace)开始或结束步行时,如果满足以下条件,将在人员计划中插入一个进出阶段:

  • 步行结束的边与停靠点边不同,且停靠点具有连接其与步行最终边的 <access> 定义
  • 步行开始的边与停靠点边不同,且停靠点具有连接其与步行第一条边的 <access> 定义

在进出阶段花费的时间等于进出的 "length" 属性除以人员的步行速度。同一进出元素上的人员之间不发生交互。

在车辆中开始仿真#

可以在车辆仿真的同时,在该车辆内开始人员仿真。也就是说,当车辆插入仿真时,人员以乘车方式在车辆内开始。这对于 person 定义和 personFlow 都是可能的。在这两种情况下,车辆必须已经加载到输入文件中。

Note

起始车辆必须已经加载到输入文件中。

在车辆中开始人员仿真#

要在乘车时开始人员的仿真,人员的 depart 属性必须设置为 triggered。 此外,计划的第一阶段必须是 ridefrom 属性不是必需的,因为车辆起始位置已经定义并使用。 通过仅在乘车的 lines 属性中使用车辆 ID 来指示车辆。或者,lines 属性可以包含流的 id。在这种情况下,属于该流的最新车辆将接收该人员。

在车辆中开始多个人员仿真#

要在乘车时开始具有相同计划的多个人员的仿真,可以使用 personFlow。这通过将属性 begin="triggered" 来实现。 此外,计划的第一阶段必须是 ridefrom 属性不是必需的,因为车辆起始位置已经定义并使用。 通过仅在乘车的 lines 属性中使用车辆 ID 来指示车辆。或者,lines 属性可以包含流的 id。在这种情况下,属于该流的最新车辆将接收该人员。 如果 personFlow 定义了属性 number,则所有人员都将插入同一辆车中。 如果 personFlow 定义了属性 period,则人员将按指示的周期创建,并在稍后时间放入车辆中(如果在 lines 中使用了流 id,则可能放入不同的车辆)。

示例#

人员 p0 在由行程 v0 定义的车辆中开始,位于边 gneE0。乘车在边 gneE1 结束。

<trip id="v0" depart="15.00" from="gneE0" to="gneE2">
    <stop lane="gneE1_1" duration="60.00"/>
</trip>
<person id="p0" depart="triggered">
    <ride to="gneE1" lines="v0"/>
    <walk to="gneE3"/>
</person>

由 personFlow p0 定义的人员在由行程 v0 定义的车辆中开始,位于边 gneE0。乘车在边 gneE1 结束。

<trip id="v0" depart="15.00" from="gneE0" to="gneE2">
    <stop lane="gneE1_1" duration="60.00"/>
</trip>
<personFlow id="p0" begin="triggered" number="2">
    <ride to="gneE1" lines="v0"/>
    <walk to="gneE3"/>
</person>

路由器输入#

以下定义可以使用 duaroutersumo 处理。

人员行程 (PersonTrips)#

人员行程定义了具有可选模式变更的移动的起点和终点。它们是人员的子元素。为了处理模式为 public 的人员行程,必须定义公共交通网络。 目前,自行车和/或汽车只能是第一种模式。除了将 'taxi' 添加到可用模式外,无法在其他模式之后切换到汽车或自行车。

通过网络选择最佳行程的规则在多模式路径规划中描述。

如果计算出的计划以汽车或自行车开始,将自动生成一个供人员使用的车辆,并设置为 depart="triggered"。汽车将被命名为 'PERSON_ID_0',自行车将被命名为 'PERSON_ID_b0',其中 'PERSON_ID' 是人员的 id。如果仿真中已存在具有此 id 的车辆,则将使用该车辆(用户必须确保它在适当的位置开始)。

属性 (Attribute) 类型 (Type) 范围 (Range) 默认值 (Default) 备注 (Remark)
from string 有效的边 id - 起始边的 id(可选,如果是后续移动)
to string 有效的边 id - 目的边的 id
via string 有效的边 id - 中间边的 id(尚未实现)
busStop string 有效的公交站 id - 目的停靠点的 id
vTypes list 有效的 vType ids - 可能乘坐的车辆类型列表
modes list "public"、"car"、"bicycle"、"taxi" 的任何组合 - 可能的交通模式列表(用 ' ' 分隔)。步行始终可能,无论此值如何。
departPos float(m) 0 起始边上的初始位置(已弃用,由人员的 departPos 或前一步的到达位置决定)
departPosLat float(m) 0 步行时起始边上的初始横向位置
arrivalPos float(m) 边的中间 目的边上的到达位置
group string "" 旅行组的 id。具有相同组的人员可以共享出租车行程

Note

如果后续行程未连接,则是错误。

Note

如果找不到执行行程的路线,并且设置了选项 --ignore-route-errors,则行程将转换为由起始边和到达边组成的步行。人员将被传送以完成步行。

Note

当使用属性 vTypes 时,人员可以从起始边开始使用任何给定的车辆类型。在 modes 中包含 'car' 等价于 vTypes="DEFAULT_VEHTYPE"。在 modes 中包含 'bicycle' 等价于 vTypes="DEFAULT_BIKETYPE"。车辆将在使用时自动生成。

示例#

以下是一个人员的示例,他步行到火车站,乘坐火车,下车步行一段,然后停下来进行活动,最后上车离开。

<routes>
    <person id="person0" depart="0">
        <walk from="2/3to1/3" to="1/3to0/3" departPos="80" arrivalPos="55"/>
        <ride from="1/3to0/3" to="0/4to1/4" lines="train0"/>
        <walk from="0/4to1/4" to="1/4to2/4" arrivalPos="30"/>
        <stop lane="1/4to2/4_0" duration="20" startPos="40" actType="singing"/>
        <ride from="1/4to2/4" to="3/4to4/4" lines="car0"/>
    </person>

    <vehicle id="train0" depart="50">
        <route edges="1/4to1/3 1/3to0/3 0/3to0/4 0/4to1/4 1/4to1/3"/>
        <stop busStop="busStop0" until="120" duration="10"/>
        <stop busStop="busStop1" until="180" duration="10"/>
    </vehicle>

    <vehicle id="car0" depart="triggered">
        <route edges="1/4to2/4 2/4to3/4 3/4to4/4" departPos="30"/>
        <stop lane="1/4to2/4_0" duration="20" startPos="40" endPos="60"/>
    </vehicle>

</routes>

您可以省略第二次及后续移动中的 from 属性,并且可以使用公交站作为目的地。对于火车,公交站应具有进出通道。上面示例中 person0 的移动也可以写成

<person id="person0" depart="0">
    <walk from="2/3to1/3" busStop="busStop0" departPos="80" arrivalPos="55"/>
    <ride busStop="busStop1" lines="train0"/>
    <walk to="1/4to2/4" arrivalPos="30"/>
    <stop lane="1/4to2/4_0" duration="20" startPos="40" actType="singing"/>
    <ride from="1/4to2/4" to="3/4to4/4" lines="car0"/>
</person>

可视化#

人员在 GUI 中以配置的详细级别渲染。当分配具有属性 imgFile 的类型时,人员可能会使用图像渲染。默认情况下,图像不会旋转(适用于抽象图标)。但是,当设置类型的 guiShape="pedestrian" 时,图像将根据人员的位置和阶段进行旋转。

人员输出#

大多数仿真输出都是为车辆量身定制的。只有少数输出格式支持人员:

设备 (Devices)#

人员设备用于建模和配置不同的方面,例如输出 (person-device.fcd) 或行为 (person-device.rerouting)。

以下设备名称受支持,可用于下面的占位符 <DEVICENAME>

通过仿真选项分配设备的工作方式与车辆相同,但所有选项都以 --person-device.DEVICENAME 为前缀,而不是 --device.DEVICENAME

通过 <vType><person> 参数分配设备的工作方式与车辆相同

计划中的功能#

以下功能尚未实现。