杂项

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#

如果您想运行测试文件夹 /tests 中包含的模拟场景,此脚本会提取测试场景。为此,您可以: - 下载完整的 sumo 包 并调用:

python tools/extractTest.py <测试目录的路径>

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

投影不匹配#

注意

许多瓦片提供商使用常见的网络墨卡托投影。相比之下,netconvert 使用UTM 投影,这对于典型的网络尺寸来说要准确得多。这会在网络和瓦片之间产生不兼容性。详见下文。

有几种方法可以处理不兼容性:

  • 使用 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 可用于并行执行应用程序运行
  • 任何附加选项都将转发给应用程序