SUMO中交通信号控制的学习代码和RL环境。
项目描述
SUMO-RL
SUMO-RL提供了一个简单的接口,用于使用SUMO为交通信号控制实例化强化学习(RL)环境。
此仓库的目标
- 为使用SUMO进行交通信号控制的强化学习提供简单的接口
- 支持多智能体RL
- 与gymnasium.Env和stable-baselines3以及RLlib等流行RL库兼容
- 易于定制:状态和奖励定义易于修改
主要类是SumoEnvironment。如果使用参数'single-agent=True'进行实例化,则它表现得像一个常规的Gymnasium Env。对于多智能体环境,使用env或parallel_env分别使用AEC或并行API实例化一个PettingZoo环境。TrafficSignal负责使用TraCI API检索信息和作用于交通信号灯。
有关更多详细信息,请查看在线文档。
安装
安装SUMO最新版本
sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc
不要忘记设置SUMO_HOME变量(默认SUMO安装路径为/usr/share/sumo)
echo 'export SUMO_HOME="/usr/share/sumo"' >> ~/.bashrc
source ~/.bashrc
重要:对于使用Libsumo的巨大性能提升(约8倍),您可以声明变量
export LIBSUMO_AS_TRACI=1
请注意,如果此变量处于活动状态,则无法使用sumo-gui或并行运行多个模拟(更多详细信息)。
安装SUMO-RL
稳定版本可以通过pip获取
pip install sumo-rl
或者,您可以使用最新的(未发布)版本进行安装
git clone https://github.com/LucasAlegre/sumo-rl
cd sumo-rl
pip install -e .
MDP - 观察、动作和奖励
观察
每个交通信号代理的默认观察值是一个向量
obs = [phase_one_hot, min_green, lane_1_density,...,lane_n_density, lane_1_queue,...,lane_n_queue]
phase_one_hot
是一个表示当前活动绿灯阶段的one-hot编码向量min_green
是一个二进制变量,指示当前阶段是否已经过去了min_green秒lane_i_density
是车辆数除以车道i的总容量lane_i_queue
是排队(速度低于0.1 m/s)的车辆数除以车道i的总容量
您可以通过实现一个从ObservationFunction继承的类,并将其传递给环境构造函数来自定义观察
动作
动作空间是离散的。每个交通信号代理每'delta_time'秒可以选择下一个绿灯阶段的配置。
例如:在2-way single intersection中,有|A| = 4个离散动作,对应以下绿灯阶段配置
重要:每次阶段变化时,下一个阶段之前都会有持续yellow_time
秒的黄灯阶段。
奖励
默认奖励函数是累积车辆延迟的变化
也就是说,奖励是相对于前一个时间步的总延迟(所有接近车辆的等待时间之和)的变化量。
您可以选择不同的奖励函数(请参阅在TrafficSignal中实现的函数),并在SumoEnvironment构造函数中使用reward_fn
参数。
也可以实现自己的奖励函数
def my_reward_fn(traffic_signal):
return traffic_signal.get_average_speed()
env = SumoEnvironment(..., reward_fn=my_reward_fn)
API(Gymnasium和PettingZoo)
Gymnasium单代理API
如果您的网络只有一个交通信号灯,则可以实例化标准的Gymnasium env(请参阅Gymnasium API)
import gymnasium as gym
import sumo_rl
env = gym.make('sumo-rl-v0',
net_file='path_to_your_network.net.xml',
route_file='path_to_your_routefile.rou.xml',
out_csv_name='path_to_output.csv',
use_gui=True,
num_seconds=100000)
obs, info = env.reset()
done = False
while not done:
next_obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
done = terminated or truncated
PettingZoo多代理API
对于多代理环境,您可以使用PettingZoo API(请参阅Petting Zoo API)
import sumo_rl
env = sumo_rl.parallel_env(net_file='nets/RESCO/grid4x4/grid4x4.net.xml',
route_file='nets/RESCO/grid4x4/grid4x4_1.rou.xml',
use_gui=True,
num_seconds=3600)
observations = env.reset()
while env.agents:
actions = {agent: env.action_space(agent).sample() for agent in env.agents} # this is where you would insert your policy
observations, rewards, terminations, truncations, infos = env.step(actions)
RESCO基准
在nets/RESCO文件夹中,您可以找到RESCO(交通信号控制强化学习基准)的网络和路由文件,它建立在SUMO-RL之上。请参阅他们的论文以获取结果。
实验
请检查experiments以获取实例化环境和训练您的RL代理的示例。
单向单交叉口中的Q-learning
python experiments/ql_single-intersection.py
4x4网格中的RLlib PPO多代理
python experiments/ppo_4x4grid.py
2-way单交叉口中的stable-baselines3 DQN
注意:您需要使用以下命令安装稳定版 stable-baselines3 以实现 Gymnasium 兼容性:pip install "stable_baselines3[extra]>=2.0.0a9"
,请参阅安装指南。
python experiments/dqn_2way-single-intersection.py
绘图结果
python outputs/plot.py -f outputs/4x4grid/ppo_conn0_ep2
引用
如果您在研究中使用了此存储库,请引用以下内容:
@misc{sumorl,
author = {Lucas N. Alegre},
title = {{SUMO-RL}},
year = {2019},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/LucasAlegre/sumo-rl}},
}
使用 SUMO-RL 的出版物列表(请提交拉取请求以添加缺失条目)
- 基于强化学习的交通信号控制中非平稳性的影响量化(Alegre 等人,2021年)
- 用于多视角强化学习的基于信息论的状态空间模型(Hwang 等人,2023年)
- 基于 SUMO 的城市级 TD-learning 智能交通信号控制:性能评估(Reza 等人,2023年)
- 处理自适应系统中的不确定性:基于本体论的强化学习模型(Ghanadbashi 等人,2023年)
- 基于 k-Nearest Neighbors 的交通信号控制多智能体强化学习方法(Almeida 等人,2022年)
- 从局部到全局:基于强化学习的交通信号控制课程学习方法(Zheng 等人,2022年)
- 海报:通过多模态强化学习实现可靠的匝道汇入(Bagwe 等人,2022年)
- 使用本体论引导强化学习代理在未知情况下的行为(Ghanadbashi & Golpayegani,2022年)
- 自上而下的信息,自下而上的推荐:用于交通信号控制的具有层次结构的强化学习(Antes 等人,2022年)
- 智能交通信号控制算法的比较研究(Chaudhuri 等人,2022年)
- 基于本体的智能交通信号控制模型(Ghanadbashi & Golpayegani,2021年)
- 交通信号控制强化学习基准(Ault & Sharon,2021年)
- EcoLight:在深度强化学习中通过奖励塑造实现人机工程交通信号控制(Agand 等人,2021年)
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
sumo_rl-1.4.5.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 230979fb77969a76839cd36027db2ac1aea0e2a41d9b38000f592287c3d12c11 |
|
MD5 | fd912e9246d6fd03c86f6a3c37683c70 |
|
BLAKE2b-256 | e976892e7b2e314887f21958a9c5b215c689a2e50cc134e49ec6654efef66751 |
sumo_rl-1.4.5-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 322d090e6a66d97cc9b265c0b6fa092687bc6b35965fe5f53f678878d1987660 |
|
MD5 | e184db326873e8f788838c3bbd93ed24 |
|
BLAKE2b-256 | 3ed30cf60a0398f14d508b5bc8b80ab0dac73c6fd3a14a8751b37f6c19d27c30 |