概述#
marouter 通过多种输入(起讫点矩阵、行程文件或路径文件)计算宏观用户分配(路径),以便加载到 sumo 中。
- 目的: 宏观路径分配
- 系统: 可移植(已在 Linux/Windows 上测试);在命令行运行
- 输入(必需):
- A) 通过 netconvert 或 netgenerate 生成的道路网络,参见 构建网络
- B) O/D 矩阵 或 行程
- 输出: 可被 sumo 使用的车辆、车辆类型和路径的定义
- 编程语言: C++
使用描述#
marouter 使用可配置的分配方法(使用选项 assignment-method)计算用户分配(路径):
- incremental(增量分配)
-
UE: 用户均衡(user equilibrium)
Caution
尚未实现
- SUE: 随机用户均衡(stochastic user equilibrium)
marouter 读取 OD 矩阵并创建路径文件。这些路径文件包含交通分配区之间的路径分布。分布中的每条路径都是网络边的完整指定列表。
可以使用 --paths 选项配置每次迭代中选择的路径数量。Marouter 将使用基于惩罚的方法来查找多条路径,该方法会对先前最短路径的每条边添加给定的惩罚,然后重新计算。如果惩罚太小,可能无法通过此方法找到新路径,因此生成的路径数量可能少于期望的数量。 可以使用 --paths.penalty 配置惩罚(默认值为 1)。
容量约束(流量-延误)函数#
marouter 使用基于速度限制、车道数量和边优先级的硬编码容量约束函数来计算基于密度的行程时间和流量。有关详细信息,请参见函数 capacityConstraintFunction 和 getCapacity,位于 <SUMO_HOME>/src/marouter/ROMAAssignments.cpp。
通过设置选项 --capacities.default,使用以下约束函数:
capacity = edge->getNumLanes() * 800;
travelTime = edge->getLength() / edge->getSpeedLimit() * (1. + 1.*(flow / (capacity * 0.9)) * 3.);
微观输出#
marouter 的主要用途之一是计算用户分配。为此,它会生成带有完整指定路径的 <flow> 定义,这些定义可以加载到 sumo 和 sumo-gui 中。
宏观输出#
marouter 可以通过使用选项 --netload-output 为所有网络边创建宏观交通数据。这些值可以按全天聚合写入(默认),也可以根据输入数据的时间粒度和选项 --aggregation-interval 的值拆分为时间间隔。
对于每个间隔和每条边,写入以下值:
- travelTime: 该边上的平均行程时间
- speed: 该边上的平均速度
- entered: 在该间隔内进入该边的车辆数量
- density: 每公里车辆数
- laneDensity: 每车道每公里车辆数
- flowCapacityRatio: 总容量的使用比例(%)
此输出可以在 sumo-gui 中可视化,以了解不同的交通措施如何随时间变化。
选项#
您可以使用 XML 模式定义文件来设置 marouter 配置: marouterConfiguration.xsd。
配置#
| 选项 | 描述 |
|---|---|
| -c <FILE> --configuration-file <FILE> |
启动时加载指定的配置文件 |
| -C <FILE> --save-configuration <FILE> |
将当前配置保存到 FILE |
| --save-configuration.relative <BOOL> | 保存配置时强制使用相对路径;默认值: false |
| --save-template <FILE> | 将配置模板(空)保存到 FILE |
| --save-schema <FILE> | 将配置模式保存到 FILE |
| --save-commented <BOOL> | 向保存的模板、配置或模式添加注释;默认值: false |
输入#
| 选项 | 描述 |
|---|---|
| -n <FILE> --net-file <FILE> |
使用 FILE 作为 SUMO 网络进行路由 |
| -a <FILE> --additional-files <FILE> |
从 FILE(s) 读取附加网络数据(区域、公交站点) |
| -r <FILE> --route-files <FILE> |
从 FILE(s) 读取 sumo 路径、备选路径、流量和行程 |
| --phemlight-path <FILE> | 确定从何处加载 PHEMlight 定义;默认值: ./PHEMlight/ |
| --phemlight-year <INT> | 在 PHEMlight5 中使用给定的参考年份启用车队年限建模;默认值: 0 |
| --phemlight-temperature <FLOAT> | 设置环境温度以校正 PHEMlight5 中的 NOx 排放;默认值: 1.79769e+308 |
| -w <FILE> --weight-files <FILE> |
从 FILE(s) 读取网络权重 |
| --lane-weight-files <FILE> | 从 FILE(s) 读取基于车道的网络权重 |
| -x <STRING> --weight-attribute <STRING> |
给出边权重的 xml 属性名称;默认值: traveltime |
| --junction-taz <BOOL> | 为每个路口初始化一个 TAZ,以使用属性 toJunction 和 fromJunction;默认值: false |
| -m <FILE> --od-matrix-files <FILE> |
从 FILE(s) 加载 O/D 文件 |
| --od-amitran-files <FILE> | 从 FILE(s) 加载 Amitran 格式的 O/D 矩阵 |
| -z <FILE> --tazrelation-files <FILE> |
从 FILE(s) 加载 tazRelation 格式的 O/D 矩阵 |
| --tazrelation-attribute <STRING> | 定义用于加载计数的数据属性(默认 'count');默认值: count |
| --weight-adaption <FLOAT> | 先前间隔的行程时间影响;默认值: 0 |
| --taz-param <STRING[ ]> | 定义源(和汇)taz 的参数键 |
| --ignore-taz <BOOL> | 忽略属性 'fromTaz' 和 'toTaz';默认值: false |
输出#
| 选项 | 描述 |
|---|---|
| -o <FILE> --output-file <FILE> |
将生成的路径写入 FILE |
| --vtype-output <FILE> | 将使用的车辆类型写入单独的 FILE |
| --keep-vtype-distributions <BOOL> | 在写入车辆及其类型时保留 vTypeDistribution id;默认值: false |
| --emissions.volumetric-fuel <BOOL> | 以(旧)单位 l 而不是 mg 返回燃料消耗值;默认值: false |
| --named-routes <BOOL> | 写入通过其 id 引用路径的车辆;默认值: false |
| --write-license <BOOL> | 将许可证信息包含到每个输出文件中;默认值: false |
| --write-metadata <BOOL> | 写入可解析的元数据(配置等)而不是注释;默认值: false |
| --output-prefix <STRING> | 应用于所有输出文件的前缀。特殊字符串 'TIME' 将被当前时间替换。 |
| --precision <INT> | 定义浮点输出的小数位数;默认值: 2 |
| --precision.geo <INT> | 定义经度、纬度输出的小数位数;默认值: 6 |
| --output.compression <STRING> | 定义标准压缩算法(目前仅适用于 parquet 输出) |
| --output.format <STRING> | 如果无法从文件名推导,则定义标准输出格式('xml', 'csv', 'parquet');默认值: xml |
| --output.column-header <STRING> | 如何从属性名称派生列标题('none', 'tag', 'auto', 'plain');默认值: tag |
| --output.column-separator <STRING> | CSV 输出中的分隔符;默认值: ; |
| -H <BOOL> --human-readable-time <BOOL> |
将时间值写入为 hour:minute:second 或 day:hour:minute:second,而不是秒;默认值: false |
| --ignore-vehicle-type <BOOL> | 不保存 vtype 信息;默认值: false |
| --netload-output <FILE> | 将边负载和最终成本写入 FILE |
| --all-pairs-output <FILE> | 将完整的距离矩阵写入 FILE |
| --exit-times <BOOL> | 为每条边写入退出时间(权重);默认值: false |
处理#
| 选项 | 描述 |
|---|---|
| --max-alternatives <INT> | 将备选路径的数量修剪为 INT;默认值: 5 |
| --with-taz <BOOL> | 在输入和输出中使用起始区和目的地区(区域);默认值: false |
| --routing-threads <INT> | 用于路由的并行执行线程数;默认值: 0 |
| --routing-algorithm <STRING> | 在路由算法中选择 ['dijkstra', 'astar', 'CH', 'CHWrapper'];默认值: dijkstra |
| --restriction-params <STRING[ ]> | 用于比较附加限制的参数键的逗号分隔列表 |
| --weights.interpolate <BOOL> | 在间隔边界处插值边权重;默认值: false |
| --weights.expand <BOOL> | 将最后一个加载的权重间隔的末尾扩展到无穷大;默认值: false |
| --weights.minor-penalty <FLOAT> | 在计算次要链接内部车道的路由成本时应用给定的时间惩罚;默认值: 1.5 |
| --weights.tls-penalty <FLOAT> | 在计算通过交通信号灯的路由成本时应用给定的时间惩罚;默认值: 0 |
| --weights.turnaround-penalty <FLOAT> | 在计算掉头内部车道的路由成本时应用给定的时间惩罚;默认值: 5 |
| --weights.reversal-penalty <FLOAT> | 在计算列车反转的路由成本时应用给定的时间惩罚。负值禁用反转;默认值: 60 |
| --aggregation-interval <TIME> | 定义聚合单车输入的时间间隔;默认为一小时;默认值: 3600 |
| --capacities.default <BOOL> | 在计算容量和限制时忽略边优先级;默认值: false |
| --weights.priority-factor <FLOAT> | 除行程时间外,还考虑边优先级,按因子加权;默认值: 0 |
| --bulk-routing.vtypes <BOOL> | 聚合具有相同起点的不同车辆类型的路由查询;默认值: false |
| --weight-period <TIME> | 给定权重文件的聚合周期;触发收缩层次结构的重建;默认值: 3600 |
| -s <FLOAT> --scale <FLOAT> |
按 FLOAT 缩放加载的流量;默认值: 1 |
| --vtype <STRING> | 定义要使用的车辆类型的名称 |
| --prefix <STRING> | 定义车辆流量名称的前缀 |
| --timeline <STRING[ ]> | 使用 STR[] 作为时间线定义 |
| --timeline.day-in-hours <BOOL> | 使用 STR 作为 24 小时时间线定义;默认值: false |
| --additive-traffic <BOOL> | 在网络中保留所有时间段的交通流量;默认值: false |
| --assignment-method <STRING> | 选择分配方法:incremental, UE 或 SUE;默认值: incremental |
| --tolerance <FLOAT> | 在检查 SUE 稳定性时使用 FLOAT 作为容差;默认值: 0.001 |
| --left-turn-penalty <FLOAT> | 在搜索路径时使用左转惩罚 FLOAT 来计算链接行程时间;默认值: 0 |
| --paths <INT> | 使用 INTEGER 作为每次迭代中为每个 OD 对搜索的路径数量;默认值: 1 |
| --paths.penalty <FLOAT> | 使用 FLOAT 惩罚现有路径以查找次要路径;默认值: 1 |
| --upperbound <FLOAT> | 使用 FLOAT 作为确定辅助链接成本的上限;默认值: 0.5 |
| --lowerbound <FLOAT> | 使用 FLOAT 作为确定辅助链接成本的下限;默认值: 0.15 |
| -i <INT> --max-iterations <INT> |
增量和随机用户分配中搜索新路径的最大迭代次数;默认值: 20 |
| --max-inner-iterations <INT> | 随机用户分配中用户均衡计算的最大内部迭代次数;默认值: 1000 |
| --route-choice-method <STRING> | 选择路径选择方法:gawron, logit, 或 lohse;默认值: logit |
| --gawron.beta <FLOAT> | 使用 FLOAT 作为 Gawron 的 beta;默认值: 0.3 |
| --gawron.a <FLOAT> | 使用 FLOAT 作为 Gawron 的 a;默认值: 0.05 |
| --keep-all-routes <BOOL> | 保存概率接近零的路径;默认值: false |
| --skip-new-routes <BOOL> | 仅重用输入中的路径,不计算新路径;默认值: false |
| --logit.beta <FLOAT> | 使用 FLOAT 作为 (c-)logit 的 beta(共性因子);默认值: 0.15 |
| --logit.gamma <FLOAT> | 使用 FLOAT 作为 (c-)logit 的 gamma(共性因子);默认值: 1 |
| --logit.theta <FLOAT> | 使用 FLOAT 作为 (c-)logit 的 theta;默认值: 0.01 |
默认值#
| 选项 | 描述 |
|---|---|
| --defaults-override <BOOL> | 默认值将覆盖给定值;默认值: false |
| --flow-output.departlane <STRING> | 分配默认出发车道;默认值: free |
| --flow-output.departpos <STRING> | 分配默认出发位置 |
| --flow-output.departspeed <STRING> | 分配默认出发速度;默认值: max |
| --flow-output.arrivallane <STRING> | 分配默认到达车道 |
| --flow-output.arrivalpos <STRING> | 分配默认到达位置 |
| --flow-output.arrivalspeed <STRING> | 分配默认到达速度 |
时间#
| 选项 | 描述 |
|---|---|
| -b <TIME> --begin <TIME> |
定义开始时间;之前的行程将被丢弃;默认值: 0 |
| -e <TIME> --end <TIME> |
定义结束时间;之后的行程将被丢弃;默认为 SUMO 可表示的最大时间;默认值: -1 |
报告#
| 选项 | 描述 |
|---|---|
| -v <BOOL> --verbose <BOOL> |
切换到详细输出;默认值: false |
| --print-options <BOOL> | 在处理前打印选项值;默认值: false |
| -? <BOOL> --help <BOOL> |
打印此屏幕或选定主题;默认值: false |
| -V <BOOL> --version <BOOL> |
打印当前版本;默认值: false |
| -X <STRING> --xml-validation <STRING> |
设置 XML 输入的模式验证方案("never", "local", "auto" 或 "always");默认值: local |
| --xml-validation.net <STRING> | 设置 SUMO 网络输入的模式验证方案("never", "local", "auto" 或 "always");默认值: never |
| --xml-validation.routes <STRING> | 设置 SUMO 路径输入的模式验证方案("never", "local", "auto" 或 "always");默认值: local |
| -W <BOOL> --no-warnings <BOOL> |
禁用警告输出;默认值: false |
| --aggregate-warnings <INT> | 当同一类型的警告超过 INT 时聚合警告;默认值: -1 |
| -l <FILE> --log <FILE> |
将所有消息写入 FILE(隐含 verbose) |
| --message-log <FILE> | 将所有非错误消息写入 FILE(隐含 verbose) |
| --error-log <FILE> | 将所有警告和错误写入 FILE |
| --log.timestamps <BOOL> | 在所有消息前写入时间戳;默认值: false |
| --log.processid <BOOL> | 在所有消息前写入进程 ID;默认值: false |
| --language <STRING> | 消息中使用的语言;默认值: C |
| --ignore-errors <BOOL> | 如果无法构建路径则继续;默认值: false |
| --stats-period <INT> | 定义打印统计信息的频率;默认值: -1 |
| --no-step-log <BOOL> | 禁用路径解析步骤的控制台输出;默认值: false |
随机数#
| 选项 | 描述 |
|---|---|
| --random <BOOL> | 使用当前系统时间初始化随机数生成器;默认值: false |
| --seed <INT> | 使用给定值初始化随机数生成器;默认值: 23423 |
