Environments
StableTested and in active use. Breaking changes will be called out. DeepMind Control, the robot ports and LIBERO are parity-gated against MuJoCo but newer to training — see their pages.
Thirteen families, from a 5×5 grid to dm_control’s dog. Everything except the Gymnasium wrappers is Mojo: the tabular grids, the classic-control dynamics, the 2D and 3D physics, the robot and LIBERO scenes, the arcade engines and the Atari 2600 emulator. That is what lets an environment step inside the same GPU pipeline that trains on its output.
The families
Section titled “The families”| Family | Environments | Engine | GPU batch |
|---|---|---|---|
| Tabular | GridWorld · FrozenLake · CliffWalking · Taxi | grid | — |
| Classic control | CartPole · MountainCar · Acrobot · Pendulum | Gymnasium-matching | partial |
| 2D physics | LunarLander · BipedalWalker · CarRacing | physics2d | yes |
| 3D locomotion | HalfCheetah · Hopper · Walker2d · Ant · Swimmer · Humanoid · pendula | physics3d | yes |
| 3D manipulation | Reacher · Pusher · Sawyer | physics3d | yes |
| DeepMind Control | 18 suite domains, 49 tasks · 13 manipulation tasks | physics3d | 15 domains |
| Robots | SO-ARM100 · SO-ARM101 · Unitree G1 · Franka Panda | physics3d | yes (G1: NVIDIA only) |
| LIBERO | 23 task families on the Panda | physics3d | yes |
| Arcade | Pong · Breakout · Space Invaders | native GPU | yes |
| Atari 2600 | 103 ROMs | 6502 emulation | CPU only |
| Board games | Tic-Tac-Toe · Connect Four · Go · Chess | — | yes |
| Procgen & Craftax | 16 Procgen games · Craftax Classic and full | native | yes |
| Gymnasium | 20+ wrappers | Python interop | — |
The SO-101 and LIBERO scenes are also where the task layer lives: families of scenes with goals, placement rules and resets, rather than one hand-written environment per task.
Full reference
Section titled “Full reference”Dimensions below are read from the source, not from the Gymnasium documentation. Where noeira differs from Gymnasium’s defaults, it is noted.
Tabular
Section titled “Tabular”| Environment | States | Actions | Reward |
|---|---|---|---|
| GridWorld | 25 (5×5) | 4 | −1/step, +10 goal |
| FrozenLake | 16 (4×4) | 4 | +1 goal (sparse) |
| CliffWalking | 48 (4×12) | 4 | −1/step, −100 cliff |
| Taxi | 500 | 6 | +20 dropoff, −10 illegal |
Classic control
Section titled “Classic control”| Environment | Obs | Actions | Notes |
|---|---|---|---|
| CartPole | 4 | 2 discrete | GPU batch |
| MountainCar | 2 | 3 discrete | tile-coding friendly |
| Acrobot | 6 | 3 discrete | RK4 integration |
| Pendulum | 3 | 1 continuous | V1 CPU · V2 GPU batch |
2D physics — physics2d
Section titled “2D physics — physics2d”| Environment | Obs | Actions | Notes |
|---|---|---|---|
| LunarLander | 8 | 4 discrete or 2 continuous | terrain + flame particles |
| BipedalWalker | 24 | 4 continuous | revolute joints, 10-ray LIDAR |
| CarRacing | 13 clean or pixels | 3 continuous or 5 discrete | slip-based tire model |
3D — physics3d
Section titled “3D — physics3d”| Environment | Obs | Actions | Frame skip |
|---|---|---|---|
| HalfCheetah | 17 | 6 | 5 |
| Hopper | 11 | 3 | 4 |
| Walker2d | 17 | 6 | 4 |
| Ant | 27 | 8 | 5 |
| Swimmer | 8 | 2 | 4 |
| Humanoid | 45 | 17 | 5 |
| HumanoidStandup | 45 | 17 | 5 |
| InvertedPendulum | 4 | 1 | 2 |
| InvertedDoublePendulum | 9 | 1 | 5 |
| Reacher | 10 | 2 | 2 |
| Pusher | 23 | 7 | 5 |
DeepMind Control, robots — physics3d
Section titled “DeepMind Control, robots — physics3d”| Environment | Obs | Actions | Episode |
|---|---|---|---|
| dm_control suite (walker, cheetah, humanoid, dog, …) | per task | per task | 1000 steps, reward in [0, 1] per step |
| dm_control manipulation (Jaco arm and hand, bricks) | per task | 9 actuators | 250 steps |
| SO-ARM100 / SO-ARM101 reach | 27 | 6 joint position targets, in [−1, 1] per joint | 500 steps |
| Unitree G1 | 64 proprioceptive + 463 privileged | 29 PD targets | 500 steps at 50 Hz |
See DeepMind Control and Robots for the per-task tables.
Arcade — native GPU engines
Section titled “Arcade — native GPU engines”Two observation modes each: a compact game-state vector (OBS_MODE=0) or a
4×84×84 grayscale frame stack (OBS_MODE=1).
| Environment | Clean obs | Actions |
|---|---|---|
| Pong | 6 | 3 |
| Breakout | 7 | 4 |
| Space Invaders | 8 | 4 |
Where the dimensions live
Section titled “Where the dimensions live”A recurring source of confusion, so worth stating plainly: for the physics3d environments the dimensions are on the model, not the config.
comptime OBS_DIM = HumanoidModel.OBS_DIM # 45comptime ACT_DIM = HumanoidModel.ACTION_DIM # 17HalfCheetah and Ant additionally expose them on their config
(HalfCheetahConfig.OBS_DIM), which is what the older examples use. Both resolve
to the same compile-time constant. If one does not exist, try the other.
Choosing one
Section titled “Choosing one”Learning the framework — GridWorld or CartPole. No GPU, seconds to run, obvious correct behaviour.
Testing a continuous-control algorithm — Pendulum first (3 dimensions, fast), then HalfCheetah (no early termination, so returns are smooth and easy to compare).
Testing exploration — MountainCar or FrozenLake. Both have sparse or deceptive reward that punishes greedy agents.
Stressing the physics engine — Humanoid. 45 observations, 17 actuators, and contact-rich dynamics that expose solver problems immediately.
Comparing against published continuous-control numbers — the DeepMind Control ports, whose returns are bounded by 1000 and comparable across tasks. They are parity-gated against MuJoCo but none has a training result documented yet.
A robot you can own — SO-ARM101, which has a real-hardware path.
Pixel-based agents — the arcade engines in OBS_MODE=1. Native and
GPU-batched, so they are far faster than the Atari emulator for training; the
emulator exists to validate them.
- Writing your own environment — the traits to implement
- Traits — the trait hierarchy in detail
- CPU and GPU paths — how batched environments work