共计 1861 个字符,预计需要花费 5 分钟才能阅读完成。
技术背景
Ant 环境是 MuJoCo 物理引擎中的经典连续控制任务,模拟六足机器人学习行走。相比离散动作的 CartPole 等简单环境,其特点在于:

- 高维状态空间:包含关节角度、角速度、接触力等 29 维观测值
- 连续动作控制:8 个关节需输出 - 1 到 1 之间的扭矩值
- 稀疏奖励机制:仅通过前进速度给予奖励,智能体需自主探索步态
在机器人步态学习、复杂运动规划等领域具有直接应用价值,也是验证算法在连续空间表现的标准测试平台。
环境配置
基础依赖安装
-
安装 MuJoCo(需先申请免费许可证):
wget https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz tar -xf mujoco210-linux-x86_64.tar.gz mkdir ~/.mujoco mv mujoco210 ~/.mujoco/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco210/bin -
安装 Python 环境:
pip install gymnasium==0.28.1 mujoco==2.3.3
常见问题解决
- GLFW 初始化错误:安装
libglfw3-dev(Ubuntu)或更新显卡驱动 - 许可证无效 :检查
~/.mujoco/mjkey.txt是否存在有效许可证
核心实现(PPO 算法)
网络结构定义
import torch
import torch.nn as nn
class ActorCritic(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
# 共享特征提取层
self.shared = nn.Sequential(nn.Linear(state_dim, 64),
nn.Tanh(),
nn.Linear(64, 64),
nn.Tanh())
# 策略网络(输出均值和标准差)self.actor_mean = nn.Linear(64, action_dim)
self.actor_logstd = nn.Parameter(torch.zeros(1, action_dim))
# 价值网络
self.critic = nn.Linear(64, 1)
def forward(self, x):
features = self.shared(x)
return torch.sigmoid(self.actor_mean(features)), self.critic(features)
关键处理逻辑
-
状态归一化:
class RunningMeanStd: # 在线计算状态均值和方差 def update(self, x): self.count += x.shape[0] delta = x - self.mean self.mean += delta.sum(0) / self.count delta2 = x - self.mean self.var += (delta * delta2).sum(0) -
奖励函数设计:
def compute_reward(state, action): # 基础前进奖励(x 轴速度)forward_reward = state[13] # 控制成本惩罚 ctrl_cost = 0.5 * torch.sum(action ** 2) return forward_reward - ctrl_cost
训练技巧
超参数设置
| 参数 | 推荐值 | 作用说明 |
|---|---|---|
| γ (折扣因子) | 0.99 | 长期回报衰减率 |
| λ (GAE 参数) | 0.95 | 优势估计平滑系数 |
| 学习率 | 3e-4 | 网络更新步长 |
| 熵系数 | 0.01 | 鼓励探索 |
Ant 专属优化
- 动作空间缩放 :将网络输出的(0,1) 值映射到 (-1,1) 区间
- 早期探索增强:前 1000 步随机动作概率从 1.0 线性衰减到 0.1
避坑指南
- 智能体原地打转
- 原因:未合理惩罚旋转动作
-
解决:在奖励函数中添加角速度惩罚项
-0.1*abs(state[14]) -
训练早期崩溃
- 原因:初始随机策略导致机器人跌倒
-
解决:降低初始 episode 长度(从 1000 步开始逐步增加)
-
回报不增长
- 原因:学习率过高导致策略震荡
- 解决:采用动态学习率(如 Cosine 退火)
性能验证
典型训练曲线
Episode 100 | Avg Reward: -50.2
Episode 1000 | Avg Reward: 120.5
Episode 5000 | Avg Reward: 480.3 (稳定行走)
评估指标
- 步态稳定性:连续 100 步 x 轴速度标准差 <0.3
- 能量效率:单位距离控制成本 <1.5
延伸思考
- 如何设计分层奖励函数来学习更复杂的步态(如爬坡)?
- 当需要迁移到真实机器人时,哪些环境参数必须进行域随机化?
正文完
