拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Gymnasium MuJoCo 连续控制环境:如何 6 步从蚂蚁跑起来到 PPO 训练闭环

Gymnasium MuJoCo 连续控制环境如何 6 步从蚂蚁跑起来到 PPO 训练闭环【免费下载链接】GymnasiumA standard API for single-agent reinforcement learning environments, with popular reference environments and related utilities (formerly Gym)项目地址: https://gitcode.com/GitHub_Trending/gy/Gymnasium本文目标让 Gymnasium 中 MuJoCo 环境里的四足蚂蚁尽快跑起来。先描述你会看到的效果屏幕上一条八条腿的蚂蚁从原地摔倒到训练后小跑前进奖励从零点几一路爬到几千。Gymnasium 是强化学习环境的标准接口库MuJoCo 是能模拟重力、关节与接触的物理引擎两者拼在一起就是一套开箱即用的连续控制任务。所谓连续控制就是动作不再是按键而是实数形式的力矩输出。 开始前只需一条安装命令pip install gymnasium[mujoco]。整条链路很直白你把一组数交给环境环境把观测和奖励还给你。Gymnasium 负责接口规则MuJoCo 负责物理规则。下面按完成一个目标的顺序走六步。第一步如何选 MuJoCo 环境——先走难度阶梯仓库里 12 个 MuJoCo 环境都放在gymnasium/envs/mujoco/目录下命名是机器人-版本号。目前活跃维护的是 v4 与 v5 两代v5 需要mujoco 2.3.3更早的 v2/v3 基于旧版 mujoco-py 后端已迁移到 gymnasium-robotics 项目。新项目一律选 v5复现旧文献时再确认对方用的哪一代。环境动作维度观测维度难度建议用途InvertedPendulum-v514★跑通交互流程熟悉窗口Swimmer-v528★第一次用简单网络训练Hopper-v5311★★PPO 闭环的锚点环境Walker2d-v5617★★观察多关节步态Ant-v58105★★★本文目标四足奔跑Humanoid-v517348★★★进阶全身运动⚠️ 难度大致从上到下递增。新手从第一行开始先感受机器人对你的数有反应练训练闭环时选 Hopper观测 11 维网络小、反馈快Ant 的 105 维观测看着吓人任务逻辑却和其他环境完全一样。Ant-v5 官方注册的通过线reward_threshold是 6000。下一步任选最底层的环境花 5 分钟把它转起来。第二步五分钟跑通第一个回合下面这段代码演示最短调用路径make 建环境、reset 重置、step 交互、close 收尾。运行后重点看两件事——窗口是否弹出、最终奖励打印出多少。import gymnasium as gym env gym.make(Ant-v5, render_modehuman) # human弹出实时窗口 obs, info env.reset(seed42) # seed 固定初始扰动 total 0.0 for _ in range(1000): # 一个回合最多 1000 步 act env.action_space.sample() # 随机动作每条腿关节一个数 obs, rew, term, trunc, info env.step(act) total rew if term or trunc: # 摔倒 或 时间到 break print(fepisode reward: {total:.1f}) # 随机策略通常只有几分 env.close()随机策略跑出来的奖励通常只有个位数蚂蚁几步就趴下——这是正常现象目标是确认环境活着。另外说明两点。其一step 返回五元组新观测、奖励、terminated机器人摔倒等终局、truncated只是时间耗尽、info额外信息。其二一次 step 并不等于一帧物理瞬间MuJoCo 内部每约 2 毫秒推一次默认一次决策步打包 4 次内推相当于机器人每 0.008 秒才决策一次这就是帧跳的由来调大它能放慢时间、给策略更多余量。下一步换 Hopper 打开内部搞懂它每一步到底在算什么。第三步以 Hopper 为例一次读懂奖励、观测与动作不看 API 表格只回答三个问题你给了它什么、它还给你什么、为什么给这么多分。动作。Hopper 是单腿跳跃者有 3 个铰链关节大腿、小腿、脚动作空间是Box(-1, 1, (3,))每个关节一个力矩指令。注意这个数不是直接的力MuJoCo 会把它换算成真实力矩再作用到关节上。这就是动作归一化的意义——策略只管输出 -1 到 1 之间的方向与强度单位换算由引擎兜底。观测。MuJoCo 内部用两本账记录机器人一本记每个关节此刻在哪位置一本记每个关节动得多快速度。Hopper 的 11 维观测就是这两本账拼起来5 个位置项躯干高度、躯干倾角、3 个关节角加 6 个速度项。有个默认设计值得留意x 坐标被刻意剔除智能体看不到自己跑了多远只能从速度里推算进度——这是环境主动加的归纳偏置逼出位置无关的步态。下面这段代码把空间参数直接打印出来网络设计时的输入输出维度就来自这些数字env gym.make(Hopper-v5) obs, info env.reset(seed0) print(env.observation_space) # Box(-inf, inf, (11,), float64) print(env.action_space) # Box(-1.0, 1.0, (3,), float32) print(obs.shape) # (11,) print(info) # 含 x_position、z_distance_from_origin奖励。每步得分 三项之和。前进项x 方向速度乘权重 1跑动就有分存活项躯干保持直立记 1 分趴下记 0控制成本动作平方和乘 0.001大动作要付燃油费。为什么必须三项配合只奖前进智能体可能边跑边摔没有存活项站着不动就没有代价没有控制成本关节会被打满。这三项还会分开写进 inforeward_forward、reward_survive、reward_ctrl调试时逐项看比只看总分快得多。下一步把这只单腿机器人放进训练循环搭最小 PPO 闭环。第四步最小 PPO 训练闭环PPO 是一种策略梯度算法思路是采一批轨迹更新一次网络。网络本身不复杂两个小 MLP一个头预测动作均值演员一个头预测状态价值评论家动作标准差通常作为可学习参数。仓库的官方教程目录docs/tutorials/training_agents/里有从零实现的 REINFORCE 参考初学也可以直接拿现成 PPO 库这里只展示骨架和该记哪些点。env gym.make(Hopper-v5) obs, _ env.reset(seed42) buf, ep_reward [], 0.0 # 本批轨迹、本回合奖励 for t in range(1_000_000): act, logp policy(obs) # 动作 其对数概率 nobs, rew, term, trunc, info env.step(act) buf.append((obs, act, logp, rew)); ep_reward rew if term or trunc: # 评估点 1每回合奖励 print(ft{t}, ep reward{ep_reward:.0f}) obs, _ env.reset() ep_reward 0.0 else: obs nobs if len(buf) 2048: policy.update(buf); buf.clear() # 攒满一批就更新日志建议盯三个评估点每回合奖励的滚动均值、回合能撑多少步判断是否频繁摔、info 里的奖励分解防止智能体站着不动刷存活分而reward_forward恒为 0。按每 10 万步打一次日志。Hopper-v5 的 reward_threshold 是 3800到线即可视为达标。下一步跑起来之后下面这 5 个现象大概率会碰见先认识它们再动手。第五步调参与排障——5 个现象及对策奖励突然 NaN 或曲线炸掉。多半是观测量级不齐位置项约 1 量级速度项可能到几十大动作又放大了梯度。先上观测归一化NormalizeObservation wrapper内部维护运行均值方差更新前再裁一下梯度。seed 固定了两次跑曲线还是不一样。seed 只管环境的随机数初始扰动网络初始化与动作采样的随机数并不归它管。把 torch 的种子也固定并且用多组种子跑、比较区间而不是单条曲线。开 human 窗口后采样慢了好几倍。窗口渲染要每步等画面画完人的观看节奏成了瓶颈。训练时用无窗口的rgb_array模式配 RecordVideo wrapper 按回合录视频既保留过程又不拖速度。奖励爬到平台期后突然归零。策略在利用某一种固定步态微小扰动就让机器人越过了不健康阈值Hopper 的终止条件是躯干倾角与高度的区间。先降学习率再考虑放宽 healthy_angle_range。观测或奖励出现异常大的数值。优先检查动作是否被裁到动作空间边界ClipAction wrapper 或手动 clamp越界的控制信号会让物理模拟直接失稳。 排障顺序记住一条先归一化观测再裁动作再固定全部随机源最后才动终止条件。动终止条件等于换考试题目要放最后。下一步闭环稳定后有两个方向值得往深走。第六步延伸方向换机器人自定义 XML每个环境对应gymnasium/envs/mujoco/assets/下的一个 XML如 hopper.xml里面定义关节自由度与执行器控制接口。v5 支持xml_file参数可以把自改的模型喂给现有环境类。建议路线先拿现成模型改一个质量或关节范围跑通再考虑从零写模型。加速采样向量化环境采样是连续控制任务的主要耗时。把 N 个环境放进 SyncVectorEnv 或 AsyncVectorEnv 并行推进一次 step 返回 (N, 观测维) 的数组同一批网络更新覆盖 N 台机器人from gymnasium.vector import SyncVectorEnv envs SyncVectorEnv([lambda: gym.make(Ant-v5) for _ in range(4)]) obs, _ envs.reset() print(obs.shape) # (4, 105)4 只蚂蚁 acts envs.action_space.sample() # (4, 8)每只各一个动作 obs, rewards, term, trunc, _ envs.step(acts)下一步对照下面这份清单收尾缺哪条补哪条。收尾上手指引清单选型InvertedPendulum 或 Swimmer 先跑通流程Hopper 练 PPO 闭环Ant 当期末考。循环make → reset(seed) → step → close 四个动词随机策略几分奖励属正常。读环境写网络前核对三个数字——动作维度、观测维度、奖励分解前进/存活/控制成本。训练盯每回合奖励、回合长度、奖励分解三个评估点用 RecordVideo 录视频别开实时窗口。排障归一化观测 → 裁剪动作 → 固定全部随机源 → 最后才动终止条件。参考资料仓库内文档MuJoCo 环境总览与各环境说明docs/environments/mujoco.md核心 API 文档docs/api/env.md向量化环境文档docs/api/vector.md官方训练教程源码REINFORCE 等docs/tutorials/training_agents/环境源码与 XML 模型gymnasium/envs/mujoco/【免费下载链接】GymnasiumA standard API for single-agent reinforcement learning environments, with popular reference environments and related utilities (formerly Gym)项目地址: https://gitcode.com/GitHub_Trending/gy/Gymnasium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门