容器可用于模拟货物和商品。一个容器可以代表,例如,一个ISO集装箱、一个罐式集装箱、任意数量的散装物料、任意数量的动物等。
容器 (Containers)#
容器通过被车辆运输或在两个站点之间转运而在路网中移动。容器元素具有定义其计划阶段的子元素。这些阶段由 transport(运输)、tranship(转运)和 stop(停靠)元素组成的连接序列,如下所述。每个容器在其计划中必须至少有一个阶段。
<container id="foo" depart="0">
<tranship edges="a b"/>
<transport ../>
<transport ../>
<tranship ../>
<stop ../>
</container>
| 属性 (Attribute) | 类型 (Type) | 范围 (Range) | 默认值 (Default) | 备注 (Remark) |
|---|---|---|---|---|
| id | string | 有效的 XML id | - | |
| depart | float(s) | ≥0 | - | |
| type | string | 任何已声明的 vType | ||
| color | rgb color |
可视化 (Visualization)#
容器在GUI中根据配置的详细级别进行渲染。当分配了带有 imgFile 属性的类型时,容器可能会使用图像进行渲染。
模拟输入 (Simulation input)#
运输 (Transports)#
运输定义了使用单一运输方式(例如卡车、火车或轮船)从起点到终点的移动。它们是计划定义的子元素。
| 属性 (Attribute) | 类型 (Type) | 范围 (Range) | 默认值 (Default) | 备注 (Remark) |
|---|---|---|---|---|
| from | string | 有效的边 id | - | 起始边的 id(可选,如果是后续移动或在车辆中开始模拟) |
| to | string | 有效的边 id | - | 目的地边的 id |
| lines | list | 有效的线路或车辆 id 或 ANY | ANY | 可用于该运输的车辆备选列表 |
| containerStop | string | 有效的容器停靠点 id | - | 目的地停靠点的 id(允许省略 to) |
| arrivalPos | float(m) | -1 | 目的地边上的到达位置 |
要使用的车辆必须已经存在,并且行驶路线由车辆定义。车辆需要有运输额外容器的容量(参见 vType 属性 containerCapacity)。如果车辆在 'from' 边上停靠,并且满足以下任一条件,容器将被装载到车辆上:
- 车辆的 'line' 属性或 'id' 包含在
transport的 'lines' 属性定义的列表中,或者 lines 属性包含 'ANY',并且车辆停靠在transport的目的地 'containerStop'(或者如果没有定义目的地 containerStop,则停靠在目的地边上)。 - 车辆有一个触发式停靠,并且容器位置在停靠点的 startpos 和 endPos 范围内。
- 车辆有一个定时停靠,并且容器在车辆位置 10m 范围内等待。
容器的位置要么是其 departPos,要么是前一个计划元素的到达位置。
给定的容器停靠点(或任何其他停靠点)可以作为目的地边和到达位置的替代。如果仍然给出了到达位置,则它必须在停靠点的范围内。
容器的运输工作方式类似于人的 乘车 (ride)。
转运 (Tranships)#
转运定义了容器在两点之间的直接转移。在此过程中,容器不沿边移动。它们沿直线移动,无论该直线是否穿过建筑物或其他任何东西。它们是计划定义的子元素。
| 属性 (Attribute) | 类型 (Type) | 范围 (Range) | 默认值 (Default) | 备注 (Remark) |
|---|---|---|---|---|
| edges | list | 有效的边 id | - | 要转运的边的 id |
| from | string | 有效的边 id | - | 起始边的 id(可选,如果是后续移动) |
| to | string | 有效的边 id | - | 目的地边的 id |
| containerStop | string | 有效的容器停靠点 id | - | 目的地容器停靠点的 id |
| speed | float(m/s) | >0 | 5km/h | 该次转运中容器的速度(m/s) |
| departPos | float(m) | 0 | 起始边上的初始位置 | |
| arrivalPos | float(m) | [0,toEdge.length] | toEdge.length | 目的地边上的到达位置 |
你可以定义要经过的 "edges" 列表,或者定义 "from" 和 "to" 边。在前一种情况下,仅考虑第一条和最后一条边。可以定义一个容器停靠点来代替 "to" 边。 如果前面有一个移动条目,则可以省略 "from" 边。容器将从第一条边直线移动到最后一条边。在后一种情况下,容器将从 "from" 边直线移动到 "to" 边或 "containerStop" 容器停靠点。
停靠 (Stops)#
停靠定义了计划的下一个元素开始之前的延迟。它们可用于模拟容器存储在存储点、港口或其他任何地方的情况。可以使用容器停靠点在网络中模拟该存储点(类似于公共交通的公交站点)。容器的停靠点遵循 Specification#Stops 中的规范。但是,仅评估 containerStop、lane、duration、until 和 startPos 属性。startPos 定义了容器在车道上停靠的位置。使用这些属性可以模拟具有固定持续时间的活动以及具有固定结束时间的活动。
模拟行为 (Simulation behavior)#
容器在其离开时间在其第一个转运、运输或停靠的源(即第一个)边上开始其生命周期。它尝试开始其计划的下一步。
运输 (Transport)#
容器检查给定列表中线路的车辆是否在给定边上停靠。如果存在这样的车辆,并且容器位于车辆停靠点的起始和结束位置之间,则容器将被装载到车辆上。如果存在这样的车辆但容器不在车辆停靠点的起始和结束位置之间,如果车辆由容器触发且容器与车辆之间的距离最多为 10 米,容器仍会被装载。不会检查车辆是否在其当前路线上有期望的目的地。车辆第一次在目的地边上停靠(在明确定义的停靠点上)时,运输完成,容器继续执行计划中的下一步。
转运 (Tranship)#
容器从 "from" 边的 "departPos" 移动到 "to" 边的 "arrivalPos"。在此过程中,容器不遵循边。相反,它在这两点之间做直线运动。任何障碍物,如建筑物,都将被忽略。
停靠 (Stopping)#
容器停止的时间为 currentTime+duration 和 until 中的较大值。
示例 (Example)#
以下是一个容器的示例,该容器被转运到火车站,由火车运输,卸货并转运到一个地方,在那里存储(停靠)一段时间,最后再次被运输。
<routes>
<container id="container0" depart="0">
<tranship from="2/3to1/3" to="1/3to0/3" departPos="80" arrivalPos="55"/>
<transport from="1/3to0/3" to="0/4to1/4" lines="train0"/>
<tranship from="0/4to1/4" to="1/4to2/4" arrivalPos="30"/>
<stop lane="1/4to2/4_0" duration="20" startPos="40"/>
<transport from="1/4to2/4" to="3/4to4/4" lines="truck0"/>
</container>
<vehicle id="train0" depart="50">
<route edges="1/4to1/3 1/3to0/3 0/3to0/4 0/4to1/4 1/4to1/3"/>
<stop containerStop="containerStop0" until="120" duration="10"/>
<stop containerStop="containerStop1" until="180" duration="10"/>
</vehicle>
<vehicle id="truck0" depart="containerTriggered">
<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>
重复容器 (containerFlows)#
要定义具有相同计划的多个容器,可以使用 <containerFlow> 元素。
它使用与 <container> 相同的参数和子元素,除了出发时间。创建的容器的 id 为 "containerFlowId.runningNumber",它们在给定的时间间隔内均匀分布或随机分布。以下是已知的附加参数:
| 属性名称 (Attribute Name) | 值类型 (Value Type) | 描述 (Description) |
|---|---|---|
| begin | float (sec) | 第一个容器的出发时间 |
| end | float (sec) | 出发时间间隔的结束(如果未定义,默认为 24 小时) |
| containersPerHour* 或 perHour* | float (#/h) | 每小时的容器数量,均匀分布 |
| period* | float (sec) | 以该周期均匀插入容器 |
| probability* | float ([0,1]) | 每秒发出容器的概率,另见 Simulation/Randomness |
| number* | int (#) | 容器总数,均匀分布 |
*: 只允许使用这些属性中的一个。
另见 personFlows
示例 (Examples)#
<containerFlow id="c" begin="0" end="10" period="2">
<tranship from="beg" to="end"/>
</containerFlow>
<containerFlow id="container" begin="0" end="1" number="4" departPos="80">
<tranship from="2/3to1/3" to="1/3to0/3" arrivalPos="55"/>
<transport containerStop="cs_train0" lines="train0"/>
<tranship to="1/4to2/4" arrivalPos="45"/>
<stop lane="1/4to2/4_0" duration="20" startPos="40" actType="waiting"/>
<transport to="3/4to4/4" lines="truck0"/>
</containerFlow>
在车辆中开始模拟 (Starting the simulation in a Vehicle)#
可以在车辆模拟开始的同时开始容器模拟。即,当车辆插入到模拟中时,容器以车辆内的运输开始。这对于 container 定义和 containerFlow 都是可能的。
这与 person 和 personFlow 相同。
Note
参见 Persons,但使用 transport 代替 ride。
计划中的功能 (Planned features)#
以下功能尚未实现。
计划 (Plan)#
容器的计划与车辆的路线具有相同的作用:容器可以使用属性 plan 引用计划或计划的分布。同样,容器可以包含一个计划或计划的分布作为子元素。计划是阶段(运输、转运和停靠)的序列。
| 属性 (Attribute) | 类型 (Type) | 范围 (Range) | 默认值 (Default) | 备注 (Remark) |
|---|---|---|---|---|
| probability | float | ≥0 | 1 | 仅当容器有多个计划时才进行评估,所有计划的概率值不必加起来为 1,它们在选择之前会相应地进行缩放 |
互联交通路由 (Intermodal Routing)#
路由器输入仍未完全定义。必须有一种方法来定义行程中可以使用哪些车辆/物流线路,以及容器可以定义/更改哪些车辆的路线。
行程 (Trips)#
行程定义了具有可选模式变化的移动的起点和终点。
在定义上,它们与车辆相同,只是缺少路线信息(不允许 route 属性和 route 子元素)。相反,它们具有以下属性:
| 属性 (Attribute) | 类型 (Type) | 范围 (Range) | 默认值 (Default) | 备注 (Remark) |
|---|---|---|---|---|
| from | string | 有效的边 id | - | 起始边的 id |
| to | string | 有效的边 id | - | 目的地边的 id |
Note
如果后续行程未连接,则是错误。
