前言
本人小白,blog主要用于记录本人的一些学习日常和成果,如有不当或错误之处欢迎各位交流指正。
一、问题引入
在进行交通建模的过程中,道路网络和车流的构建是必不可少的两个部分。但是,常见的道路交通调查并不能够获取完整的车辆行驶轨迹,而交通建模的过程中,车辆的行驶轨迹又是一项必要的数据,这给我们利用交通调查数据完成建模带来了巨大的难度。
换个角度想,常见的交通调查包括交通量的调查、流量流向的调查,给我们提供了充分的流量流向数据。因此在一个缺失车辆轨迹数据的情况下,利用转弯率和交通流量数据完成交通建模是一个较为实际且可靠的选择。
二、使用步骤
1.道路交通网络的构建
为了更加直观的说明如何利用转弯率构建车流文件,本文构建了一个相对简单的双交叉口路网,如下图所示:
2.转弯率文件的构建
首先引用官网对该部分的介绍:
转弯率文件的填写规则(注:概率合计应当为1)如下所示:
<edgeRelations>
<interval begin="0" end="3600">
<edgeRelation from="流出车道" to="流入车道1"probability="流入概率"()/>
<edgeRelation from="流出车道" to="流入车道2" probability="流入概率"/>
<edgeRelation from="流出车道" to="流入车道3" probability="流入概率"/>
</interval>
</edgeRelations>
对转弯率文件的编写完成后,需要对车辆离开路网的车道进行定义
同样先首先看看官网的介绍:
定义方法为:
<turns>
<sink edges="离开路网的车道名称"/>
</turns>
如果没有定义sink edges,需要在后面构成车流文件的过程中加入–accept-all-destinations,不然可能会报错,这里会在后面介绍
最后,本文中所构建的转弯率文件如下所示
<edgeRelations>
<interval begin="0" end="3600">
<edgeRelation from="-gneE2" to="-gneE0" probability="0.2"/>
<edgeRelation from="-gneE2" to="gneE1" probability="0.6"/>
<edgeRelation from="-gneE2" to="gneE3" probability="0.2"/>
<edgeRelation from="-gneE3" to="gneE2" probability="0.2"/>
<edgeRelation from="-gneE3" to="-gneE0" probability="0.7"/>
<edgeRelation from="-gneE3" to="gneE1" probability="0.1"/>
<edgeRelation from="-gneE1" to="gneE3" probability="0.2"/>
<edgeRelation from="-gneE1" to="gneE2" probability="0.7"/>
<edgeRelation from="-gneE1" to="-gneE0" probability="0.1"/>
<edgeRelation from="gneE0" to="gneE1" probability="0.2"/>
<edgeRelation from="gneE0" to="gneE3" probability="0.7"/>
<edgeRelation from="gneE0" to="gneE2" probability="0.1"/>
<edgeRelation from="-gneE6" to="-gneE3" probability="0.2"/>
<edgeRelation from="-gneE6" to="gneE4" probability="0.7"/>
<edgeRelation from="-gneE6" to="gneE5" probability="0.1"/>
<edgeRelation from="-gneE5" to="gneE6" probability="0.2"/>
<edgeRelation from="-gneE5" to="-gneE3" probability="0.7"/>
<edgeRelation from="-gneE5" to="gneE4" probability="0.1"/>
<edgeRelation from="-gneE4" to="gneE5" probability="0.1"/>
<edgeRelation from="-gneE4" to="gneE6" probability="0.7"/>
<edgeRelation from="-gneE4" to="-gneE3" probability="0.2"/>
<edgeRelation from="gneE3" to="gneE4" probability="0.1"/>
<edgeRelation from="gneE3" to="gneE5" probability="0.7"/>
<edgeRelation from="gneE3" to="gneE6" probability="0.2"/>
</interval>
<turns>
<sink edges="gneE2"/>
<sink edges="-gneE0"/>
<sink edges="gneE1"/>
<sink edges="gneE6"/>
<sink edges="gneE5"/>
<sink edges="gneE4"/>
</turns>
</edgeRelations>
3.车流flow文件的构建
由于已经定义了转弯率,flow文件中只需要对于车辆的种类、数目、出发点,时间进行定义就可以,较为简单,本文不针对性地展开介绍,有兴趣的同学可以查询官方文档。
以下是本文所构建的flow文件:
<routes>
<flow id="1" from="-gneE2" begin="0" end="3600" number="300" color = "1,0,0"/>
<flow id="2" from="gneE0" begin="0" end="3600" number="1500" color = "0,1,0"/>
<flow id="3" from="-gneE1" begin="0" end="3600" number="400" color = "0,0,1"/>
<flow id="4" from="-gneE6" begin="0" end="3600" number="500" color = "1,1,0"/>
<flow id="5" from="-gneE5" begin="0" end="3600" number="300" color = "1,0,1"/>
<flow id="6" from="-gneE4" begin="0" end="3600" number="1500" color = "1,1,1"/>
</routes>
4.车流rou文件的生成
使用flow文件和转弯率turn文件生成车流rou文件需要用到的工具是jtrrouter,使用命令如下所示:
jtrrouter -f flow文件名 -n net文件名 -t 转弯率文件名称 -b 开始时间 -e 结束时间 -o rou文件名称
本文使用的命令如下所示:
jtrrouter -n green.net.xml -f flow.flow.xml -t turn.xml -o demo4.rou.xml -b 0 -e 3600
运行结果如下所示
需要注意的是,如果在turn文件中没有定义sink,或者运行jtrrouter的过程中没有–accept-all-destinations,运行过程中会报错,结果如下所示:
这样的后果是,车流仅仅会生成前200步的车流,后面的车流并不会生成。必须看见success、100%done才能够说明车流文件按照flow文件的定义完全生成成果。
最后可以看见输入的rou文件已经能够在net到路网中成功运行。
总结
本文对SUMO交通仿真软件利用转弯率构建车流rou文件进行了简单的介绍,具有一定的参考意义。有兴趣的朋友可以尝试自己动手,如果发现文章当中又不当之处或错误,欢迎大家留言交流讨论。