The problem
A car is in a corner on dry road and the surface turns to ice. Grip drops to about a ninth of what it was, in a few metres. Two families of controller claim to handle this:
- Reinforcement learning: a network trained on millions of simulated skids, which works out the grip from how the car has just been behaving.
- Model predictive control (here MPPI): simulate thousands of possible futures every instant, pick the best, and update the grip estimate on the fly.
Papers usually report one beating the other. Two things make those comparisons hard to trust. Many test cases are crashes that no controller could avoid, which only adds noise. And the method the authors care about usually gets more tuning.
What I built
First, find out what is possible
Before comparing anything, every scenario gets one of four labels: impossible, possible only if you see the ice coming, possible by reacting, or undetermined. The "impossible" label comes from a proof (the tyres can't supply the force the corner needs, even used perfectly). The "possible" labels come from oracle controllers that are told the true grip.

A fast simulator I can trust
The vehicle model is a bicycle model with Pacejka tyre curves, the standard description of how tyre force saturates and falls off when sliding. I wrote it twice: a slow, readable NumPy version and a GPU version in NVIDIA Warp. 150 automated tests check that they agree. The GPU version runs 320 million control steps per second on a laptop GPU, and the GPU MPPI evaluates about 200 million rollout steps per second.
A fair fight, agreed in advance
- Both methods get the same sensors and the same number of tuning trials, logged in a ledger.
- The hypotheses, the metrics, and the results that would disprove each hypothesis were committed to the repository before any comparison ran (pre-registration).
- My prediction, on record: "RL wins" will not survive a properly tuned adaptive baseline.
Where it stands
| Part | State |
|---|---|
| GPU simulator and reference model | Done, 150 tests passing |
| Feasibility proof and oracle labelling | Done for the tuning scenarios |
| Adaptive MPPI and PPO teacher/student | Implemented, being tuned under the shared budget |
| Labelling the held-out test scenarios | Next |
| The comparison itself | Not run yet |
No result is claimed here. When the comparison is done, this page gets the regime map: where each method wins, where neither can, and whether my prediction held.
What I've learned so far
- Writing down what would prove me wrong changed the design. Several scenarios I had planned turned out to be impossible for any controller.
- A second, slow implementation is the cheapest test there is for a fast one.
- Reinforcement learning needed a warm start from a simple controller and about 200 million steps before it was competitive. Stopping earlier would have "shown" that it loses.
The repository is private until the results are in.