跳到主要内容

DDPG Reacher-v5 Demo

使用纯 PyTorch 实现 DDPG,在 MuJoCo 的 Reacher-v5 环境中训练一个二维机械臂去追踪目标点。

项目简介

这个项目是一个针对 Reacher-v5 单独整理的可运行 demo。相比默认展示 InvertedPendulum-v5ddpg-invertedpendulum-v5,这里直接把环境、训练步数、探索强度和模型保存路径都设成了更适合 Reacher-v5 的默认值,适合直接上手实验。

代码结构

ddpg-reacher-v5/
├── index.mdx
├── reacher-success.gif
└── train_ddpg_reacher_v5.py

环境要求

pip install gymnasium[mujoco] torch numpy tqdm imageio

如果你本地已经有仓库里的 conda 环境,推荐直接使用:

source /home/jj/anaconda3/etc/profile.d/conda.sh
conda activate easy-robotics

快速开始

默认命令会在 Reacher-v5 上训练,并把 actor 权重保存到 artifacts/ddpg_reacher_v5_actor.pt

python projects/ddpg-reacher-v5/train_ddpg_reacher_v5.py

如果你想训练后直接跑几回合策略演示:

python projects/ddpg-reacher-v5/train_ddpg_reacher_v5.py \
--total-steps 80000 \
--demo-episodes 3 \
--demo-render

如果只是先做一次快速冒烟测试:

python projects/ddpg-reacher-v5/train_ddpg_reacher_v5.py \
--total-steps 200 \
--start-steps 50 \
--batch-size 32 \
--buffer-size 2000 \
--eval-interval 100 \
--eval-episodes 1 \
--device cpu

如果你想在训练结束后直接导出一个 gif:

python projects/ddpg-reacher-v5/train_ddpg_reacher_v5.py \
--total-steps 80000 \
--record-path projects/ddpg-reacher-v5/reacher-success.gif

最终效果

使用默认 seed=42 训练 80000 步后录制得到,对应 final_eval_return=-4.62

DDPG Reacher-v5 成功效果

默认参数

这个 demo 预设了一组面向 Reacher-v5 的默认超参数:

参数默认值说明
--env-idReacher-v5默认环境
--total-steps80000总训练步数
--start-steps4000纯随机探索步数
--batch-size256每次更新的 batch 大小
--buffer-size100000回放缓冲区容量
--exploration-noise0.2高斯探索噪声比例
--eval-interval5000评估间隔
--eval-episodes10每次评估回合数
--demo-episodes0训练后是否额外跑 demo
--record-pathNone如果设置则额外导出 gif 或 mp4
--record-episodes1录制多少个 episode
--record-fps20导出媒体帧率
--record-frame-skip2每隔多少环境步采一帧
--save-pathartifacts/ddpg_reacher_v5_actor.pt模型保存路径

实现要点

  • Actor 网络输出经过 tanh 后映射到环境动作范围 [-1, 1]
  • Critic 网络输入为 (obs, action) 拼接后的向量
  • 经验回放使用预分配的 NumPy 环形缓冲区
  • 时间截断 truncated 不会被当作真正终止,目标 Q 值仍然继续 bootstrap
  • 训练结束后可选调用 demo_policy() 跑若干回合策略演示
  • 如果设置 --record-path,脚本会在离屏 rgb_array 模式下自动导出 gif 或 mp4

适合进一步尝试的方向

  • exploration-noise0.2 调到 0.10.3,比较收敛速度
  • 试试更长训练,比如 --total-steps 150000
  • 在这个项目基础上继续扩展成 TD3 版本,观察稳定性差异