Skip to content

Repository files navigation

经典强化学习算法 PyTorch 实现

从零手写 7 个经典 RL 算法(DQN 系列 + REINFORCE/AC/PPO 系列),每个算法一个独立目录、自包含脚本、详细中文 README。 适合强化学习入门与进阶实践;所有算法均可在 CPU / Apple Silicon MPS / NVIDIA CUDA 上运行。

CI Python PyTorch License Algorithms Status

目录

算法路线

按"价值 → 策略"两支递进组织,每个目录独立可运行:

# 算法 类别 环境 目录
1 DQN Value-based CartPole / Atari dqn/
2 Double DQN Value-based CartPole double_dqn/
3 Dueling DQN Value-based CartPole dueling_dqn/
4 PER DQN Value-based CartPole per_dqn/
5 REINFORCE Policy-based CartPole reinforce/
6 Actor-Critic Policy-based CartPole actor_critic/
7 PPO Policy-based CartPole / HalfCheetah-v4 ppo/

阅读顺序推荐:dqn → double → dueling → per → reinforce → actor_critic → ppo(每个 README 都明确写了"与上一步的差异")。

性能亮点

PPO + HalfCheetah-v4 (MuJoCo 连续控制)

  • 在 Apple Silicon MPS 上 122 回合 / 约 12.3 万步 达标
  • 达标时评估回报 3689.9(5 回合确定性均值,达标线 3000)
  • 最终评估 3 回合平均回报 3678.6(3624.3 / 3685.5 / 3726.1)
  • 总耗时 约 12 分钟(Apple Silicon MPS 实测 12m8s;如未达标,最长 1M 步 ≈ 100 分钟)

PPO HalfCheetah 训练曲线

CartPole 系列(统一基线)

算法 收敛回合 评估满分 备注
DQN 1400 500/500 MLP 网络
Double DQN 同 DQN 同 DQN 缓解过估计
Dueling DQN 同 DQN 同 DQN V/A 分解
PER DQN 同 DQN 同 DQN 优先回放
REINFORCE 600 500/500 蒙特卡洛
Actor-Critic 数百 500/500 单步 TD 自举
PPO 数百 500/500 裁剪目标 + GAE

快速开始

# 1. 创建虚拟环境并装依赖
python3 -m venv rl
rl/bin/pip install -r requirements.txt

# 2. 跑一个最简单的 CartPole DQN(约 1400 回合收敛)
cd dqn
../rl/bin/python dqn_cartpole.py

# 3. 跑 PPO + HalfCheetah(默认 1M 步,提前达标自动结束)
cd ../ppo
../rl/bin/python ppo_halfcheetah.py --checkpoint-every 20

更详细的可复现步骤:ppo/REPRODUCE.md

工程化特性

每个算法脚本都具备:

  • 可复现性:固定随机种子、完整训练状态保存(网络 + 优化器 + 归一化统计量)
  • 可视化:--render-every 弹窗演示、--eval-only 加载模型观看
  • 断点续训:--resume 接着上次训练继续(保存完整训练状态)
  • 中断保护:Ctrl+C 自动保存检查点;--checkpoint-every N 定期落盘
  • 设备自适应:自动选择 CUDA → Apple Silicon MPS → CPU,可用 RL_DEVICE=cpu 强制
  • 训练日志:PPO 训练期间输出 3 份 JSONL 诊断日志
    • *_steps.jsonl:每步(reward / 熵 / value / log_prob / 动作模长 / done)
    • *_updates.jsonl:每次更新(policy/value/entropy loss、KL、clip_fraction、explained_variance、grad_norm、ratio mean/max、bootstrap_value、fps 等 19 字段)
    • *_episodes.jsonl:每回合(回报、长度、滑动均值)

项目结构

.
├── dqn/                    # 基础 DQN(MLP + Nature DQN 卷积)
├── double_dqn/             # Double DQN(解耦选动作与评估)
├── dueling_dqn/            # Dueling DQN(V/A 分解)
├── per_dqn/                # PER DQN(SumTree 优先回放 + IS 权重)
├── reinforce/              # REINFORCE 蒙特卡洛策略梯度
├── actor_critic/           # Actor-Critic(共享特征层)
├── ppo/                    # PPO(CartPole 离散 + HalfCheetah 连续)
│   ├── ppo_cartpole.py
│   ├── ppo_halfcheetah.py
│   └── REPRODUCE.md        # 复现 ~3680 评估回报的具体步骤
├── requirements.txt
├── rl/                     # Python 虚拟环境(不提交,见 .gitignore)
├── LICENSE
├── Dockerfile
└── .github/workflows/ci.yml

复现 PPO HalfCheetah 训练结果

详见 ppo/REPRODUCE.md。简版:

cd ppo
../rl/bin/python ppo_halfcheetah.py --checkpoint-every 20
# 预期:122 回合达标,最终评估回报 ~3680

相关项目

  • rl-training-platform —— 配套的 RL 训练实验管理平台 (Spring Boot 3 + Vue 3 + MySQL 8 + Redis 7 + InfluxDB 2.7,Docker Compose 一键部署,含 API 文档与部署运维手册)。

    本仓库的 ppo/ppo_halfcheetah.py 会自动加载该平台的 python_worker/rl_reporter.py, 用 --platform-url http://<host>:8080 --exp-id <id> 即可把训练指标上报到平台,在 Vue + ECharts 看板上实时看曲线。

如何引用

如果你在毕设 / 课程项目 / 工作中用了这个仓库:

@misc{rl-pytorch,
  author = {junxiaoguang},
  title  = {Classic RL Algorithms in PyTorch: From DQN to PPO},
  year   = {2026},
  url    = {https://github.com/junxiaoguang/rl-pytorch}
}

License

MIT

About

7 个经典强化学习算法的 PyTorch 从零实现(DQN / Double / Dueling / PER / REINFORCE / Actor-Critic / PPO),含中文 README 与可复现训练结果

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages