Deep-Reinforcement-Learning-Algorithms
32个深度强化学习算法的Jupyter Notebook实战项目集,环境×算法矩阵覆盖DQN/PPO/DDPG/SAC等主流算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
32个深度强化学习算法的Jupyter Notebook实战项目集,环境×算法矩阵覆盖DQN/PPO/DDPG/SAC等主流算法
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
如果你刚入门强化学习,满屏的论文公式让你望而却步,或者对照着PyTorch官方教程跑了一遍CartPole就不知道下一步该学什么——那么这个项目值得你立刻收藏。
Rafael1s/Deep-Reinforcement-Learning-Algorithms 是一个将强化学习经典算法与经典测试环境逐一对应的实践型仓库。它不追求SOTA(State of the Art),而是专注于教学友好:每一种算法都搭配一个明确的环境,每个实验都附有完整的训练日志。32个项目,覆盖从最基础的Q-Learning到工业级应用的Soft Actor-Critic(SAC),用同一个仓库帮你建立完整的DRL知识图谱。
这个项目还有一个独特价值:所有代码都是纯Python/Jupyter Notebook,无任何第三方RL框架依赖。你没有看错——没有Stable-Baselines3,没有Ray RLlib,没有rsl-rl。作者手写每一行网络定义、经验回放、目标网络更新代码。这意味着你必须真正理解每一步在做什么,而不是把问题交给框架黑箱。对于想打牢基础的开发者来说,这是最好的教材。
深度强化学习的学习曲线极为陡峭。一个常见困境是:论文看了、公式推了,但真正上手时发现代码无从下手。市面上大多数教程要么过于简化(只跑CartPole),要么过于依赖高级框架(屏蔽了算法细节),很少有项目能在"保持教学深度"和"覆盖足够多算法"之间取得平衡。
这个项目的作者Rafael1s显然深度参与过Udacity的DRL纳米学位项目(仓库中有4个环境直接对应Udacity课程作业),他将课程中的理论转化为可运行的代码。每个子项目不只是一个脚本,而是一个完整的实验:包含环境配置、神经网络定义、训练循环、效果评估和可视化训练曲线。这种"矩阵式"组织方式——[环境 × 算法]——让你可以横向对比同一环境下不同算法的表现差异,也能纵向观察同一算法在不同复杂度环境中的泛化能力。
| 算法 | 对应环境 | 说明 |
|---|---|---|
| Q-Learning | MountainCar, CartPole | 表格型,入门首选 |
| 动态规划(MC) | Markov 6x6 | 蒙特卡洛方法入门 |
| 策略梯度 REINFORCE | Pong, CartPole | 纯策略梯度,端到端 |
| 爬山法 / 模拟退火 | CartPole | 启发式优化基线 |
| 算法 | 对应环境 | 特点 |
|---|---|---|
| DQN | CartPole, LunarLander, Snake | 经验回放 + 目标网络 |
| Double DQN | CartPole | 解决Q值过估计问题 |
| DDPG | LunarLander连续版, Reacher, Walker | 连续动作空间.actor-critic |
| TD3 | BipedalWalker, HalfCheetah, Hopper, Walker2D | DDPG双延迟升级版 |
| SAC | Ant, BipedalWalker, Hopper, Walker2D, Minitaur | 最大熵RL,自动温度调节 |
| PPO | BipedalWalker, CarRacing, Pong连续版, MountainCar连续版 | 信赖域策略优化,稳定性强 |
| A2C | BipedalWalker | 异步优势Actor-Critic |
| MADDPG | Tennis(多智能体协作/竞争) | 多智能体环境下的DDPG扩展 |
项目使用三类主流RL测试环境:
Gymnasium(原OpenAI Gym): CartPole、LunarLander、MountainCar、Pong——强化学习入门标配。CartPole平衡杆问题是绝对的Hello World,连续控制版本则需要处理连续动作空间。
PyBullet物理仿真环境: Ant、Hopper、HalfCheetah、Walker2D、Minitaur——这些双足/四足机器人在物理引擎中运动,对算法要求极高。PyBullet是开源免费的,无需MuJoCo许可,是目前最具性价比的机器人RL研究平台。
CarRacing像素级视觉输入: 赛车游戏从像素输入学习策略,这是从表格型状态到高维感知的重要跳跃。PPO在这类任务上表现稳定,配合图像堆叠(img_stack=4)处理时序信息。
CartPole-DQN是整个仓库最简洁的入口点,非常适合作为阅读源码的起点。
# agent.py
class Agent(object):
def __init__(self, n_states, n_actions, hidden_dim):
self.q_local = QNetwork(n_states, n_actions, hidden_dim=16).to(device)
self.q_target = QNetwork(n_states, n_actions, hidden_dim=16).to(device)
self.optim = optim.Adam(self.q_local.parameters(), lr=LEARNING_RATE)
self.replay_memory = ReplayMemory(10000)
def get_action(self, state, eps):
# ε-greedy 策略
if random.random() > eps:
with torch.no_grad():
return self.q_local(state).max(1)[1]
else:
return torch.tensor([[random.randrange(self.n_actions)]])
QNetwork使用三层全连接网络,激活函数为PReLU(参数化ReLU,有助于网络自适应学习激活斜率)。DQN的核心技术——经验回放(Experience Replay) 和 目标网络(Target Network) ——都在代码中清晰体现:replay_memory保存历史转移样本,训练时随机采样打相关性;q_target网络定期从q_local硬拷贝或软更新,防止训练不稳定。
Soft Actor-Critic是仓库中代码量最大的算法之一,体现了完整的最大熵RL实现:
# SAC 核心逻辑
self.target_entropy = -torch.prod(torch.Tensor(action_space.shape)).item()
self.log_alpha = torch.zeros(1, requires_grad=True) # 自动温度参数
self.alpha_optim = Adam([self.log_alpha], lr=lr)
self.policy = GaussianPolicy(...) # 高斯策略网络输出均值和方差
SAC相比DDPG/TD3的关键改进:引入熵正则项,自动平衡探索与利用。log_alpha作为可学习参数,不需要人工调参。GaussianPolicy网络输出动作分布的参数(均值和方差),通过重参数化技巧实现端到端可导训练。双Q网络(两个独立的Q评估器)取最小值防止过估计。
CarRacing-PPO使用Beta分布而非高斯分布输出连续动作,这对有界的动作空间(如赛车的油门/转向范围[0,1])特别友好:
alpha, beta = self.net(state) # Beta分布参数
dist = Beta(alpha, beta)
action = dist.sample() # 从Beta分布采样
图像输入通过栈式处理(img_stack=4)保留最近4帧,解决单帧无法感知速度方向的问题。PPO的clip机制(EPOCH=8, EPS=0.1)在代码中通过gae(广义优势估计)配合实现,保证策略更新步长受控。
每个子项目都配有Jupyter Notebook格式的训练日志(.ipynb),包含:
以BipedalWalker为例,这个两足机器人需要在崎岖地形行走,能稳定完成该任务的算法说明已经具备了实际机器人控制的基本能力。SAC和TD3在这个环境上均有良好表现,但收敛速度和数据效率存在差异——通过同一环境的不同算法对比,学习者可以直观理解各算法的数据效率差异。
最低配置: CPU + 8GB RAM,可以运行CartPole/LunarLander等轻量环境。
推荐配置: NVIDIA GPU(4GB+ VRAM),运行PyBullet物理仿真环境(Ant/Hopper/Walker2D)。PyTorch GPU加速可将训练速度提升5-10倍。
上手难度: 中等。适合已经具备Python和深度学习基础的学习者。每个子项目都有独立README说明环境依赖,推荐从CartPole-DQN开始,逐个击破。
依赖环境: PyTorch、Gymnasium、PyBullet、NumPy、Matplotlib、Pygame(Snake环境)。无复杂C++编译依赖,pip install即可。
尽管这个仓库在教学层面表现出色,但必须指出其局限:
不是生产级代码: 代码没有做工程化封装——没有配置管理、没有超参数搜索框架、没有实验追踪工具( wandb / tensorboard)。每个实验都是独立的notebook,缺乏可复用的训练基础设施。如果你需要规模化训练或调参,这个仓库的工程化程度不够。
部分环境已过时: OpenAI Gym已被Gymnasium替代,仓库中部分notebook仍使用旧版Gym API,在新版本Gymnasium中需要适配。
算法选择偏向经典: 没有覆盖近年来影响力很大的算法如PPO的变体(APPO、PPOX)、Model-based RL(Dreamer、MuZero)、Offline RL(CQL、IQL)。对于想跟进学术前沿的开发者,这个仓库的知识覆盖范围有限。
非官方维护: 作者Rafael1s的个人项目,没有活跃的issue处理和版本更新。依赖版本变化可能导致部分代码失效。
这个仓库代表了强化学习学习资源的一种重要类型——"Paper-to-Code"实践型仓库。它不追求刷榜或创新,而是架起了从学术论文到可运行代码的桥梁。在当前AI学习资源普遍两极分化的背景下(要么过于学术抽象,要么过于依赖高级框架黑箱),这类项目填补了中间地带的空白。
对于正在准备DRL面试或参加强化学习竞赛的开发者,这个仓库的"矩阵式"设计让你可以针对特定算法或环境快速复习核心代码逻辑。对于科研工作者,它提供的干净实现可以作为baseline快速改造。对于AI爱好者,它是目前最全面的DRL入门实践手册之一。
评分: ⭐⭐⭐⭐(4/5)