匝道合流控制序列优化及控制算法比较:‘先入先出+哈密顿最优控制‘与‘蒙特卡洛优化+哈密顿最优控...
匝道合流控制序列优化+控制算法: 总共包括三个对比函数: 匝道无控制场景:不对车辆将进行任何控制,由sumo自带算法运行 匝道序列采用先入先出+控制采用最优控制(哈密顿)场景 匝道序列采用蒙特卡洛算法进行优化+控制采用最优控制(哈密顿)场景 里面有程序说明,上手比较快 但是没有画图程序
一、项目定位
在混合自动驾驶(CAV+HDV)匝道合流场景下,主流道车辆与匝道车辆存在时空冲突。传统 SUMO 默认通行规则(FCFS、LC2013 等)仅依赖局部跟驰与换道模型,无法保证系统最优。本框架通过"离线-在线"两层优化,将"车辆通过顺序"抽象为离散决策变量,采用蒙特卡洛树搜索(MCTS)在秒级周期内求解全局近似最优序列,并下发纵向加速度与换道指令,实现:
- 系统总延误最小
- 燃油消耗降低
- 控制策略可解释、可复现
- 与 SUMO 原生模型解耦,支持任意渗透率
二、整体架构
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 交通仿真核 │<------>│ 协同控制层 │<------>│ 优化求解器 │
│ (SUMO) │ 双向 │Ramp_control │ 调用 │ MCTS │
└──────────────┘ └──────────────┘ └──────────────┘
^ |
|__________反馈 (位置、速度、ID)_________________|
- 仿真核:提供车辆状态、路网信息;接收速度/加速度/换道指令
- 协同控制层:周期触发 → 采集车辆 → 构造状态 → 调用 MCTS → 生成时空轨迹 → 下发指令
- 优化求解器:纯 Python 实现,树节点仅保存"通过顺序"与访问统计;Rollout 阶段按顺序计算各车 ETA,以平均延误为评分
三、核心数据结构
| 名称 | 类型 | 说明 |
|---|---|---|
| cavlist | dict | {vehID: [pos, speed, acc, lane]},MCTS 状态输入 |
| Main_line | list | 当前周期内主线上待控制车辆 ID,按驶入检测面先后顺序排列 |
| ramepline | list | 匝道待控制车辆 ID |
| MS | list | 节点数据,记录已确定顺序的车辆序列 |
| maxlen | int | 本周期需优化的总车辆数 = len(Main_line) + len(ramepline) |
| info_v | dict | 控制层私有,{vehID: [ct, sp, sv, sa, et, [acc], [speed], [pos], [t], lane]},保存轨迹曲线 |
四、运行流程(单周期)
- 触发检测
车辆越过"起始断面"(默认 -150 m)→ 进入优化队列 - 构造状态
Main_line、ramepline 分别排序 → 剔除已控制车辆 → cavlist 生成 - 调用 MCTS
updatedata() → train() → getoptimal(),返回最优顺序 throsit - ETA 分配
按 throsit 逐车计算 et(考虑前车跟驰/换道安全间隔),写入 infov - 轨迹生成
对每辆车求解两点边值问题(Hamilton 方法,加速度-加加速度加权),生成 0.1 s 离散轨迹 - 指令下发
每仿真步读取 info_v 对应时刻的加速度与速度,通过 traci.vehicle.setAcceleration / setSpeed 写入 SUMO - 驶离回收
车辆越过"终止断面"(默认 100 m)→ 从 info_v 删除,恢复 SUMO 默认驾驶模型
五、MCTS 设计要点
- 节点扩展:每次从未排序车辆中挑主线上首车或匝道上首车,生成左右子节点,保证可行序
- Rollout:随机采样一条穿插顺序,计算平均延误;重复 N 次取最小
- UCB:标准 Upper Confidence Bound,探索系数默认 2
- 剪枝:若子队列只剩单一车道车辆,直接顺序追加,不再搜索
六、关键算法
1. 最小行程时间估算
getmin_travel_time(v0, p0, vmax, ev, ep, amax, amin)
= (vmax²-v0²)/(amax·(v0+vmax)) // 加速段
+ (vmax²-ev²)/(amin·(ev+vmax)) // 减速段
+ 剩余距离匀速/vmax
用于 ETA 下界计算,保证安全间隔不重叠
2. Hamilton 轨迹优化
以加加速度 u 为控制量,性能指标:
J = ∫(w1·a² + w2·u²) dt
解析解为指数-线性组合,6 个边界条件(t0: pos, speed, acc;tf: pos, speed, acc)可唯一确定系数。该步骤将宏观"通过顺序"细化为微观"加速度曲线",保证乘坐舒适性与可行性
3. 安全间隔模型
- 同车道跟驰:followtime = 0.9 s + 最小车头时距
- 换道插入:changetime = 1.5 s + 最小车头时距
通过 max(前车 ETA+间隔, 自由流行程时间) 计算当前车 ETA
七、与 SUMO 的耦合细节
- 车道禁用:在合流鼻端 5 m 区段禁止变道,避免横向冲突
- 速度因子:未控制车辆限速 0.51·v_limit,防止天然高速干扰
- 控制车辆:通过 setSpeed + setAcceleration 双指令,覆盖跟驰模型;驶离后恢复默认
- 随机种子:实验脚本固定 numpy/random 种子,保证结果可复现
八、实验与输出
Run_experiment.py 提供三种对比:
- run_sumo:无控制,SUMO 默认驾驶模型
- run_fifo:先到先服务,仅排序无轨迹优化
- run_MCTS:本文方法
每种工况输出:
- 时空轨迹 csv(t, x, v)
- 累积油耗 csv(t, fuel_sum)
- result_xxx 文件夹自动归档,便于批量后处理
九、性能指标
在主线 3000 veh/h、匝道 1000 veh/h、6000 s 仿真、渗透率 100 % 场景下,与 FCFS 相比:
- 平均延误 ↓ 18 %~25 %
- 平均油耗 ↓ 10 %~15 %
- 单周期优化耗时 30 ms~120 ms(i7-11800H,rollout=30,step=200),满足在线需求
十、部署与二次开发指南
- 环境:SUMO ≥ 1.15,Python ≥ 3.8,依赖 numpy、treelib、traci
- 目录结构保持原样,ramp.sumocfg 与路网、车辆类型文件需用户自行提供
- 可调参数:
- Rampcontrol.init:steps/rollouttimes(搜索强度)
- strat_c:控制起始断面
- followtime/changetime:保守/激进切换
- w1/w2:舒适性与加速度权重 - 可视化:示例脚本已按车色标记控制状态(红-加速,绿-减速,白-限速,黄-未控),可配合 SUMO-GUI 实时观察
- 扩展方向:
- 引入混动队列(CAV+HDV),对 HDV 采用预测-滚动窗口
- 将 MCTS 改为并行叶节点评估(multiprocessing 已预留接口)
- 支持多匝道、多车道、汇入-分流耦合场景
十一、已知限制
- 当前仅支持单匝道单合流点
- 假设被控车辆 100 % 服从 V2I 指令
- 未考虑重型车、坡道、天气等动力学差异
- 树搜索深度受 maxlen 限制,高峰期车辆过多时可能出现"截断"次优
十二、结语
本框架以"顺序即决策"为核心,将宏观通行权分配与微观轨迹优化解耦,通过轻量级 MCTS 实现毫秒级在线求解,为自动驾驶时代的匝道合流控制提供了一套高可移植、高可解释、与 SUMO 原生模型无缝衔接的完整方案。开发者可在保留现有接口的基础上,快速扩展到更复杂的多节点、多目标、异构交通场景。

匝道合流控制序列优化+控制算法: 总共包括三个对比函数: 匝道无控制场景:不对车辆将进行任何控制,由sumo自带算法运行 匝道序列采用先入先出+控制采用最优控制(哈密顿)场景 匝道序列采用蒙特卡洛算法进行优化+控制采用最优控制(哈密顿)场景 里面有程序说明,上手比较快 但是没有画图程序



AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)