人员 (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 时,仿真中生效的属性集取决于所选的行人模型。诸如 width、length、imgFile 和 color 等属性始终用于可视化。
重复人员 (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,则停在目的边)
- 车辆停在人员可及的范围内
- 如果车辆停在公交站或其他停靠点,停靠点沿线的所有位置都在范围内
- 如果车辆停靠定义了属性
startPos和endPos,则这些值之间的任何位置都在范围内 - 如果车辆在选项 --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。
在第一种和第二种情况下,路线边按列出的顺序遍历。它们不需要在网络中连接。如果在同一边上的停靠点之间移动,则只需包含该边一次。在后一种情况下,将执行最短路径计算,如果连接 from 和 to 没有路径,则是错误。
当使用属性 from 和 to 作为路由器输入时,将通过沿允许行人通行的边(即人行道)进行路由,将其转换为使用属性 edges 的步行。
给定的公交站(或其他停靠点)可以作为目的边和到达位置的替代。如果仍然给出了到达位置,则它必须在停靠点的范围内。
停靠 (Stops)#
停靠定义了在计划的下一个元素开始之前的延迟。它们可用于模拟工作或购物等活动。人员的停靠遵循 规范#停靠 中的规范。但是,属性 index、triggered、containerTriggered 和 parking 不会被评估。
使用 <stop> 可以模拟具有固定持续时间的活动以及具有固定结束时间的活动。如果人员需要在两个位置之间传输而无需延迟,可以使用两个不同位置的停靠点序列,并为第一个停靠点设置属性 jump。
参数 (Parameters)#
所有阶段都可以包含用户定义的参数,形式为 <param key="k" value="v"/>。
如果阶段是使用 personTrip 生成的,则这些阶段会继承该 trip 的参数。
仿真行为#
人员在其出发时间在其第一个步行、乘车或停靠的源边(即第一条边)开始其生命。她尝试开始其计划的下一步。
乘车 (Riding)#
人员检查给定列表中的线路的车辆是否在给定的边上停靠。如果存在这样的车辆,并且人员位于车辆停靠的起始和结束位置之间,人员将进入车辆并开始其乘车。如果存在这样的车辆但人员不位于车辆停靠的起始和结束位置之间,如果车辆由人员触发且人员与车辆之间的距离最多为 10 米,人员仍会进入。它不检查车辆是否在其当前路线上有期望的目的地。当车辆第一次停在目的边上(在明确定义的停靠点),乘车结束,人员继续计划的下一步。
如果设置了选项 --time-to-teleport.ride,人员将在指定时间后被传送到其乘车目的地,而不是等待仿真结束(或直到所有活动车辆离开仿真)。
步行 (Walking)#
人员的步行行为取决于所选的行人模型。通常,人员遵循给定的边序列,速度受其类型的 desiredMaxSpeed 属性限制。它从前一计划阶段的位置开始,或者如果没有前一阶段,则在指定的 departPos 开始。步行在指定的 arrivalPos 结束,默认为最后一条边的末端。两个位置属性都支持特殊值 max 和 random,其工作方式如车辆所述。
停靠 (Stopping)#
人员停止的时间为 currentTime + duration 和 until 中的最大值。
进出 (Access)#
每当人员在公交站或火车站(统称为 stoppingPlace)开始或结束步行时,如果满足以下条件,将在人员计划中插入一个进出阶段:
- 步行结束的边与停靠点边不同,且停靠点具有连接其与步行最终边的
<access>定义 - 步行开始的边与停靠点边不同,且停靠点具有连接其与步行第一条边的
<access>定义
在进出阶段花费的时间等于进出的 "length" 属性除以人员的步行速度。同一进出元素上的人员之间不发生交互。
在车辆中开始仿真#
可以在车辆仿真的同时,在该车辆内开始人员仿真。也就是说,当车辆插入仿真时,人员以乘车方式在车辆内开始。这对于 person 定义和 personFlow 都是可能的。在这两种情况下,车辆必须已经加载到输入文件中。
Note
起始车辆必须已经加载到输入文件中。
在车辆中开始人员仿真#
要在乘车时开始人员的仿真,人员的 depart 属性必须设置为 triggered。
此外,计划的第一阶段必须是 ride。from 属性不是必需的,因为车辆起始位置已经定义并使用。
通过仅在乘车的 lines 属性中使用车辆 ID 来指示车辆。或者,lines 属性可以包含流的 id。在这种情况下,属于该流的最新车辆将接收该人员。
在车辆中开始多个人员仿真#
要在乘车时开始具有相同计划的多个人员的仿真,可以使用 personFlow。这通过将属性 begin="triggered" 来实现。
此外,计划的第一阶段必须是 ride。from 属性不是必需的,因为车辆起始位置已经定义并使用。
通过仅在乘车的 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>
路由器输入#
人员行程 (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" 时,图像将根据人员的位置和阶段进行旋转。
人员输出#
大多数仿真输出都是为车辆量身定制的。只有少数输出格式支持人员:
- 行程信息输出
- 车辆路线输出
- FCD 输出
- 网络状态转储
- 聚合仿真统计
- 统计输出
- 平均数据(带属性
detectPersons) - E1、E2 和 E3 检测器
- 碰撞输出(碰撞类型 "crossing"、"walkingarea" 和 "junctionPedestrian")
- 停靠输出(在属性 "initialPersons"、"loadedPersons"、"unloadedPersons" 中)
设备 (Devices)#
人员设备用于建模和配置不同的方面,例如输出 (person-device.fcd) 或行为 (person-device.rerouting)。
以下设备名称受支持,可用于下面的占位符 <DEVICENAME>:
通过仿真选项分配设备的工作方式与车辆相同,但所有选项都以 --person-device.DEVICENAME 为前缀,而不是 --device.DEVICENAME。
通过 <vType> 或 <person> 参数分配设备的工作方式与车辆相同。
计划中的功能#
以下功能尚未实现。
- 人员的仿真路由 (person-device.rerouting)
