randomTrips.py#
"randomTrips.py" 为给定的网络(选项 -n)生成一组随机出行。它通过以均匀随机的方式或如下所述的修改分布来选择起点和终点边来实现这一点。生成的出行存储在一个 XML 文件中(选项 -o,默认为 trips.trips.xml),适用于 duarouter(如果给出了选项 --route-file,则会自动调用)。
出行均匀分布在由开始时间(选项 -b,默认为 0)和结束时间(选项 -e,默认为 3600,单位为秒)定义的区间内。出行的数量由重复率(选项 -p,默认为 1,单位为秒)定义。每个出行都有一个由前缀(选项 --prefix,默认为 "")和一个流水号组成的 ID。示例调用:
python tools/randomTrips.py -n <net-file> -e 50
该脚本不检查所选目的地是否可以从源点到达。此任务由路由器执行。如果网络不是完全连通的,部分出行可能会被丢弃。
选项 --min-distance <FLOAT> 确保出行的起点边和终点边之间的直线距离(以米为单位)最小。脚本将不断从边分布中采样,直到找到足够多且距离足够的出行为止。
随机化#
当使用相同的参数运行 randomTrips.py 两次时,将创建相同的结果,因为随机数生成器是用相同的值初始化的。要获得“真正的”随机性(始终产生不同的输出),请使用选项 --random。选项 --seed <INT> 可用于设置初始值,以获得不同但仍可重复的伪随机性。
边概率#
选项 --fringe-factor <FLOAT> 会增加出行在网络边缘开始/结束的概率。如果给定值为 10,则没有后继边或没有前驱边的边被选为出行起点或终点的可能性将增加 10 倍。这在模拟在模拟区域外部开始和结束的过境交通时非常有用。
选择边的概率也可以通过以下方式进行加权:
- 边长度(选项 -l),
- 车道数量(选项 -L)
- 边速度(指数级,通过选项 --speed-exponent)
- 通用边参数(选项 --edge-param)
- 行驶方向(选项 --angle-factor 和 --angle)
- 随机(选项 --random-factor)
- 边类型(选项 --edge-type-file)
要获取影响边概率的其他方法,请调用:
python tools/randomTrips.py --help
交通量 / 到达率#
到达率(也称为出发率或插入率)由选项 --period <FLOAT>(默认 1)控制。默认情况下,这会以恒定周期生成车辆,到达率为 (1/period) 每秒。通过使用小于 1 的值,可以实现每秒多次到达。如果传递了多个 <FLOAT> 数字,例如 --period 1.0 0.5(或 --period="1.0,0.5"),时间间隔将被平均划分为子间隔,每个子间隔的到达率由相应的周期控制(在前面的示例中,第一个子间隔使用周期 1.0,第二个子间隔使用周期 0.5)。还有另外两种指定插入率的方法:
- 使用 --insertion-rate 参数(如前所述,带有一个或多个值):这是用户期望的每小时车辆数。
- 使用 --insertion-density 参数(带有一个或多个值):这是用户期望的每小时每公里道路的车辆数(道路总长度是根据特定车辆类别计算的,可以通过选项 --edge-permission 更改)。
添加选项 --binomial <INT> 后,到达将使用二项分布进行随机化,其中 n(最大同时到达数)由 --binomial 的参数给出,期望到达率为 1/period(此选项在 0.23.0 版本中尚不可用)。
示例#
要让 n 辆车在时间 t0 和 t1 之间出发,请设置选项:
-b t0 -e t1 -p ((t1 - t0) / n)
Note
如果道路容量不足以容纳该数量的车辆(参见延迟出发),或者网络不是完全连通的(在这种情况下,部分生成的出行将无效),实际出发数量可能会较低。
插入分布#
插入的车辆数量(如果所有出行都有效)对于给定的随机出行选项集是固定的:(end-begin)/period。
默认情况下,所有车辆的出发时间在时间上是等间距的。由于插入的车辆随机分布在整个网络上,这导致每条边的插入车辆数量呈二项分布,如果网络很大(因此每条边的插入概率很小),这可以很好地近似泊松分布。
通过设置选项 --random-depart,(仍然固定的)出发时间数量将从 [begin, end] 上的均匀分布中抽取。这导致所有边上的车辆之间的插入时间间隔呈指数分布(这是泊松分布的间隔模式)。因此,这对于在小型网络中获得更多样化的插入时间模式非常有用。
验证的路径和出行#
当使用选项 --route-file 时,将生成一个包含有效车辆路径的输出文件。这是通过在后台自动调用 duarouter 将随机出行转换为路径并自动丢弃断开连接的出行来实现的。可能需要增加生成的随机出行数量,以考虑部分被丢弃的断开连接的出行。
有时需要获得经过验证的出行而不是路径(即利用一次性路径分配)。在这种情况下,可以使用附加选项 --validate 来生成经过验证的出行(首先生成有效的路径,然后将它们转换回出行)。
生成带有附加参数的车辆#
使用选项 --trip-attributes <STRING>,可以向生成的车辆提供附加参数(注意引号字符的用法)。
python tools/randomTrips.py -n <net-file>
--trip-attributes="departLane=\"best\" departSpeed=\"max\" departPos=\"random\""
这将使随机车辆随机分布在其起始边上,并以高速插入到合理的车道上。
Note
在 Linux 上,出行属性的引号也可以使用样式 --trip-attributes 'departLane="best" departSpeed="max" departPos="random"'
从外部文件设置车辆类型#
如果生成的车辆应具有特定的车辆类型,则需要准备一个 additional-file:
<additional>
<vType id="myType" maxSpeed="27" vClass="passenger"/>
</additional>
然后使用选项 --additional-file 加载此文件(假设已保存为 type.add.xml):
python tools/randomTrips.py -n <net-file> --trip-attributes="type=\"myType\"" --additional-file <add-file>
--edge-permission passenger
请注意选项 --edge-permission(已弃用的别名:--vclass)的使用,它确保随机起点和到达边允许特定的车辆类别。
要生成随机行人交通而不是车辆交通,可以使用选项 --pedestrians。建议将其与选项 --max-distance 结合使用,以避免过长的步行距离。有关行人模拟的更多信息,请参见 Simulation/Pedestrians。
请注意,选项 --vehicle-class 应仅用作生成给定车辆类别标准类型出行的快速简写,因为它会在生成的出行文件中放置一个标准的 vType 定义。
Note
自 SUMO 1.23.0 起,当使用选项 --vehicle-class 时,相同的值被用作选项 --edge-permission 的默认值。 此外,使用 --pedestrians 或 --persontrips 意味着 --edge-permission pedestrian。 仍然可以通过显式使用 --edge-permission 来请求不同的权限。
自动生成车辆类型#
通过设置选项 --vehicle-class,一个指定车辆类别的车辆类型定义将被添加到输出文件中。即:
python tools/randomTrips.py --vehicle-class bus ...
将添加:
<vType id="bus" vClass="bus"/>
任何适用于车辆类型而不是车辆的 --trip-attributes 将自动放置在生成的 vType 定义中:
python tools/randomTrips.py --vehicle-class bus --trip-attributes="maxSpeed=\"27.8\""
将添加:
<vType id="bus" vClass="bus" maxSpeed="random"/>
或者,在 randomTrips.py 完成后,可以编辑创建的 <vType> 元素以指定附加参数。手动编辑的缺点是再次运行 randomTrips.py 时必须重复此操作。
生成不同模式的交通#
- 使用选项 --pedestrians 将生成行人而不是车辆。
- 使用选项 --persontrips 将生成带有
<persontrip>定义的人员。这允许指定可用的交通模式,从而使用 IntermodalRouting 来决定他们是使用公共交通、私家车还是步行。- 步行或公共交通:--trip-attributes "modes=\"public\""
- 步行、公共交通或汽车 --trip-attributes "modes=\"public car\""
- 使用选项 --personrides
将生成带有 <ride line="LINE">定义的人员。 - 使用选项 --from-stops busStop 将使人员在随机的公交站点开始初始
<stop duration="0">。 - 使用选项 --to-stops busStop 将使人员在随机的公交站点结束其旅程。
Note
要将多次调用 randomTrips.py 的出行组合到单个模拟中,请使用选项 --prefix 并为每次调用设置不同的值(以确保不同的车辆 ID)。
Caution
在 Linux 上,出行属性的引号必须使用样式 --trip-attributes 'modes="public"'
中间路径点#
要生成网络内的较长出行,可以使用选项 --intermediate <INT> 生成中间路径点。这将向出行定义中添加给定数量的 via-边。
Caution
如果网络包含断开连接的组件,生成无效出行的概率会随着中间路径点数量的增加而增长(因为如果任何中间部分无效,则出行无效)。为避免这种情况,请确保您的网络只有一个组件。
自定义权重#
保存#
使用选项 weights-output-prefix <STRING> 将生成三个具有给定前缀的 权重文件(<prefix>.src.xml, <prefix>.dst.xml, <prefix>.via.xml),其中包含使用的边概率。
- .src.xml 包含边被选为
from边的概率 - .dst.xml 包含边被选为
to边的概率 - .via.xml 包含边被选为
via边的概率(仅在设置了选项 --intermediate 时使用)。
可视化#
任何这些文件都可以在 sumo-gui 中加载以进行可视化。
加载#
此格式的文件可用于通过使用选项 --weights-prefix <STRING> 并将前缀值作为参数来设置生成随机出行的自定义权重。randomTrips 脚本将尝试加载所有边和所有三个文件扩展名(.src.xml, .dst.xml, .via.xml)的权重,但如果缺少相同的值,将使用以下默认值:
- 如果加载的权重文件不包含所有边,则假定缺失边的概率为 0。
- 如果文件缺失,则在采样该类型的边时,将根据常规选项使用概率(即缺少 <prefix>.dst.xml 将导致在采样目标边时使用 #Edge_Probabilities 部分中描述的概率)。
Note
从 权重文件 加载的概率会自动归一化。因此,概率是作为分数还是百分比值指定并不重要。
使用示例#
要获取从两个特定位置(边 a 和 b)到随机目的地的出行,请使用:
python tools/randomTrips.py --weights-prefix example ...<other options>...
并仅将文件 example.src.xml 定义如下:
<edgedata>
<interval begin="0" end="10"/>
<edge id="a" value="0.5"/>
<edge id="b" value="0.5"/>
</interval>
</edgedata>
将选项转发给 duarouter#
在生成路径 .rou.xml 文件时,会调用 duarouter。一些参数已经直接从 randomTrips 接收到的参数传递给 duarouter。但是,如果需要,您可以使用语法 --duarouter-option value 直接将参数传递给 duarouter;例如,在 randomTrips 中使用 --duarouter-exit-times true 将在调用时将参数 --exit-times 转发给 duarouter,并带有值 true。请注意,必须传递一个值与选项一起,例如 --duarouter-exit-times 在此上下文中无效。
