sumo-rl
基于 SUMO 仿真器的强化学习交通信号控制环境,兼容 Gymnasium 和 PettingZoo
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 SUMO 仿真器的强化学习交通信号控制环境,兼容 Gymnasium 和 PettingZoo
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:SUMO-RL 项目 Logo — 强化学习与交通仿真的交汇点
想象一下:你在早高峰的十字路口等了整整 6 个红灯——明明另一个方向一辆车都没有,信号灯却固执地亮着红灯。这种低效的信号控制每年在全球城市造成数十亿吨燃油浪费和难以估量的通勤时间损耗。而 SUMO-RL 正是来解决这个问题的。
SUMO-RL 是一个专门为交通信号灯强化学习控制打造的 Python 环境库。它的核心工作原理并不复杂:首先用 SUMO(Simulation of Urban MObility,柏林工业大学开源的城市交通仿真器)搭建一个逼真的路网模型——包括车道、红绿灯相位、车辆行驶规则;然后将这个仿真环境封装成兼容 Gymnasium(OpenAI Gym 的继任者)和 PettingZoo(多智能体环境标准)的 RL 接口,让研究者可以无缝接入任意强化学习算法(DQN、PPO、SAC、Q-Learning 等)来训练交通信号控制器。
用作者 Lucas Alegre 的话说:这个项目诞生于博士研究期间,为了解决「每次换 RL 算法都要重写整个仿真接口」的痛苦。他的目标很纯粹——做一个干净、稳定的仿真层,让研究者专注于算法本身,而不是底层适配。

图2:4 个离散动作对应 4 种信号相位组合——强化学习智能体每 5 秒做一次决策
SUMO-RL 的底层依赖两个关键组件:SUMO 仿真引擎和 TraCI API。SUMO 本身是一个纯仿真工具,通过 TraCI(Traffic Control Interface)协议可以在 Python 运行时动态读取和修改仿真状态——包括信号灯相位、车辆位置、车道占用率等。SUMO-RL 的 TrafficSignal 类(约 15776 字节)就是 TraCI API 的 Python 封装,负责与 SUMO 进程通信。
这里有一个值得注意的工程细节:SUMO 需要系统级安装(通过 Ubuntu PPA 或源码编译),而不是纯 Python 包。这意味着部署流程无法通过 pip install 一键完成,必须在目标机器上预先安装 SUMO 仿真器。这是该项目最核心的部署门槛。
SUMO-RL 的环境层设计是其最大的技术亮点。它同时支持三种接口范式:
single-agent=True):标准 Gymnasium gym.Env 接口,兼容 stable-baselines3、RLlib 等主流单智能体 RL 库env() 函数创建,适用于多智能体竞争/合作场景parallel_env() 创建,支持多信号灯并行决策这种「一鱼三吃」的设计意味着同一个实验脚本可以无缝切换不同的 RL 框架。研究者在 A/B 对比 DQN vs PPO 时,不需要为每种算法重写环境接口。环境层通过 parallel_wrapper_fn 将单智能体环境自动适配为 PettingZoo 并行接口,是一个聪明的设计。
SUMO-RL 默认的感知-决策-反馈循环设计得非常清晰:
Observation(感知状态):每步返回一个归一化向量 obs = [phase_one_hot, min_green, lane_density..., lane_queue...],其中 phase_one_hot 是当前信号灯相位的一个热编码,lane_density 和 lane_queue 分别是各入口车道的车辆密度和排队长度。这些数据全部由 TrafficSignal 类通过 TraCI 实时查询 SUMO 仿真状态获取。
Action(动作):离散动作空间,动作编号对应信号灯的相位组合。例如在一个双向十字路口,4 个动作分别代表「东西通行」「东西左转」「南北通行」「南北左转」。每次执行动作后会先经过 yellow_time(默认 2 秒)的黄灯过渡期,防止闯红灯。
Reward(奖励):默认奖励函数为 diff-waiting-time,即本步等待车辆总时长减去上一步等待总时长的差值。直观理解:等待时间减少则奖励为正(好),等待时间增加则奖励为负(差)。奖励函数通过 reward_function 参数完全可插拔,研究者可以替换为排队长度、吞吐量、CO2 排放等自定义指标。
SUMO-RL 的安装分两步走:
安装 SUMO 仿真器(系统依赖,约 1GB):
sudo add-apt-repository ppa:sumo/stable
sudo apt-get install sumo sumo-tools sumo-doc
export SUMO_HOME="/usr/share/sumo"
如果使用 Linux 桌面环境,还可以安装 sumo-gui 包获得可视化仿真界面。
安装 SUMO-RL(Python 包):
pip install sumo-rl
作者在文档中特别提到一个性能技巧:设置 export LIBSUMO_AS_TRACI=1 可以启用 Libsumo 模式,相比默认的 TraCI 进程通信有约 8 倍性能提升。代价是无法同时运行多个仿真实例,且不支持 GUI。可谓是用灵活性换速度的设计权衡。
项目自带 11 个预置实验脚本,覆盖 Q-Learning、DQN、SARSA、PPO 等经典算法。以最简单的 Q-Learning 为例:
from sumo_rl import SumoEnvironment
from sumo_rl.agents import QLAgent
env = SumoEnvironment(
net_file='nets/2way-single-intersection/2way-single-intersection.net.xml',
route_file='nets/2way-single-intersection/2way-single-intersection-vhvh.rou.xml',
single_agent=True, use_gui=True
)
agent = QLAgent(env.observation_space, env.action_space)
for episode in range(100):
obs, _ = env.reset()
done = False
while not done:
action = agent.act(obs)
obs, reward, terminated, truncated, _ = env.step(action)
agent.learn(reward)
env.close()
整个训练循环不超过 20 行代码。SUMO 仿真数据(路网 .net.xml、车辆路由 .rou.xml)也随包自带,不需要额外准备。
SUMO-RL 目前被引用于多篇顶会论文,作者 Lucas Alegre 在 README 中直接提供了 CITATION 信息,项目也已在 Zenodo 上获得 DOI 归档。更重要的是,它解决了该领域长期存在的「可复现性危机」——过去每个研究组都维护自己修改版的 SUMO 接口,导致同一算法在不同代码库上的结果无法直接比较。SUMO-RL 的出现提供了一个社区公认的标准环境,极大降低了学术复现成本。
SUMO-RL 的代码组织高度模块化:sumo_rl/environment/ 下是核心环境代码,sumo_rl/agents/ 下是可复用的 RL 智能体实现,sumo_rl/exploration/ 下是探索策略(目前有 EpsilonGreedy),sumo_rl/nets/ 下是预置的路网配置。每个组件都可通过继承重写:
ObservationFunction → 自定义感知特征reward_function 参数 → 自定义奖励信号TrafficSignal → 自定义信号灯控制逻辑这种「仿真层稳定、业务层灵活」的架构哲学,使 SUMO-RL 成为一个真正可扩展的 RL 研究平台,而不仅仅是「一个示例代码」。
SUMO-RL 并不是万能的,以下几点需要在实际使用时注意:
1. SUMO 系统依赖:最大的门槛。SUMO 在 Windows/macOS 上安装相对复杂,目前官方 PPA 只支持 Ubuntu/Debian 系统。macOS 用户可以通过 Docker 运行,但会增加额外的配置成本。
2. 仿真真实性:SUMO 是微观交通仿真器,路网和车辆行为都依赖人工建模。真实城市交通中的驾驶员行为偏差、交通事故、临时施工等情况无法在仿真中完全覆盖。因此,在 SUMO-RL 上训练出的策略迁移到真实路口时存在 reality gap(现实差距)。
3. 扩展性问题:默认的观测向量长度随路口入口车道数线性增长,在大规模路网(100+ 信号灯节点)中会面临维度爆炸问题。项目目前没有内置图神经网络(GNN)或多智能体通信机制,多路口协调控制需要研究者自行扩展。
4. 无 Web UI:SUMO-RL 本身是纯 Python CLI 库,不提供 Web 界面或 API 服务。如果需要将训练好的策略部署到真实交通管理系统,需要额外的工程封装。
SUMO-RL 的意义远超一个「好用的代码库」。它代表了一个趋势:交通信号控制正在从工程师经验调参向数据驱动的强化学习范式迁移。
在全球范围内,已有多个城市开始试点基于 RL 的自适应信号灯控制系统。例如,2023 年新加坡陆路交通管理局(LTA)与研究机构合作,在部分主干道部署了 RL 调优的信号配时方案,初步数据显示高峰时段通行效率提升约 12%。在中国,百度、滴滴等公司也在探索类似技术。
SUMO-RL 作为这个领域的开源基础设施,降低了高校实验室和中小企业研究自适应交通控制的门槛。随着城市交通数据越来越丰富、边缘计算设备越来越普及,类似 SUMO-RL 这样的工具将会在智慧城市基础设施中扮演越来越重要的角色。
项目信息:GitHub ⭐ 1054 · Python 3.9+ · MIT License · LucasAlegre/sumo-rl
核心依赖:SUMO ≥ 1.14 · gymnasium ≥ 0.28 · pettingzoo ≥ 1.24 · numpy · pandas · sumolib · traci