城市交通仿真平台SUMO(V1.3)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
城市交通仿真平台(SUMO )
用
户
文
档
贵州大学计算机学院
中文信息处理实验室
联系人:韩光辉
邮箱:hanyankai@
城市交通流微观仿真 基于SUMO 平台
SUMO 是由德国宇航中心开发的,微观、连续的道路交通仿真架构和模型基础,非常适合于道路交通仿真的研究人员使用,本文档介绍部分仿真理论后,主要介绍SUMO 仿真平台的架构和使用方法
2010
韩光辉
贵州大学计算机学院
2010-12-15
城市交通仿真(SUMO)的概要信息
使用的模型:
(1)汽车运动模型:是由Stefan Krauss开发的微观、空间连续、时间离散的汽车流模型。
(2)用户分配模型:是由Christian Gawron开发的动态用户分配模型。
应用程序包(bin目录)介绍:
Activitygen:从网络中全部人群的描述来生成需求。
Dfrouter:使用探测器值构建车辆路径。
Duarouter:最短路径和动态用户均衡(DUE)计算,使用C. Gawron模型。
Jtrrouter:基于路口转弯比率的路径计算
Netgen:生成路网
Netconvert:导入并转换路网
Od2trips:导入O/D矩阵并转换为旅行路径
Polyconvert:导入多边形和兴趣点(POIs)
Sumo:实现仿真
Sumo-gui:仿真的GUI界面
TraCITestClient: 探索与外部应用进行通信的可能性
目录
1.简介 (7)
1.1.交通仿真 (7)
1.1.1.交通仿真分类 (7)
1.1.2.用户分配 (7)
1.2.SUMO概览 (7)
1.2.1.特点 (8)
1.2.2.包含的应用 (8)
1.2.3.设计原则 (9)
2.基本使用 (9)
2.1.符号 (9)
2.2.命令行 (9)
2.2.应用程序参数 (9)
2.3.XML举例 (9)
2.4.模式 (10)
2.5.数据类型 (10)
2.6.安装SUMO (10)
2.6.1.安装二进制版本(windows平台) (11)
2.6.2.编译构建应用(Windows平台) (11)
2.6.3.构建文档 (13)
3.使用命令行程序 (13)
3.1.基础 (13)
3.1.1.开启命令行窗口 (13)
3.1.2.从命令行使用SUMO程序 (13)
3.2.参数 (14)
3.2.1.命令行下设置参数 (14)
3.2.2.参数值类型 (14)
3.3.配置文件 (14)
3.3.1.配置文件命名规范 (15)
3.3.2.配置文件和命令行参数 (15)
3.3.3.生成配置文件模板 (15)
3.3.4.保存当前配置到文件 (15)
3.4.通用参数 (16)
4.仿真准备 (16)
4.1.所需数据 (16)
4.2.最佳实践 (17)
5.网络构建 (17)
5.1.SUMO道路网络 (17)
5.2.坐标系和对齐 (18)
5.3.使用自己的XML描述构建网络 (19)
5.4.节点描述 (19)
5.5.边的描述 (20)
5.5.1.一般描述 (20)
5.5.2.定义允许的车辆类型 (22)
5.5.3.路段定义 (22)
5.5.4.边类型描述 (23)
5.6.连接描述(Connection) (24)
5.7.手工构建路网案例 (28)
6.网络导入 (30)
6.1.OpenStreetMap格式的路网导入 (30)
6.1.1.导入路网 (30)
6.1.2.导入额外的多边形(如建筑物,河流等) (31)
6.1.3.导入脚本(Scripts) (33)
6.1.4.编辑OSM网络 (33)
CONVERT细节 (33)
CONVERT的输出 (37)
6.4.网络生成 (38)
7.需求建模 (38)
7.1.SUMO的需求简介 (38)
7.2.车辆、车辆类型、路径的定义 (39)
7.2.1.车辆类型 (39)
7.2.2.抽象车辆类别 (40)
7.2.3.车辆排量类别 (41)
7.2.4.可视化 (41)
7.2.5.车辆跟驰模型 (42)
7.2.6.车辆和路径 (43)
7.2.7.车辆的出发和到达参数 (44)
7.2.8.路径和车辆类型分布 (44)
7.2.9.停车 (45)
7.3.路由器的输入(内容) (45)
7.3.1.旅程定义 (45)
7.3.2.使用流定义 (47)
7.3.3.导入OD矩阵 (50)
7.3.4.描述街区 (50)
7.3.5.描述矩阵单元 (51)
7.3.6.分裂大型矩阵 (51)
7.3.7.处理破碎的数据 (51)
7.3.8.随机路径 (51)
7.3.9.路径猜测 (51)
7.3.10.使用JtrRouter (52)
7.3.11.使用DfRouter (53)
7.3.12.使用ActivityGen (55)
7.3.13.动态用户分配(DUA) (55)
8.仿真 (55)
8.1.基本仿真定义 (55)
8.2.道路网络 (55)
8.3.交通需求 (56)
8.4.为仿真定义时段 (56)
8.5.高级交通灯仿真 (56)
8.5.1.载入新的交通灯仿真程序 (56)
8.5.2.交通灯仿真程序导入工具(p98) (58)
8.5.3.定义程序交换时间和过程 (59)
8.5.4.交通灯性能评估 (60)
8.6.SUMO的公共运输仿真(公交系统) (60)
8.7.SUMO的可变速度信号 (61)
8.8.SUMO的重新路由(p105) (62)
8.8.1.二次路由器 (62)
8.8.2.关闭街道 (62)
8.8.3.分配新的目的地 (63)
8.8.4.分配新的路径 (63)
8.9.可行的仿真方案 (64)
8.9.1.使用随机路径仿真 (64)
8.9.2.使用探测器数据仿真 (65)
8.9.3.使用车流分布仿真 (68)
8.9.4.公交线路仿真 (69)
8.10.使用GUISIM (71)
8.10.1基本使用描述 (71)
8.10.2.与视图交互 (72)
8.10.3.在GUISIM中使用贴图(背景图片) (74)
8.10.4.配置文件 (75)
9.SUMO输出 (76)
9.1.车辆发射器状态 (77)
9.2.感应线圈输出 (77)
9.3.道路性能均值 (77)
9.4.受约束的道路性能均值 (78)
9.5.车道性能均值 (78)
9.6.路网最原始数据输出 (78)
9.7.旅程信息输出 (79)
9.8.车辆路径输出 (79)
9.9.车辆类型调查 (79)
10.TraCI (79)
10.1.TraCI简介 (79)
10.2.仿真步骤 (79)
11.选择研究主题的一些建议 (80)
11.1.车辆重新选择路径 (80)
11.1.1.基本描述 (80)
11.1.2.应该记住的事情 (80)
11.2.在线交通仿真 (80)
11.3.基于GSM的监视 (80)
11.3.1.怎样使用GSM跟踪车辆 (80)
11.4.开发自己的跟车模型 (80)
11.4.1.实现新的跟车模型 (80)
11.4.2.定义车辆类型 (82)
11.4.3.跟车模型接口 (84)
11.4.4.重新进行微观仿真 (85)
11.4.5.新模型开发案例 (86)
12.附录A (86)
12.1.词汇表 (86)
12.2.常见问题 (87)
12.2.1.综述性方面 (87)
12.2.2.软件特性方面 (87)
12.2.3.构建和安装方面 (88)
12.2.4.基本使用方面 (88)
12.2.5.关于NETCONVERT (89)
12.2.6.关于仿真方面 (89)
12.2.7.关于可视化 (90)
12.2.8.XML模式定义 (91)
12.3.关于SUMO整体性的描述 (91)
13.附录B (91)
13.1.JOSM入门 (91)
13.1.1.基本概念 (91)
13.1.2.在JOSM中编辑地图 (91)
13.1.3.上传地图到OSM服务器 (92)
13.1.4.How Tos (92)
13.1.5.快捷键 (95)
13.2.概念 (98)
13.2.1.结点、路线、关系 (98)
13.2.2.标签 (98)
13.2.3.对象ID (99)
13.2.4.对象版本 (99)
13.3.JOSM接口 (99)
13.3.1.地图视图 (99)
13.3.2.主菜单 (99)
13.3.3.工具栏 (100)
13.3.4.切换工具栏 (100)
13.3.5.其他工具栏 (100)
1.简介
1.1.交通仿真
1.1.1.交通仿真分类
根据仿真细节的等级,交通流模型有4个等级:
宏观模型:
微观模型:仿真道路上每个车辆的移动,一般假定车辆行为同时依赖于车辆的物理属性和驾驶员的控制行为。
SUMO使用Stefan Krau开发并被后续扩展的微观模型(see Krauss1998_1, Krauss1998_2)。
中观仿真:介于宏观和微观之间,使用序列方法仿真车辆移动,单个车辆在这些序列间移动。
亚微观仿真:象微观那样看待车辆,但是扩展了很多子结构。
例如这些子结构可能描述了引擎转与车辆速度有关,或者驾驶员的行为偏好。
这比简单的微观仿真有更多的细节计算。
然而亚微观模型需要更长的计算时间,这限制了仿真的网络规模。
在连续空间仿真中,每个车辆有一个浮点数描述的特定位置。
相反,离散空间仿真是细胞自动机,它把街道分成很多细胞,在仿真街道上的车辆从一个细胞跳到另一个细胞。
1.1.
2.用户分配
很显然,每个司机都试图选择通过网络的最短路径,但是如果所有人都这样做,一些路径(尤其是干道)将变得拥挤,使得用户利益受损。
这个问题的解决方法就是用户分配,目前已经有多种方法可用,SUMO使用的是Christian Gawron开发的动态用户分配(DUA)方法
1.2.SUMO概览
SUMO是一个微观的、连续的道路交通仿真软件,主要由德国宇航中心开发。
(German Aerospace Center (DLR).)
该软件始于2000年,其作为一个开源、微观道路交通仿真而开发的主要目的是给交通研究组织提供一个实现和评估自己算法的工具。
为获得完全交通仿真不必涉及所有需要的部件,例如实现和设置交通网络,命令,交通控制。
DLR组织提供这个工具是想:1):作为架构和模型基础来使用,使得实现算法更具可比性。
2):从其他志愿者获得帮助。
从2001年,第一个可运行版本在DLR内部的许多工程上得到应用。
主要的应用有:1实现和评估交通管制措施,例如新的交通灯系统或新的交通诱导方法。
2 SUMO也被用来在有大量参与者参与的庞大事件中做短时交通预测(30分钟)
3使用GSM网络评估交通监督。
从2002年,开始应用于:车-车,车-设施间通信的评估。
有两个重要的三方合作项目:第一个TraCI,这是SUMO的一个扩展,探索与外部应用进行通信的可能性,由LA大学的Axel Wegener开发。
第二个是TraNS,实现SUMO和网络仿真软件ns2的结合,使用TraCI
实现两者通信。
1.2.1.特点
·完全工作流(网络和路径导入,动态用户分配,仿真)
·仿真
自由车辆移动冲突
多种车辆类型
多车道道路的车道变换
交叉口右向规则
交叉口类型的层次性
快速openGL图形用户接口
管理具有几万条街道的网络
高执行速度,在1GHz的机器上可以每秒更新10万辆车
使用TraCI在运行时与其他应用协同工作
网络宽度、基于道路、基于车辆、基于探测器输出
·网络
1)多种网络格式(VISUM,Vissim,Shapefiles,OSM,Tiger,RoboCup,XML
描述)可以导入
2)通过试探确定缺失值
·路径
微观路径,每个车辆一个路径
动态用户分配
·高可移植性
仅使用标准C++库和兼容类库
主要是Linux发行包,但Windows包也存在
·高互操作性,因为仅使用XML数据
1.2.2.包含的应用
SUMO不只是仿真应用的名字,也是完整软件包的名字,这个软件包包含了用于仿真的许多应用,具体如下:
应用名字简要描述
SUMO 微观仿真的命令行应用,没有可视化界面
GUISIM 微观仿真的图形界面应用
NETCONVERT 网络导入和生产器;读取不同格式的道路网络并转换为SUMO格式GETGEN 为SUMO仿真生成抽象网络
DUAROUTER 计算通过网络的最短路径(时间最短),导入命令描述的不同类型,执行DUA
JTRROUTER 使用交叉口转弯比率计算路径
DFROUTER 通过感应线圈计算路径
OD2TRIPS 分解OD矩阵为单个车辆路径
POLYCONVERT 从不同格式导入兴趣点和多边形,并转换为可被GUISIM可视化的描述
AdditionalTools 为实现一个大的应用程序,有一些任务是不必要的,因为已经存在了一些对不同问题的解决方案(及工具软件)
1.2.3.设计原则
两个主要的设计目标:高性能和可移植。
为此早期版本仅在命令行下运行,没有图形用户界面,所有参数必须手工插入。
同样由于这个目标,软件被分裂为几个部分,每个部分有一个特定目的,必须单独执行。
和其他仿真包有些不同,这里的动态用户分配作为一个外部应用,而不是集成在仿真本身里面。
这种分裂使得包里的应用程序更容易扩展,因为每一个都比哪些集成在一起的程序小的多。
而且,它允许使用更快的数据结构(为实现设计目标而做的调整),而不是复杂和载入缓慢的数据结构。
但是这使得SUMO与其他仿真包比起来使用很不方便。
因为有其他事情要做,我们目前没有为集成应用而重新设计的打算。
2.基本使用
2.1.符号
Wiki中的文档使用标识来区分不同类型信息。
标识的意义将在后面描述。
2.2.命令行
如果你遇到这样的情况:
netconvert --visum=MyVisumNet.inp --output-file=.xml
你应该知道这是命令行调用。
可能在行末还会有”\”,这表示你需继续输入而不要回车(输入时忽略“\n”),下面的命令和上面的是一样的:
netconvert --visum=MyVisumNet.inp \
--output-file=.xml
2.2.应用程序参数
命令行参数名字一般这样标识:<Like this>
2.3.XML举例
XML元素和属性如下标识。
如果它们的值是变量:<Like this>。
完整的XML文件如下所示:
<myType>
<myElem myAttr1="0" myAttr2="0.0"/>
<myElem myAttr1="1" myAttr2="-500.0"/>
<myType>
2.4.模式
方括号”[ ]”表示里面的信息是可选的,尖括号”<>”表示这里需插入你自己的值。
<SUMO>是你保存SUMO软件包的位置。
2.5.数据类型
• <INT>: 整型值,可以为负的
• <UINT>: 无符号整型值,不需>=0
• <FLOAT>: 浮点数值
• <STRING>: 任何字符串,但仅使用ASCII字符
• <ID>: 不包含'#'的字符串
警告:
以下是禁止使用字符但并不完全:
• <FILE> or <FILENAME>: 文件路径
• <PATH>: 真实或抽象路径(主要是文件夹)
•<COLOR>:逗号分隔的浮点数三元组(<FLOAT>,<FLOAT>,<FLOAT>), 依次描述红
绿蓝部分
• <2D-POSITION>:逗号分隔的浮点数二元组(<FLOAT>,<FLOAT>), 依次描述x,y偏移。
•<2D-BOUNDING_BOX>:逗号分隔的浮点数四元组
(<FLOAT>,<FLOAT>,<FLOAT>,<FLOAT>),依次描述X最小值,Y最小值,X最大值,Y 最大值
•<PROJ_DEFINITION>:投影定义的字符串,被proj.4使用。
定义字符串必须被包含在引号中。
参考文件类型:
• <NETWORK_FILE>: Netgen 或Netconvert创建的SUMO网络文件
• <ROUTES_FILE>: DUAROUTER 或JTRROUTER 或手工创建的路径文件
2.6.安装SUMO
你需要明确你是简单使用它,还是打算扩展它。
1):如果你仅想使用SUMO,下载解压后可以直接使用,运行SUMO所需要的所有文件已经包含进来了。
Tools文件夹里的一些额外脚本会需要Python 和Perl语言支持。
2):如果你还打算扩展SUMO,你可以下载源码分发包并构建SUMO。
如果你在没有安装我们的二进制分发包的机器上构建了软件包,请通知我们,这样我们可以把它包含进来。
2.6.1.安装二进制版本(windows平台)
下载名为sumo-winbin-<VERSION>.zip的压缩包并解压。
在这个目录下,找到bin的文件夹,里面是可执行程序,你可以双击GUISIM并看下data/examples目录下的例子。
所有其他的应用(如(DUAROUTER, DFROUTER等)必须在命令行下运行。
从0.9.7版开始,我们使用Microsoft Visual Studio 2005 SP1构建,这导致需要安装Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)并配置。
如果你无法运行任何一个SUMO应用,请首先试着安装这些包。
2.6.2.编译构建应用(Windows平台)
这里介绍如何使用可以免费使用的工具构建Sumo(这不意味着开源)。
请在开始构建前阅读完所有文档,这里有一些使用说明和缩写。
如果你不需要GUI,就可以跳过所有与Fox相关的东西。
如果你不需要精确的地理数据转换,就可以跳过与GDAL,Proj和FWTools相关的东西。
1):下载Visual C++ 2005 Express Edition (or a newer one)和the Platform SDK 并安装。
确定正确配置Visual Studio,以找到平台包含的文件和库。
2):下载Python并安装,这用来动态包含SVN版本到编译。
(编译构建可以不依赖它工作,但是你会发现令人讨厌的警告,甚至编辑窗口崩溃)。
Python 3 不能工作,Python 2.6可以工作但是还未测试。
1):为你的Visual Studio version分别下载Xerces-C预编译包(对VS 2005 需要windows-vc-8.0.zip;Visual Studio 2008 (9.0)),Fox 源码(1.6.36版确定可以工作),FWTools(版本1.1.3可以工作,2.4.7会无端出错)或者PROJ,GDAL源码。
2):注意安装路径:MSVC如果使用包含空格的路径可能有问题,所以试着避免安装到含空格的路径。
以上描述的仅对当前的SVN有效,或者使用一个更新版本(0.9.5以后的)。
请谨记从SVN 编译你必须:1)安装Python,2)取消src/windows_config.h文件中的HAVE_VERSION_H 定义。
类库:
Xerces-C
Xerces-c是一套健壮、强大(同时也很庞大)的XML 解析库。
截止(包括)0.10.3版本(确切是到SVN6993版次),SUMO默认使用xerces-c 2.8,现在使用xerces-c 3.0.1.使用不同xerces版本编译需要的改变被限制在src/windows_config.h, build/msvc8/Win32.vsprops and / or build/msvc8/x64.vsprops。
1):你仅需要安装Xerces3.0.1的二进制分发版,或者它的64位版本(做64位编译)。
2):创建一个环境变量XERCES,指向你的xerces-c目录,例如:
set XERCES=D:\libs\xerces-c-3.0.1-x86-windows-vc-8.0.
3):复制dll文件%XERCES%\bin\xerces-c_3_0.dll和
%XERCES%\bin\xerces-c_3_0D.dll 到PATH下的目录 (终极手段:复制到windows' system32 目录).
4):对于64bit build 环境变量名师XERCES_64
Fox
1):如果不需要GUI,可以跳过这个部分
2):截止(包括)0.10.3版本(确切是到SVN 7025版次) sumo使用fox 1.4, 现在使用fox 1.6. 构建指令时相同的,仅在需要时把1.6替换1.4,或者FOX16替换FOX14。
3):定位到fox的目录,打开VC工程。
例如: D:\libs\fox-1.6.36\windows\vcpp\win32.dsw. 4):确定转换到VC8.0,构建foxdll工程作为发行和测试版本(如果你想使用VisualStudio debugger)。
如果你想构建64位平台的程序,你需要使用Configuration Manager为foxdll工程添加新的配置。
5):你可能会得到大约240个警告和1个错误,但这些可以忽略。
6):未找到windows.h的错误意味着SDK未正确安装
7):创建环境变量FOX16指向fox目录,例如:
set FOX16=D:\libs\fox-1.6.36.
8):复制dll文件%FOX16%\lib\FOXDLL-1.6.dll 和
%FOX16%\lib\FOXDLLD-1.6.dll到PATH下的目录 (终极手段:复制到windows' system32 目录).
PROJ 和GDAL
如果不需要转换地理坐标,可以通过src/windows_config.h,
build/msvc8/Win32.vsprops 和/ or build/msvc8/x64.vsprops文件使proj和gdal不可用,并跳过这个部分。
否则你可以下载FWTools的二进制分发包或者自己编译。
自己编译仅在以下情况下是需要的:1):当你需要构建64位应用 2):你想传送(ship)SUMO可执行程序的一个拷贝,但不需要传送FWTools。
FWTools
• 运行可执行文件,并选择一个目标目录。
•创建环境变量 PROJ_GDAL 指向那个目录,例如:
set PROJ_GDAL=D:\libs\FWTools1.1.3.
• 添加%PROJ_GDAL%\bin 到PATH变量
从源码构建
如果由于某些原因你需要自己构建PROJ 和GDAL ,请遵循PROJ 和GDAL 的相关构建指令。
然后你应把它安装到通用目录,并使PROJ_GDAL变量指向这个目录。
你同样需要复制proj.dll 和gdal*.dll到你的PATH.
如果是64位的构建,环境变量名应该是PROJ_GDAL_64.
SUMO软件
配置
1)如果安装了所有的库,并正确设置了环境变量,则不需要进一步的配置,这个部分可以跳过。
2)Visual Studio使用build/msvc8子目录里的.vsprops文件进行build配置。
如果更改了这些设置将会影响到所有的子工程(可以使用文本编辑器进行编辑),确定编辑这些文件而不是编辑工程配置(.vcproj)
3)如果你不想通过环境变量来定义包含文件和类库的位置,你可以把位置直接输入到 x64.vsprops或者Win32.vsprops(或者两者都用,这依赖于你的目标平台)。
也可以通过这些文件使得PROJ 和GDAL不可用,这通过设置"LIB" Usermacro为空值来实现。
构建(Build)
• 打开工程sumo\build\msvc8\prj.sln ,构建你需要的配置.
•64位的构建仍处于试验阶段,这个构建不使用Proj, GDAL and Fox,所以不构建guisim. 故障处理(Troubleshooting)
Linker reports something similar to "LINK: fatal error LNK1104: cannot open file 'C:\Program.obj'"
你可能把类库安装到含有空格的路径中了,相关的环境变量应嵌入在引号内。
例如:set FOX="D:\my libs\fox-1.4.29".
预构建事件失败(Failure on pre-build event)
如果Visual Studio pre-build event 失败,你完全可以忽略,除非你从SVN仓库构建,这种情况你需要正确安装Python.
2.6.
3.构建文档
Windows平台不支持文档生成,但是Windows的二进制分发包里已经有了一个Pdf文档。
3.使用命令行程序
目前SUMO包里的大多数应用程序都是命令行工具,除了GUISIM工具。
我们注意到使用命令行程序不是很流行,尤其对那些非信息领域的科学家,下面简要介绍一下。
但这并不是完全的命令行使用指南,仅仅是SUMO使用的简要介绍。
3.1.基础
3.1.1.开启命令行窗口
首先需要打开命令行窗口。
Windows平台,可以这样启动:开始—>运行-->cmd.exe,出现的黑色窗口即是命令行。
Linux平台:通过开启终端。
3.1.2.从命令行使用SUMO程序
SUMO程序是普通的可执行文件,可以在命令行下输入条码的名字来启动它们;例如NETGEN程序调用:
Netgen.exe Windows平台
Netgen Linux平台
这个操作简单地启动程序,因为没有给出参数,程序不知道要做什么,所以仅仅打印出自己的相关信息:
SUMO netgen Version <VERSION>
(c) DLR 2001-2010;
Use --help to get the list of options.
3.2.参数
每个应用程序都有一个参数列表,这些参数定义了哪些文件需要处理、生成,或者定义了程序的行为。
一般情况下,一个程序需要至少两个参数:一个输入文件,一个输出文件。
但多数情况下需要更多的参数。
每个程序的参数描述出现在应用程序描述里面。
下面的描述说明怎么设置参数。
3.2.1.命令行下设置参数
有两种参数:布尔参数和带值参数。
前者不需要参数值,当且仅当该参数出现是它被设置为“true”。
在命令行下设置带值参数包括两部分:参数名字和参数值。
例如:如果想载入指定的路网”.xml”,必须这样写:
--net .xml
前面的“--“表示后面跟的是参数的长名字,在空格之后必须紧跟参数值。
也可以使用”=”代替空格:--net=.xml
一些常用参数可以被简写,参数--net简写为-n。
下面的和以上两个例子有相同效果:-n .xml
请注意“-”表示简写参数名
3.2.2.参数值类型
SUMO应用程序知道哪种值是它们期望的,例如:NETGEN允许你设置默认车道数,必须是整型值。
也就是说,如果给了字符串或其他类型的值将被忽略,并且应用程序给出错误信息。
列表是值类型的特殊情况,例如:要载入到仿真程序的附加文件列表。
当给出的文件多于一个时,文件之间必须用逗号分隔。
3.3.配置文件
参数列表可能很长,所以引入了配置文件。
你可以设置一个配置文件,里面包含了你要启动的应用程序的所有参数。
仅给出这个配置文件,你就可以启动这个应用程序。
配置文件是XML文件,有个名为<configuration>的根元素,参数写成元素名字,希望设置的参数值作为元素属性存储。
命令行中给出的参数:--net-file .xml 在配置文件中变为:<net-file value=".xml"/>。
对于逻辑参数,可以用值“true”,“on”,“yes”,“1”,或者“x”激活该参数;用值"false","off", "no", or "0"关闭该参数。
对于上面的例子,配置文件如下(保存为“test.sumo.cfg”):
<configuration>
<n v=".xml"/>
<r v="test.rou.xml"/>
<a v="test.add.xml"/>
</configuration>
一个更详细但等价的写法如下:
<configuration>
<input>
<net-file value=".xml"/>
<route-files value="test.rou.xml"/>
<additional-files value="test.add.xml"/>
</input>
</configuration>
上面的input部分仅服务于文件目的,没有功能方面的意思。
带有配置文件的SUMO调用是这样的:
sumo.exe -c test.sumo.cfg
这意味着我们不用参数,而是仅用参数--configuration-file <FILE> or -c <FILE>给出了配置文件
3.3.1.配置文件命名规范
不同的目标程序有不同的扩展名,强烈建议遵循该规范。
GUISIM的仿真配置必须遵循规范,它仅能后缀为“.sumo.cfg”的仿真配置文件。
扩展名规范如下:
• *.sumo.cfg: Configuration file for SUMO and GUISIM
• *.netc.cfg: Configuration file for NETCONVERT
• *.netg.cfg: Configuration file for NETGEN
• *.rou.cfg: Configuration file for DUAROUTER
• *.jtr.cfg: Configuration file for JTRROUTER
• *.df.cfg: Configuration file for DFROUTER
• *.od2t.cfg: Configuration file for OD2TRIPS
3.3.2.配置文件和命令行参数
附加配置文件后,命令行参数照样可以使用(GUI程序例外,它需要在配置文件里设置好所有参数)。
如果一个参数在配置文件和命令行里同时被设置,那么命令行里的值优先使用。
3.3.3.生成配置文件模板
SUMO包里的程序允许用户生成配置文件模板,可以保存一个空的配置。
可以这样来实现(使用netgen命令):--save –template<FILE>。
这种情况下,配置文件包含带有默认值的参数,如果需要更多的参数信息,可以这样实现:mented,这将提供更多的参数信息。
例如:Netgen --save –template test.sumo.cfg
3.3.
4.保存当前配置到文件
可以把当前参数设置保存到配置文件,这样来实现:--save-configuration <FILE>.
3.4.通用参数
SUMO包里的程序共享一些参数,具体参看下表:
报告参数:
参数描述
--verbose 详细报告应用程序正在做什么
--suppress-warnings 不记录警告信息
--print-options 打印参数,并给出当前参数值
--help
-?
程序帮助信息
--log-file 所有信息都显示在控制台,并记录进指定的文件
随机数参数:
这些参数决定了随机数发生器的种子怎么产生。
相同的种子导致产生相同的随机数序列。
但是默认情况下,种子被硬编码为固定值。
因此,只要保持配置设置不变,几次仿真运行的结果输出是完全一样的。
为了改变这种情况,使用下面的参数:
参数描述
--srand <INT> 给随机数生成器设置指定值。
可以使用不同的值以获得不同但可重现的仿真结果
--abs-rand 让SUMO自己选择种子。
如果可能,种子将给
予/dev/urandom的输出,否则会基于当前系
统时间。
该参数优先于—srand<INT>
注意:--abs-rand 的优先权高于--srand <INT>意味着不能可以在配置文件中设置set --abs-rand ,而在命令行里改写--srand <INT>。
4.仿真准备
4.1.所需数据
首先,需要让被仿真的交通网络运行起来。
由于SUMO仿真大型网络,所以我们主要关注导入交通网络及导入数据中丢失值的计算。
因此,没有网络图形编辑器可用。
另外,还需要网络中道路的信息,及交通灯的信息。
更进一步,你可能需要交通需求的信息。
尽管许多交通仿真使用统计分布,但是SUMO 中的每辆汽车知道自己的路径,这里的路径是要通过的边(道路)的列表。
你必须遵循以下步骤来实现一个仿真方案:
1)创建网络
这一步可以有三种方法实现:
1:使用NETGEN生成抽象网络
2:在XML文件里设置自己的描述,并用NETCONVERT导入
3:使用NETCONVERT导入一个已经存在的网络(可以使用OSM地图) 2)创建需求
这一步可以有五种方法实现:
1:描述明确的车辆路径
2:仅使用车流和转弯百分比(可以考虑)
3:生成随机路径(不实用)
4:导入OD矩阵(特定格式)
5:导入已存在的路径
3)A:如果需要,计算动态用户分配
4)B:用给定的方法校正仿真
5)执行仿真,获得你所需要的输出
下图比较形象地表述了这个过程:
4.2.最佳实践
选择正确的方案依赖于所做的调查。
如果想让结果容易评估,生成的抽象网络可能是最好的解决方案,抽象网络已经被用来评估C2C-networks的弱点。
如果需要研究真实交通,可能会重用已经有的数据。
5.网络构建
5.1.SUMO道路网络
SUMO使用自有的道路网络描述。
尽管是可读的,但不意味着SUMO的道路网络要手工编辑。
相比之下,应该使用NETCONVERT转换已有的地图,或者使用NETGEN产生简单、抽象的几何道路图形。
NETGEN允许自由地创建网络。
对一些重新选择路径的小规模测试,tls-signals等,这可
能是最佳方法。
街道的清晰命名使得容易定义自己的路径。
但是如果你想仿真真实网络,那么使用NETGEN产生的网络是没有用的。
使用NETCONVERT可以从其他数据源导入道路网络,如VISIM,shape files 和OSM 数据库,这也是设置真实世界网络的工具。
然而,多数例子是手工写成的XML文件,和从NETCONVERT转换来的。
起初,这些例子很小,手工编写可以比使用NETGEN更好的控制输出。
而且使用XML数据定义自己的网络非常灵活。
网络格式:
粗略地讲,SUMO道路网络是个有向图。
节点代表道路交叉口,边代表道路或街道。
边和车道
边的属性有:
Id:边的标识
From:起始节点的ID
To:终止节点的ID
Priority:道路的重要程度,是一个数值类型
Function:一个抽象边的用途(目的)
对于仿真,我们感兴趣的是”function”这个属性,它描述了边怎么被使用,在真实世界中是否可以找到这样的边,或者它只是一个为实现分配而建的辅助结构。
我们定义了以下用途:1)normal:这类“边”是道路网络中的普通部分,如高速公路或链接两条道路的街道。
2)connector:这类“边”是个微观连接器—并不是真实世界道路网络的一部分。
然而在仿真中,不区分“连接器道路”和“普通道路”,仅GUISIM允许隐藏“连接器道路”。
3)internal:这类“边”是交叉口的一部分(在交叉口内部)。
在仿真中它的使用不同于普通边(normal)。
每个边都需要它所拥有的车道的定义,每个车道的定义如下:
• id: 车道id
• depart(开出):车辆是否可以从该车道正常开出(1可以,2不可以)
• vclasses: 该车道允许或禁止通行的车辆类别列表。
• maxspeed: 该车道所允许的最高车速
• length: 该车道的长度
此外,车道有形状属性。
尽管网络从(0,0)开始转换,并不一定网络的所有部分的坐标为正。
节点
注意:可能两个不同的节点有相同的位置(怎么解释?)
5.2.坐标系和对齐
这里的网络使用笛卡尔坐标系,最左端的节点在x=0处,最下端的节点在y=0处。
这意味着,导入路网时,如果原始网络使用的不是笛卡尔坐标系,NETCONVERT 和NETGEN 将会首先映射网络。
然后移动网络到原点(0,0).
这个处理被记录在生成网络的元素位置里。
可以找到如下属性:
以下省略。
SUMO道路网络向北对齐,当然这取决于用户怎么定义道路网络,但是如果从Open Street Map or shape files导入路网,上指向北方。