About This Project
A browser arcade cabinet that flies nine trained LunarLander-v2 policies — the first-party PPO pilot plus eight imported contenders — on one shared physics engine, so you can race them head-to-head.
What this is
A single web page that runs the classic LunarLander-v2 landing task and lets you fly it, or watch a trained policy fly it. Nine policies ship with the cabinet. Every pilot reads the same eight cockpit readings, picks one of four moves, and lands on the same physics. The only difference is the model.
How it works
- The environment and physics run in the browser in Python (Pyodide 0.23.4), using PyPyBox2D, a pure-Python Box2D 2.1-era solver, behind a small Gymnasium-compatible shim.
- JavaScript draws the canvas and runs each policy with ONNX Runtime Web 1.19.2 on its WebAssembly CPU backend.
- Third-party checkpoints are converted offline to one contract —
observation[8] → logits[4]— with parity checks, using era-pinned exporters, and checked against the original policy before they fly here. - Every pilot flies the identical course and the identical hazard timeline. Same seed, same step, same sky.
The pilots
| Pilot | Algorithm | Builder | Source |
|---|
Sources & further reading
This project
Model origin & starting point
Environment & reference material
Runtime building blocks
A note on physics
Sandbox physics. Scores are this cabinet's, not the official leaderboard. Contenders trained on native Box2D 2.3 may transfer imperfectly to the browser's older Box2D 2.1-era solver.
How this was built
Development ran with AI agents under human direction. Some sprints used Paperclip, an agentic development harness. The agents ran on DeepSeek v4.1, Gemini 3.8 Flash, and GPT-6 Luna.
Credits
PyPyBox2D by Ken Lauer · Box2D · Pyodide · ONNX Runtime · Gymnasium · Stable-Baselines3. Every contender keeps credit to its original author and repository.
The Xinli Yu / RL-Projects model has no license file in its source repository.