Description
Go to file
Zihan Ye 8a2194039c 将每次运行参数及结果独立保存 2026-01-05 21:43:04 +08:00
.gitignore 将每次运行参数及结果独立保存 2026-01-05 21:43:04 +08:00
.python-version First runnable 2026-01-05 16:15:53 +08:00
README.md 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
config.yaml 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
ctm_model.py First runnable 2026-01-05 16:15:53 +08:00
demand_loader.py 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
dqn_agent.py First runnable 2026-01-05 16:15:53 +08:00
environment.py 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
main.py First runnable 2026-01-05 16:15:53 +08:00
parallel_env.py 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
pyproject.toml 添加并行运行环境、训练频率降低以提升交互次数 2026-01-05 21:25:40 +08:00
test.py First runnable 2026-01-05 16:15:53 +08:00
train.py 将每次运行参数及结果独立保存 2026-01-05 21:43:04 +08:00
utils.py 将每次运行参数及结果独立保存 2026-01-05 21:43:04 +08:00

README.md

CTM-DQN: 基于深度强化学习的动态限速控制系统

基于深度Q网络(DQN)和元胞传输模型(CTM)的高速公路动态限速控制系统。

声明:本 Readme 由AI辅助生成进行了人工校对并调整了小部分内容

项目结构

ctm/
├── config.yaml          # 配置文件
├── main.py             # 主入口
├── ctm_model.py        # 元胞传输模型实现
├── dqn_agent.py        # DQN智能体与经验回放
├── environment.py      # 训练环境
├── vectorized_env.py   # 并行环境包装器
├── demand_loader.py    # CSV流量数据加载器
├── train.py            # 训练脚本
├── test.py             # 测试/评估脚本
├── utils.py            # 工具函数
├── checkpoints/        # 模型检查点(自动创建)
└── logs/              # 训练日志和图表(自动创建)

主要特性

  • CTM交通模型: 真实的高速公路交通流仿真
  • DQN智能体: 基于深度强化学习的限速控制
  • 灵活配置: 通过YAML配置文件轻松调整参数
  • 训练与测试: 独立的训练和评估模式
  • 可视化: 自动生成训练结果和交通模式图表
  • 检查点保存: 训练过程中定期保存模型
  • 并行训练: 支持多环境并行训练,显著提升训练效率
  • CSV流量输入: 支持从CSV文件读取真实交通流量数据
  • 随机种子固定: 确保训练结果可重复
  • 最佳模型保存: 自动保存效果最好的模型

安装

  1. 使用 uv 安装依赖:
uv sync

或手动安装:

pip install torch numpy matplotlib pyyaml tqdm pandas

快速开始

训练

使用默认配置训练DQN智能体

python main.py --mode train

使用自定义配置训练:

python main.py --mode train --config custom_config.yaml

测试

测试训练好的模型:

python main.py --mode test

使用特定检查点测试:

python main.py --mode test --model checkpoints/model_best.pt

配置说明

所有参数都可以在 config.yaml 中调整。主要配置部分:

环境参数

  • num_cells: 道路单元数量默认10
  • cell_length: 每个单元长度单位米默认500.0
  • free_flow_speed: 自由流速度单位m/s默认30.0
  • demand_pattern: 交通需求模式 - "constant"、"sine"、"random"、"csv"
  • demand_csv_path: CSV流量文件路径当使用csv模式时
  • num_speed_actions: 离散限速动作数量默认5
  • episode_length: 每个episode的时间步数默认360

DQN智能体参数

  • hidden_layers: 神经网络架构(默认:[256, 256]
  • learning_rate: 学习率默认0.0001
  • gamma: 折扣因子默认0.99
  • epsilon_start/end/decay: 探索参数
  • buffer_size: 经验回放缓冲区容量默认100000
  • batch_size: 训练批量大小默认128
  • target_update_freq: 目标网络更新频率默认10

训练参数

  • num_episodes: 训练episode数量默认500
  • save_freq: 模型检查点保存频率默认50
  • log_freq: 日志记录频率默认10
  • random_seed: 随机种子默认42
  • num_parallel_envs: 并行环境数量默认4

奖励函数权重

  • throughput_weight: 通行量奖励权重默认1.0
  • speed_weight: 平均速度奖励权重默认0.5
  • density_weight: 密度惩罚权重(默认:-0.3
  • action_change_weight: 动作变化惩罚权重(默认:-0.1

高级功能

1. 并行环境训练

系统支持多环境并行训练,可显著提高训练效率。

配置方法

config.yaml 中设置:

training:
  num_parallel_envs: 4  # 使用4个并行环境

推荐配置

  • CPU训练: 2-4个并行环境
  • GPU训练: 4-8个并行环境
  • 高性能GPU: 8-16个并行环境

性能对比

并行环境数 相对速度 内存占用 推荐场景
1 1x 调试、小规模实验
2 ~1.8x CPU训练
4 ~3.5x 中高 标准训练
8 ~6.5x GPU训练

使用示例

training:
  num_episodes: 500
  num_parallel_envs: 4
agent:
  batch_size: 128  # 建议增加批量大小
  buffer_size: 100000

运行训练:

python main.py --mode train

输出示例:

Random seed set to: 42
Created 4 parallel environments
Using 4 parallel environments
Starting training for 500 episodes...

2. CSV流量输入

系统支持从CSV文件读取真实交通流量数据。

CSV文件格式

格式1单列格式推荐

demand
1500
1600
1700
1800

格式2带时间列

time,demand
0,1500
10,1600
20,1700

注意事项:

  • 流量单位:车辆/小时 (vehicles/hour)
  • 每行代表一个时间步的流量需求
  • 流量值必须为非负数
  • 如果episode长度超过CSV数据长度数据会循环使用

配置方法

config.yaml 中设置:

environment:
  demand_pattern: "csv"
  demand_csv_path: "demand_example.csv"
  demand_csv_column: "demand"

使用示例

使用提供的示例文件:

environment:
  demand_pattern: "csv"
  demand_csv_path: "demand_example.csv"

使用自定义CSV文件

environment:
  demand_pattern: "csv"
  demand_csv_path: "data/my_traffic_data.csv"
  demand_csv_column: "flow"

切换回内置流量模式:

environment:
  demand_pattern: "sine"  # 或 "constant"、"random"

模型架构

DQN智能体

  • 状态: 所有单元的交通密度和限速值的拼接
  • 动作: 离散的限速值(在最小和最大限速之间均匀分布)
  • 网络: 全连接层 + ReLU激活函数
  • 训练: 经验回放 + 目标网络,实现稳定学习

CTM模型

元胞传输模型基于以下原理模拟交通流:

  • 发送流: 受密度和限速限制
  • 接收流: 受下游容量限制
  • 守恒性: 车辆在单元边界守恒
  • 基本图: 密度、流量和速度之间的关系

输出文件

训练和测试后会生成以下文件:

  • checkpoints/model_episode_*.pt: 训练过程中保存的模型检查点
  • checkpoints/model_best.pt: 效果最好的模型基于episode奖励
  • checkpoints/model_final.pt: 最终训练的模型
  • logs/training_results.png: 训练曲线(奖励、损失、通行量)
  • logs/test_results.png: 测试可视化(密度热图和限速控制)

使用示例工作流

  1. 调整配置: 根据你的场景修改 config.yaml
  2. 训练模型: python main.py --mode train
  3. 监控进度: 查看控制台输出和 logs/training_results.png
  4. 测试模型: python main.py --mode test
  5. 分析结果: 查看 logs/test_results.png
  6. 迭代优化: 根据需要调整参数并重新训练

故障排查

训练相关

问题CUDA内存不足

agent:
  batch_size: 64  # 减小批量大小
  device: "cpu"   # 或切换到CPU

问题:训练速度慢

training:
  num_parallel_envs: 4  # 启用并行环境
  num_episodes: 200     # 减少episode数量
environment:
  episode_length: 180   # 减少episode长度

问题:训练不稳定

agent:
  learning_rate: 0.00005  # 降低学习率
  target_update_freq: 20  # 增加目标网络更新频率

问题:性能不佳

reward:
  throughput_weight: 2.0   # 调整奖励权重
  speed_weight: 1.0
agent:
  hidden_layers: [256, 256, 128]  # 增加网络容量

并行训练相关

问题:并行训练速度提升不明显

  • 检查GPU利用率是否已经很高
  • 瓶颈可能在网络训练而非数据收集
  • 尝试减少训练频率

问题:内存不足

training:
  num_parallel_envs: 2  # 减少并行环境数
agent:
  buffer_size: 50000    # 减小缓冲区

CSV流量输入相关

问题找不到CSV文件

  • 检查文件路径是否正确(相对路径或绝对路径)
  • 确保文件存在于指定位置

问题CSV数据格式错误

  • 确保CSV文件包含指定的列名
  • 检查数据是否为非负数
  • 验证CSV文件编码建议使用UTF-8

技术细节

随机种子固定

系统在训练开始时会固定所有随机种子Python、NumPy、PyTorch确保

  • 训练结果可重复
  • 便于调试和对比实验
  • 默认种子值为42可在配置文件中修改

最佳模型保存

训练过程中会自动跟踪并保存效果最好的模型:

  • 基于episode总奖励评估
  • 保存为 checkpoints/model_best.pt
  • 训练结束时显示最佳奖励值

许可证

本项目仅供学术研究使用。