小球为什么总出杯?如何用 Stable-Worldmodel 做 Ball-in-Cup 动态系统稳定控制
【免费下载链接】stable-worldmodelA platform for reproducible world model research and evaluation项目地址: https://gitcode.com/GitHub_Trending/st/stable-worldmodel
挥杯接球,手抖一下小球就飞出去了——这就是动态系统控制的经典难题。Stable-Worldmodel 是一个可复现的世界模型研究与评估平台,它把 Ball-in-Cup 环境封装进 dmcontrol 环境套件,让你能复现干扰实验、训练 LEWM 一类算法。
🎯 游戏规则:Ball-in-Cup 的观测、动作与奖励
把杯柄想象成走平衡木的杆:小球吊在杯柄一端,你每一刻都要把杯口恰好摆到小球下方,早一步或晚一步,球就脱出了。这个物理过程由 MuJoCo 引擎仿真,控制步长 0.02 秒。
从三个角度拆解环境:
- 观测:不是原始像素,而是特征向量——杯子的位置、小球的位置以及两者的速度。环境 ID 为
swm/BallInCupDMControl-v0。 - 动作:二维连续力,空间是
Box(-1, 1, shape=(2,)),分别对应 x 和 z 方向推杯子的力度,取值范围被归一化到 [-1, 1]。 - 奖励与成功判定:目标不是"碰一下",而是把球摆进杯里并保持。每集 1000 步(20 秒),只要检测到小球处于杯口区域内(
physics.in_target())就算一次成功。
实现的完整逻辑在 ball_in_cup.py 里,默认参数下它跑出来的轨迹是这样的:
⚙️ 把难度拉满:dmcontrol 环境如何用干扰模拟不确定性
只会在默认物理参数下"背答案"的算法,换个质量就失效。所以 Stable-Worldmodel 给每个环境配了一个variation space(可变因素空间),Ball-in-Cup 里包含 9 类因素。它模拟不确定性主要靠两条路:
- 参数扰动:杯子和球的密度可以在 500~1500 kg/m³ 之间浮动,球半径从 0.01 米到 0.05 米不等,重力甚至能在运行时直接改——相当于同一只杯子,有时轻飘飘有时沉甸甸。
- 视觉扰动:杯子颜色、球颜色、灯光强度、地板格子纹理都可以随机化,考察策略是否过度依赖外观。
每次 reset 时按配置采样这些因素,算法面对的就是"永远不太一样"的世界。这正是做零样本泛化和分布外评估要的东西。下面是随机化各因素后的效果:
📊 算法怎么破:LEWM 训练世界模型与 GPU 使用率
Stable-Worldmodel 内置了多条世界模型基线,其中 LEWM 的思路是"先看懂环境,再谈控制":
- 把连续观测帧与动作编码成 embedding 序列;
- 用上下文预测未来时刻的 embedding,两者之差就是预测损失;
- 再叠加 SIGReg 正则项,防止表示退化成一团无效信息。
训练入口是 scripts/train/lewm.py,基于 Hydra 配置 + PyTorch Lightning 组织,数据加载、切分、优化器调度都是脚本内现成的。
训练时 GPU 使用率曲线长这样:
这张图说明两件事:整体利用率保持在较高水平,前向/反向传播把算力吃得很满;同时曲线有明显起伏,对应数据加载、验证等阶段性空闲——这是正常训练节奏,不是卡死。如果你看到 GPU 长期贴着 0,那大概率是数据管道出了问题。
🚀 三步跑通 Ball-in-Cup 示例
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/st/stable-worldmodel,然后cd stable-worldmodel - 按 pyproject.toml 中的 extras 安装,环境 + 训练依赖都要装全:
pip install 'stable-worldmodel[all]' - 确认环境注册成功:
swm envs,列表里应能看到swm/BallInCupDMControl-v0 - 启动 LEWM 训练:
python scripts/train/lewm.py,配置默认走scripts/train/config/launcher/local.yaml,无需额外参数
环境本身的细节、可变因素清单都写在 docs/envs/dmc.md,World 接口和数据采集的快速入门在 docs/quick_start.md,跑通之后可以顺着读。
【免费下载链接】stable-worldmodelA platform for reproducible world model research and evaluation项目地址: https://gitcode.com/GitHub_Trending/st/stable-worldmodel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考