从零学强化学习

一个 Andrej Karpathy 风格的学习仓库:每个算法、每个环境都从第一行代码写起,只用 Python + numpy,不依赖 gym / stable-baselines 等现成框架。一个概念一个文件,每段代码都能端到端读完。

纯 numpy 零第三方 RL 框架 14 课学习路径 从表格方法到蜂群对抗

01 训练结果

每个算法的测试断言是"确实学到了东西",而不是"能跑不报错"。以下是两个应用任务的真实训练曲线与评估指标。

蜂群编队 — 共享策略 SAC

0.059 m槽位误差(槽半径 0.15 m)
2714.7/ 3000 最后 200 集平均回报

8 个智能体共享一个去中心化策略(仅局部观测),在 1200 集内学会在圆形队形槽位上集结并保持。全入槽 +10,碰撞重罚。

已收敛 CTDE

四旋翼悬停 — 连续 SAC

2.66 m评估平均最终位置误差
-260训练后期平均回报区间上沿

牛顿-欧拉动力学 + 内环 PD 姿态稳定,外环学习速度指令。坠机不再终止(地面是状态边界)后,回报从 -4500 提升到 -260,但尚未锁定悬停窗口。

进行中 尚未收敛

02 环境演示

三个应用环境的浏览器实时模拟。四旋翼展示了内环(PD 姿态稳定 + 速度级级联)下被控对象的行为;蜂群环境使用真实训练收敛后的贪婪策略几何行为。

四旋翼悬停 内环物理模拟

外环 RL 策略通过速度指令控制水平位置;内环级联把速度误差转成姿态目标并由 PD 跟踪。坠落在地面钳制而非终止。

vx, vy 指令 地面 = 边界

蜂群编队 已收敛

8 个智能体各自只观察自己的速度、到槽位向量与 k 近邻相对位置/速度,共享同一策略,向圆形槽位集结。

局部观测去中心化

蜂群追逃 + 避障 训练脚本就绪

6 个追捕者共享策略围猎 1 个反应式逃跑者,障碍物 + 队友避碰惩罚。猎物是固定反应式策略,学习难度全在追捕者一侧。

捕获 +50固定猎物

03 学习路径

每课的结构:先读笔记建立直觉,再读代码(几十行),最后跑测试和示例验证理解。

01RL 问题形式化 + 表格方法(MC / SARSA / Q-learning)
notes/01-rl-basics.md
02策略梯度与 REINFORCE
notes/02-policy-gradient.md
03DQN:价值学习神经网络化
notes/03-dqn.md
04Actor-Critic:用价值网络降低方差
notes/04-actor-critic.md
05Cliff Walking:on/off-policy 分岔路
notes/05-cliff-walking.md
06Double / Dueling DQN 补丁
notes/06-dqn-variants.md
07A2C:把价值网络装进策略梯度
notes/07-a2c.md
08Pong from Pixels:纯像素策略梯度
notes/08-pong-pixels.md
09PPO:裁剪目标 + GAE 保险
notes/09-ppo.md
10TRPO:KL 硬约束 + 自然梯度
notes/10-trpo.md
11SAC:最大熵 off-policy 自动调温
notes/11-sac.md
12连续 SAC → 四旋翼悬停
notes/12-sac-continuous-quadrotor.md
13去中心化蜂群编队(CTDE)
notes/13-swarm-formation.md
14蜂群追逃 + 避障
notes/14-swarm-pursuit.md

04 项目结构

核心库 rl/ 纯 numpy,测试验证"学会了"而非"能跑"。

rl/                  # 核心库(纯 numpy)
├── tabular.py          # MC / SARSA / Q-learning
├── policy_gradient.py  # REINFORCE
├── actor_critic.py     # 表格 Actor-Critic
├── dqn.py              # 经验回放 + 目标网络
├── dqn_variants.py     # Double / Dueling
├── a2c.py              # n-step advantage
├── ppo.py              # 裁剪目标 + GAE
├── trpo.py             # KL 约束 + 自然梯度
├── sac.py              # 双 Q + 自动调温(离散)
├── sac_continuous.py   # tanh 高斯策略 + 重参数化
├── quadrotor.py        # 牛顿-欧拉动力学 + 内环 PD
├── swarm_flocking.py   # 去中心化编队,k 近邻观测
├── swarm_pursuit.py    # 追逃 + 避障
└── pong.py             # 像素策略梯度
examples/  notes/  tests/  # 训练脚本 / 学习笔记 / 学会验证

跑全部测试:python -m pytest tests/ -q