createVehTypeDistribution.py#
通过从可配置的值分布中采样来创建车辆类型分布,用于期望的 vType 参数。示例:
python tools/createVehTypeDistribution.py config.txt
唯一必需的参数是配置文件,格式如下所示(示例 config.txt):
tau; normal(0.8,0.1)
sigma; normal(0.5,0.2)
length; normal(4.9,0.2); [3.5,5.5]
param; myCustomParameter; normal(5, 2); [0, 12]
vClass; passenger
carFollowModel; Krauss
在配置文件中,每行用于一个车辆类型属性。语法为:[param; ] <属性或参数名称>; <值或分布> [; <限制>]
如果在行首给出了前缀 param,则假定要对车辆参数的值(作为 vehicle 元素的 param 子元素给出)进行采样。否则,将对 vehicle 元素的属性值进行采样。
ValueOrDistribution 可以是字符串、标量值或分布定义。可用的分布及其语法为:
- "normal(mu,sd)",其中 mu 和 sd 为浮点数:均值为 mu、标准差为 sd 的正态分布。
- "normalCapped(mu, sd, min, max)" 默认情况下不接受负值,但可以通过设置负的下限来启用。
- "lognormal(mu,sd)",其中 mu 和 sd 为浮点数:均值为 mu、标准差为 sd 的对数正态分布。
- "uniform(a,b)",其中限制 a 和 b 为浮点数:a 和 b 之间的均匀分布。
- "gamma(alpha,beta)",其中参数 alpha 和 beta:伽马分布。
附加选项:
- --output-file 配置要写入的输出文件的名称
- --name 创建的分布的名称
- --size 用于填充分布的采样数量
- --seed 设置随机数生成器的种子
从单车测量值中获取参数#
要获得均值和偏差,必须从数据集中获取一定数量的值。建议如下:
- accel:每辆车的最大(或高百分位)加速度
- deccel:每辆车的最大(或高百分位)减速度
- speedFactor:每辆车的速度/限速商的最大值(或高百分位值)
createScreenshotSequence.py#
此脚本通过重复截取屏幕截图并在模拟期间移动视口,帮助创建电影的过程。还有其他方法可以从 sumo-gui 捕获视频,例如使用外部屏幕捕获软件或使用内部截图功能。从此脚本获得的截图序列可以使用适当的视频软件连接成视频。
示例:
python tools/createScreenshotSequence.py --sumocfg test.sumocfg -o outDir --begin 600 --end 900 -p filePrefix --zoom 600:500;900:1000 --translate 800:100,100;900:150,100 --include-time
这将运行由 --sumocfg 指定的配置文件,并为截图过程注册一个 TraCI 步骤监听器。截取每个时间步屏幕截图的时间间隔可以限制为仅在 --begin (s) 开始或在 --end (s) 结束。如果未明确定义结束时间,脚本将运行模拟直到配置中的结束值(如果已定义)或进一步运行到技术系统限制。截图将写入由 -o / --output-dir 给出的目录。它们的文件名可以选择以 -p / --prefix 值开头,或包含模拟开始的日期/时间 (--include-time)。标准文件类型设置为 png,但可以通过 --image-format 设置。文件名包含一个零填充的计数器编号,以便在后期制作中轻松排序。
可用的动画属性包括:
- 使用 --zoom 选项进行缩放。选项值由时间对和缩放值组成(分隔符:冒号),由分号连接。
- 使用 --rotate 选项进行角度旋转。选项值由时间对和角度值(以度为单位,分隔符:冒号)组成,由分号连接。
- 使用 --translate 选项进行偏移/中心位置调整。选项值由时间对和位置值组成(分隔符:冒号,位置维度由逗号分隔),由分号连接。
distributeChargingStations.py#
充电站通常放置在(现有的)停车位上。此工具有助于为给定的停车位配备指定份额的充电基础设施。在实践中,这意味着生成充电站定义,并最终将停车区域切割成两部分以达到所需的充电点数量。
因此,该工具会写入包含充电站和停车区域的附加文件。它至少需要网络文件 (--net-file) 和一个附加文件 (--add-files) 才能工作。它提供以下选项:
- --net-file:充电站所属的网络文件(用于概览充电站数量以及是否已达到所需的充电点份额)
- --add-files:包含停车区域和可能的充电站定义的文件(定义在何处以及放置多少新充电站的情况)
- --selection-file:网络选择文件,用于将创建充电站的区域限制在引用的边缘
- --vclass:仅使用允许给定车辆类别的边缘
- --output-file:包含充电站和停车区域定义的新附加文件
- --output-parking-file:将停车区域定义与充电站分离的附加输出文件
- --include-existing:在使用 --probability 和 --density 计算所需充电站时,考虑来自附加文件的现有充电站,并再次输出它们
- --skip-equipped-edges:仅在尚无充电站的边缘上放置新充电站(给定通过 --add-files 加载的定义)
- --only-roadside:仅考虑路边停车以放置充电站(不能与 --only-parking-lot 一起使用)
- --only-parking-lot:仅考虑停车场停车位以放置充电站(不能与 --only-roadside 一起使用)
- --entire-parkings:为每个边缘仅选择一个最适合所需充电点数量的停车区域
- --separate-unused-parkings:将未被充电站引用的停车定义写入 --output-parking-file 的路径,而被引用的则写入 --output-file
- --probability:沿边缘的停车区域接收充电基础设施的概率
- --density:沿边缘要配备充电点的总停车位份额
- --power:要创建的充电站的功率属性(参见充电站属性)
- --efficiency:要创建的充电站的效率属性(参见充电站属性)
- --min:每个边缘要创建的最小充电点数量
- --max:每个边缘要创建的最大充电点数量
- --prefix:生成的充电站 ID 的前缀
- --suffix:附加到分割的停车区域的后缀
- --seed:随机种子(用于随机概率,参见 --probability)
extractTest.py#
如果您想运行测试文件夹
python tools/extractTest.py <测试目录的路径>
- 或使用在线测试提取。在在线工具中,将您想要的测试路径(例如 <SUMO_HOME>/tests/sumo/extended/rerouter/use_routing_device)输入表单,即可获得一个包含所有文件的 zip。
generateParkingAreas.py#
此工具为网络生成停车区域,并将其保存在附加文件中。如果未定义输出文件名(使用 -o 或 --output-file),则默认使用 parkingareas.add.xml。
最基本调用:
python tools/generateParkingAreas.py -n <我的网络>
其他示例:
python tools/generateParkingAreas.py -n <我的网络> -o <输出文件名> --space-length <每个停车位的视觉长度> --min <最小容量> --max <最大容量>
必需参数是网络 (-n 或 --net-file)。可以通过调用 python tools/generateParkingAreas.py --help 获取更多选项。
附加选项:
- --selection-file 将生成限制在此选择文件中提到的边缘
- --output-file 定义输出文件名
- --probability 边缘接收 parkingArea 的概率
- --length 每个停车位所需的长度
- --space-length 每个停车位的视觉长度
- --width 每个停车位的视觉宽度
- --random-capacity 随机化 roadsideCapacity
- --min parkingAreas 的最小容量
- --max parkingAreas 的最大容量
- --angle 停车区域角度
- --lefthand 在边缘左侧创建停车区域(仅在未标记相邻车道的地方,参见对向行驶)
- --on-road 将强制停车区域创建在道路上(车辆将直接停在车道上)
- --on-road.lane-offset 设置将创建路边停车区域的车道(对所有车道使用负值或输入车道索引)
- --prefix parkingArea id 的前缀
- --seed 随机种子
- --random 使用随机种子初始化随机数生成器
- --vclass 仅使用允许给定车辆类别的边缘
- --verbose 告诉我您正在做什么
generateParkingLots.py#
此脚本生成停车场。示例:
python tools/generateParkingLots.py -b <xmin, ymin, xmax, ymax> -c <连接边缘>
[-i <停车-id> -n <停车位数量> -l <空间长度> -a <空间角度> ...]
或
python tools/generateParkingLots.py -x <x坐标> -y <y坐标> -c <连接边缘>
[-i <停车-id> -n <停车位数量> -l <空间长度> -a <空间角度> ...]
必需参数是停车场的形状 (--bounding-box) 或位置 (--x-axis 和 --y-axis) 以及连接边缘 (--connecting-edge)。可以通过调用 python tools/generateParkingLots.py --help 获取更多选项。
附加选项:
- --parking-id 定义停车场的名称/ID
- --parking-spaces 定义停车位的数量
- --start-position 定义停车场入口/出口的起始位置
- --end-position 定义停车场入口/出口的结束位置
- --space-length 定义每个停车位的长度
- --space-angle 定义停车位的角度
- --x-space-distance 定义两个停车位位置之间的横向距离(x 方向)
- --y-space-distance 定义两个停车位位置之间的纵向距离(y 方向)
- --rotation-degree 定义停车场的旋转度数
- --adjustrate-x 定义旋转存在时 x 轴的修改率
- --adjustrate-y 定义旋转存在时 y 轴的修改率
- --output-suffix 输出后缀
- --fullname 停车区域的全名
- --verbose 告诉我您正在做什么
generateStationEdges.py#
此脚本为每个公共交通站点生成一个行人边缘(以 .nod.xml 和 .edg.xml 文件的形式)。输出适用于用最少的行人基础设施(用于出发、换乘和到达)扩展纯铁路网络。示例:
python tools/generateStationEdges.py rail.net.xml stops.xml
netconvert -s rail.net.xml -e stops.access.edg.xml -n stops.access.nod.xml --ptstop-files stops.xml -o railForPersons.net.xml --ptstop-output stopsWithAccess.xml
generateRerouters.py#
此脚本生成用于关闭给定道路列表的重定向器。它将自动确定放置通知标志的位置以方便重定向。
python tools/generateRerouters.py -n <网络文件> -o <输出文件> -x CLOSED_EDGE1,CLOSED_EDGE2
generateContinuousRerouters.py#
此脚本为连续运行的模拟生成重定向器定义。重定向器放置在每个交叉口前方,路线通向下一个交叉口,并具有可配置的转弯比例。进入模拟的车辆将连续循环(除非遇到死胡同)。示例:
python tools/generateContinuousRerouters.py -n <网络文件> -o <输出文件>
generateParkingAreaRerouters.py#
此脚本从停车区域定义生成停车区域重定向器。示例:
python tools/generateParkingAreaRerouters.py -n <网络文件> -a <停车区域文件> -o <输出文件>
generateLandmarks.py#
此脚本生成地标文件,用于 duarouter 选项 --astar.landmark-distances FILE --astar.save-landmark-distances FILE2。示例:
python tools/generateLandmarks.py -n <网络文件> -o <输出文件>
参见路由算法 ALT。
averageTripStatistics.py#
此脚本使用不同的随机种子多次运行给定的 sumo 配置,并平均行程统计输出(参见行程统计)。
示例:
python tools/averageTripStatistics.py <sumocfg文件>
默认情况下,模拟将运行 10 次,随机种子生成的初始种子为 42。这些值可以分别使用选项 -n 和 -s 更改。
ptlines2flows.py#
此脚本确定可行的站点间行程时间,并为所有线路创建公共交通时刻表(定期时刻表)。站点间行程时间通过在空网络上运行背景模拟来确定,使用给定的路线或站点间的最短路径。示例:
python tools/ptlines2flows.py -n <网络文件> -s <公交站点文件> -l <公交线路文件> -o <输出文件>
作为输出,公交线路被写入流量。默认情况下,采用 600 秒的周期作为定期间隔,可以使用 -p 选项更改。
使用 --use-osm-routes 选项,将使用给定 osm ptlines-file 中的公交路线,而不是在站点之间创建新的最短路径路线。
ptlines-file 通常由 netconvert 选项 --ptline-output 在导入 OSM 数据时创建。但是,它也可以为非 OSM 网络进行定制或从头创建。
注意
有关使用此工具处理 OSM 数据的教程也可用。
示例输入#
公交线路的最小描述如下所示:
<additional>
<ptLine id="0" line="123" type="bus">
<busStop id="stopA"/>
<busStop id="stopB"/>
<busStop id="stopC"/>
</ptLine>
</additional>
示例输出#
使用的 busStop 必须在附加文件中定义,并在运行工具时通过选项 -s 传递。生成的公交定义可能如下所示:
<routes xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/routes_file.xsd">
<vType id="bus" vClass="bus"/>
<route id="bus_123:0" edges="110450334#1 110450334#2 338412122 391493949 391493947 391493950#0 391493950#1 391493952#0 391493952#1 391493952#2 391493954#0 391493954#1 391493954#2 391493954#3">
<stop busStop="stopA" duration="20" until="35.0"/>
<stop busStop="stopB" duration="20" until="101.0"/>
<stop busStop="stopC" duration="20" until="221.0"/>
</route>
<flow id="bus_123:0" type="bus" route="bus_123:0" begin="0.0" end="3600.0" period="600" line="123:0" />
</routes>
更多选项#
- --types:仅导出具有给定类型列表的线路
- --bus.parking:让公交车在停车时清理道路
- --vtype-prefix:生成的车辆类型的前缀(允许在同一个模拟中组合多次运行)
- --stop-duration:站点的最小持续时间(默认 20)
- --stop-duration.slack:在时刻表中为每个站点预留的时间(默认 10)
- --speedfactor.bus:假定的公交车相对行驶速度(默认 0.95)
- --speedfactor.tram:假定的电车相对行驶速度(默认 1)
- --night:仅导出在夜间运行的线路(默认情况下,仅使用在白天运行的线路)
- --begin:输出中的流量开始时间(默认 0)
- --end:输出中的流量结束时间(默认 3600)
- --min-stops:使用线路的最小站点数(默认 2)
- --flow-attribute:要包含在流量中的附加属性(例如
"departSpeed=\"max\"") - --extend-to-fringe:车辆是否应在第一条路线边缘上开始,而不是在第一个站点
- --random-begin:是否将流量开始时间设置为选项 --begin 和线路周期之间的随机值
- --no-vtypes:是否跳过为输出写入 vTypes
- --seed:设置随机种子
- --ignore-errors:忽略各种输入错误
- --human-readable-time:将所有时间写为 (H:M:S)
- --verbose:更多输出
可用的 ptLine 属性#
这些值具有以下含义:
| 属性名称 | 值类型 | 默认值 | 描述 |
|---|---|---|---|
| id | id (字符串) | - | 公共交通关系的 ID(通常来自 OSM) |
| type | 字符串 (枚举) | - | 路线类型 [bus, tram, train, subway, light_rail, monorail, trolleybus, minibus, share_taxi, aerialway, ferry] |
| line | 字符串 | - | 官方线路编号(不必唯一) |
| vClass | 字符串 | - | sumo 车辆类别 |
| period | 时间 (s, H:M:S) | --period (600) | 服务周期 |
| nightService | 字符串 (枚举) | yes | 线路是否在夜间运行 [yes, no, only] |
| name | 字符串 | 线路的长名称 | |
| color | 颜色 | 官方线路颜色 |
tileGet.py#
此脚本从 ESRI ArcGIS 瓦片服务器和其他成像 API(如 Google Maps 和 MapQuest)检索背景图像。最简单的用法是仅使用 SUMO 网络文件调用它。它将生成一个包含坐标的可视化设置文件,该文件可以由 sumo-gui 或 netedit 加载。最有用的选项是 -t(要检索的瓦片最大数量)和 -u(提供瓦片服务器的 URL)。示例:
- 从公共 ArcGIS 在线实例检索数据:
python tools/tileGet.py -n test.net.xml -t 10
- 从 Google 或 MapQuest 检索卫星数据(需要先获取 API 密钥):
python tools/tileGet.py -n test.net.xml -t 10 --url maps.googleapis.com/maps/api/staticmap --key YOURKEY
python tools/tileGet.py -n test.net.xml -t 10 --url www.mapquestapi.com/staticmap/v5/map --key YOURKEY
生成的设置文件可以在 sumo-gui 中加载:
sumo-gui -n test.net.xml -g settings.xml
投影不匹配#
有几种方法可以处理不兼容性:
- 使用 gdalwarp 将网络墨卡托瓦片转换为 UTM 瓦片(推荐)
- 在网络墨卡托投影中构建您的网络(不推荐,因为这是一个糟糕的投影,道路长度会出错!)
- 接受瓦片中的一些间隙
stateReplay.py#
同步来自(远程)模拟的已保存状态文件,并在本地 sumo-gui 实例中重放它们,以观察远程模拟。
注意
此脚本需要 rsync 可执行文件,如果您使用 Linux 或 macOS,该文件可能已安装。在 Windows 上,建议安装 Windows Linux 子系统 (WSL) 并在其中安装 rsync。请不要在 WSL 中运行 sumo 或 stateReplay 本身,脚本将自行触发 WSL。
要观察步长为 1s 的模拟中的每一步,远程模拟必须使用选项 --save-state.period 1 启动。为了节省磁盘空间,建议使用选项 --save-state.period.keep 3。(即,始终仅保留最后 3 个模拟状态文件)。
注意
选项 --save-state.period 1 可能会显著减慢模拟速度。
要重放状态文件,可以使用以下调用:
python tools/stateReplay --sumo-config replay.sumocfg --src REMOTE_FOLDER --dst LOCAL_FOLDER
给定的 .sumocfg 文件只需要包含网络和远程模拟引用的任何附加基础设施。REMOTE_FOLDER 的值可以是 rsync 理解的任何文件夹(即 remotehost:~/myfolder)。 如果您使用 ssh,请确保您可以通过创建公私钥对无密码访问远程文件夹。
如果您需要向 rsync 传递附加选项,可以将它们附加到命令行,例如用于自定义 ssh 端口和详细输出:
python tools/stateReplay --sumo-config replay.sumocfg --src REMOTE_FOLDER --dst LOCAL_FOLDER -v -e "ssh -p PORT"
runSeeds.py#
使用不同的种子多次运行(sumo)配置。
示例:
python tools/runSeeds.py -k test.sumocfg --seeds 7,11,13
- 选项 --seeds 可以作为列表或范围 (
0:100) 给出。 - 应用程序路径可以使用选项 --application (-a) 设置。默认为 sumo。
- 通过传递逗号分隔的应用程序列表,每个应用程序将使用所有种子运行,结果将放入子文件夹中
- 应用程序配置路径必须使用选项 --configuration (-k) 设置
- 通过传递逗号分隔的配置列表,每个配置将使用所有种子运行,结果将放入子文件夹中
- 选项 --output-prefix (-p) 可用于为所有写入的输出文件定义前缀。字符串 "SEED" 将被当前种子替换。(默认前缀为 "SEED.")
- 选项 --threads INT 可用于并行执行应用程序运行
- 任何附加选项都将转发给应用程序
