Skip to content

Gern713/rl-algorithms

Repository files navigation

强化学习经典算法实现与对比实验

自学完强化学习理论后,实现 DQN 和 PPO 两种经典算法,在 CartPole、LunarLander、Pendulum 三个环境中从样本效率、收敛稳定性、动作空间适配性三个维度做系统对比。

算法实现

DQN(Deep Q-Network)

  • Experience Replay:打破样本时序相关性
  • Target Network:固定目标 Q 值,切断自举循环,解决训练不稳定问题
  • Epsilon-Greedy:探索-利用平衡

PPO(Proximal Policy Optimization)

  • GAE 优势估计:偏差-方差权衡
  • Clip 机制:策略更新的信任域约束,避免一步迈太大
  • 支持 discrete(Categorical)和 continuous(高斯分布)两种动作空间

对比实验结果

环境 DQN PPO 结论
CartPole-v1(离散,简单) 487/500 372 都能收敛,DQN 略优
LunarLander-v3(离散,复杂) 205 (Solved) 28(未收敛) off-policy 样本效率优势明显
Pendulum-v1(连续) 无法处理 收敛至 -650 PPO 的核心优势:支持连续动作空间

调参记录

  • DQN CartPole:奖励先升后降 → 学习率过高 + Buffer 太小,调低 lr 并增大 Buffer 后稳定
  • PPO Pendulum:初始完全没收敛 → 奖励量级(-1600)导致 value loss 压倒 actor loss,归一化 returns 后解决

项目结构

├── dqn.py                    # DQN 算法实现
├── ppo.py                    # PPO 算法实现(支持离散/连续)
├── utils.py                  # 训练日志工具
├── app.py                    # Gradio 可视化界面
├── train_dqn_cartpole.py     # DQN CartPole 训练脚本
├── train_dqn_lunar.py        # DQN LunarLander 训练脚本
├── train_ppo_cartpole.py     # PPO CartPole 训练脚本
├── train_ppo_lunar.py        # PPO LunarLander 训练脚本
├── train_ppo_pendulum.py     # PPO Pendulum 训练脚本
├── plots/                    # 训练曲线图
└── requirements.txt

快速开始

pip install -r requirements.txt

# 训练
python train_dqn_cartpole.py
python train_ppo_pendulum.py

# 可视化
python app.py

技术栈

Python / PyTorch / Gymnasium / Gradio | Claude Code + GLM-5.1(辅助开发)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages