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

一、项目定位

在混合自动驾驶(CAV+HDV)匝道合流场景下,主流道车辆与匝道车辆存在时空冲突。传统 SUMO 默认通行规则(FCFS、LC2013 等)仅依赖局部跟驰与换道模型,无法保证系统最优。本框架通过"离线-在线"两层优化,将"车辆通过顺序"抽象为离散决策变量,采用蒙特卡洛树搜索(MCTS)在秒级周期内求解全局近似最优序列,并下发纵向加速度与换道指令,实现:

  1. 系统总延误最小
  2. 燃油消耗降低
  3. 控制策略可解释、可复现
  4. 与 SUMO 原生模型解耦,支持任意渗透率

二、整体架构

┌──────────────┐        ┌──────────────┐        ┌──────────────┐
│  交通仿真核   │<------>│  协同控制层   │<------>│  优化求解器   │
│   (SUMO)     │  双向  │Ramp_control  │  调用  │   MCTS       │
└──────────────┘        └──────────────┘        └──────────────┘
        ^                                                |
        |__________反馈 (位置、速度、ID)_________________|
  1. 仿真核:提供车辆状态、路网信息;接收速度/加速度/换道指令
  2. 协同控制层:周期触发 → 采集车辆 → 构造状态 → 调用 MCTS → 生成时空轨迹 → 下发指令
  3. 优化求解器:纯 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]},保存轨迹曲线

四、运行流程(单周期)

  1. 触发检测
    车辆越过"起始断面"(默认 -150 m)→ 进入优化队列
  2. 构造状态
    Main_line、ramepline 分别排序 → 剔除已控制车辆 → cavlist 生成
  3. 调用 MCTS
    updatedata() → train() → getoptimal(),返回最优顺序 throsit
  4. ETA 分配
    按 throsit 逐车计算 et(考虑前车跟驰/换道安全间隔),写入 infov
  5. 轨迹生成
    对每辆车求解两点边值问题(Hamilton 方法,加速度-加加速度加权),生成 0.1 s 离散轨迹
  6. 指令下发
    每仿真步读取 info_v 对应时刻的加速度与速度,通过 traci.vehicle.setAcceleration / setSpeed 写入 SUMO
  7. 驶离回收
    车辆越过"终止断面"(默认 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 提供三种对比:

  1. run_sumo:无控制,SUMO 默认驾驶模型
  2. run_fifo:先到先服务,仅排序无轨迹优化
  3. 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),满足在线需求

十、部署与二次开发指南

  1. 环境:SUMO ≥ 1.15,Python ≥ 3.8,依赖 numpy、treelib、traci
  2. 目录结构保持原样,ramp.sumocfg 与路网、车辆类型文件需用户自行提供
  3. 可调参数:
    - Rampcontrol.init:steps/rollouttimes(搜索强度)
    - strat_c:控制起始断面
    - followtime/changetime:保守/激进切换
    - w1/w2:舒适性与加速度权重
  4. 可视化:示例脚本已按车色标记控制状态(红-加速,绿-减速,白-限速,黄-未控),可配合 SUMO-GUI 实时观察
  5. 扩展方向:
    - 引入混动队列(CAV+HDV),对 HDV 采用预测-滚动窗口
    - 将 MCTS 改为并行叶节点评估(multiprocessing 已预留接口)
    - 支持多匝道、多车道、汇入-分流耦合场景

十一、已知限制

  1. 当前仅支持单匝道单合流点
  2. 假设被控车辆 100 % 服从 V2I 指令
  3. 未考虑重型车、坡道、天气等动力学差异
  4. 树搜索深度受 maxlen 限制,高峰期车辆过多时可能出现"截断"次优

十二、结语

本框架以"顺序即决策"为核心,将宏观通行权分配与微观轨迹优化解耦,通过轻量级 MCTS 实现毫秒级在线求解,为自动驾驶时代的匝道合流控制提供了一套高可移植、高可解释、与 SUMO 原生模型无缝衔接的完整方案。开发者可在保留现有接口的基础上,快速扩展到更复杂的多节点、多目标、异构交通场景。

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

Logo

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

更多推荐