目录
目标:创建一个圆环,让车不停地在圆环上行驶,如图所示。
一、Network
1. 构建环状的路网结构
2. 从圆环中随机选两条边,作为车辆行驶的起点和终点。在Inspect模式下选中两条边,并修改其id为"edge1"和"edge2"
二、Demand
(一) 实现车流从edge1 -> edge2
1. 编写circle.rou.xml文件,定义车辆类型和车流。
车流flow中type="car"指的是vType定义的passenger car;number="5"指的是该车流有5辆车;from指车流行进的起点,to指终点。
<routes>
<vType id="car" type="passenger" length="5" accel="3.5" decel="2.2" sigma="1.0"/>
<flow id="carflow" type="car" beg="0" end="0" number="5" from="edge1" to="edge2"/>
</routes>
2. 编写circle.sumocfg,配置仿真环境
注:所有涉及到的配置文件(circle.net.xml、circle.sumocfg等),都要保存在同一个文件夹内
<configuration>
<input>
<net-file value="circle.net.xml"/>
<route-files value="circle.rou.xml"/>
</input>
</configuration>
3. 用sumo-gui.exe打开circle.sumocfg文件,启动仿真环境
(二) 实现车流环状行驶
1. 上面的方法提供了车流从起点行驶到终点的方法,为了进一步实现环形行驶,需要再定义一个circle.add.xml文件如下:
<additionals>
<rerouter id="rerouter_0" edges="edge1">
<interval end="1e9">
<destProbReroute id="edge2"/>
</interval>
</rerouter>
<rerouter id="rerouter_1" edges="edge2">
<interval end="1e9">
<destProbReroute id="edge1"/>
</interval>
</rerouter>
</additionals>
通过定义两个rerouter实现循环路径。定义rerouter_0,汽车达到edge1的时候,让其行驶到edge2;定义的rerouter1则刚好相反,汽车达到edge2的时候,让其行驶到edge1。因此就可以实现interval时间内,车流不断循环行驶的效果。
<rerouter>中的edges指起点,<destProbReroute>指终点;<interval>指运行时长。
2. 除了添加circle.add.xml文件,还要修改circle.sumocfg如下:
添加对于additional文件的引用。
<configuration>
<input>
<net-file value="circle.net.xml"/>
<route-files value="circle.rou.xml"/>
<additional-files value="circle.add.xml"/>
</input>
</configuration>
3. 再次仿真的效果如下