← Latent physics world modelsDocumentation indexGlossaryCode

v3.1 — 08: The controller. Does memory buy play?

The dream is dead and the controllers beat the memoryless bound anyway. Both halves of that sentence are the result.

Full numbers, commands and caveats: wm/README_C31.md.


1. The premise, checked first this time

v3’s lesson was that the memoryless bound must be measured before anything is trained. v3.1’s is the next one along: the dream must be measured before anything is trained inside it.

wm.eval_dream_alive dreams 150 steps from 64 real starts, decodes every frame, and counts balls — against the real continuation of the same 64 starts, frame for frame. Four dynamics models × three temperatures, 102 seconds.

  ball present ball below the band arrivals below the band / 150 frames
the real world 35.5 % 2.5 % 0.80
rnn_v31 (fair), τ=0 6.1 % 0.1 % 0.03
rnn_v31_poshead, τ=1 40.5 % 0.0 % 0.03
rnn_v31_ff (floor), τ=1 74.5 % 0.0 % 0.05
rnn_v31_allbands, τ=1 51.1 % 0.1 % 0.08

The dream is not a world for this task. And the way it fails is the thing to take away: three of the four models paint a ball on 40–75 % of their frames — as many as the world, or twice as many — and every one of those balls is above the band, near the top of the box, where the paddle cannot reach it and no action changes it. A presence-only criterion, which is what v3 used (“the ball is there on 36 % of frames”), would have called these dreams healthy. The statistic that separates a world from a picture of one is arrivals in the region where the agent can act, and on that every model is at 4–10 % of the world’s rate.

The one exception proves the same point. The fair model at τ ≥ 0.5 does put a ball below the band — 4 to 6 times more often than the world does, with a decoded height that barely varies. It has collapsed the ball onto the band’s lower edge and is flickering across the detector’s threshold. More arrivals than the world is not a more alive dream.

is the dream alive

2. And yet: five of seven controllers beat the memoryless bound

Seven controllers, 150 evaluation episodes, band (0.13, 0.63), paddle 0.16.

skill against the bound

policy interceptions / floor visit short move medium long (>0.35)
oracle (vision + memory) 0.99 1.00 1.00 0.97
ctrl_v31_tau1 (fair, τ=1) 0.73 0.76 0.71 0.72
ctrl_v31_poshead (privileged) 0.68 0.76 0.59 0.71
ctrl_v31_real (1.07 M real steps) 0.65 0.86 0.80 0.37
ctrl_v31 (fair, τ=0) 0.57 0.67 0.56 0.45
ctrl_v31_z_only (no memory, control) 0.51 0.92 0.45 0.11
wait_and_see (vision, no memory) 0.51 1.00 0.57 0.04
ctrl_v31_ff (feed-forward floor) 0.46 0.85 0.27 0.20
stay 0.38 0.99 0.13 0.00

(An independent re-check by the orchestrator on 90 fresh episodes, seeds 9000+, gives the same ordering: fair τ=1 0.73, privileged 0.70, memoryless bound 0.53, z-only control 0.47, feed-forward floor 0.40, oracle 0.98 — runs/ctrl_eval_v31/recheck_seed9000.md.)

The best fair controller is +0.22 above the memoryless bound with non-overlapping intervals, closing 46 % of the bound-to-oracle gap — and it is flat across the required-move split (0.76 / 0.71 / 0.72) in a bin where a policy with perfect vision and zero memory scores 0.04. That flatness is the object-permanence signature the design asked for, and it is the first time in this project that it has been observable at all: on v3’s band wait_and_see was 1.00 / 1.00 / 0.97 and the split measured nothing.

The negative control fired the right way, too — and there is a matched one. ctrl_v31_z_only_tau1 has the same V, the same M, the same training temperature and the same optimiser as the 0.73 row, and differs only in that h is removed from its inputs, which makes knowing anything about a hidden ball impossible by construction. It scores 0.51 — exactly the memoryless bound — and 0.06 on long moves. The 0.22 is h. (In v3 this control won the long bin and destroyed the interpretation.)

And the paddle now moves in the dark. The fair controller is in motion on 52 % of hidden frames (v3: 13 %), moves toward the landing point on 63 % of those, and covers 28 % of the required move while blind (v3: 3 %) against the oracle’s 79 %. On the long band it covers 49 %: the longer it cannot see, the more of the journey it makes anyway.

3. So what is the dream doing?

It is a feature-conditioned reward model, not a simulator.

M’s dense reward head reads the true 1 − |ball_x − paddle_x| at R² 0.72 on real latents, and inside the dream its output tracks the decoded ball-paddle gap at r = 0.92–0.98. Meanwhile h carries the hidden ball’s horizontal position at R² 0.52 (doc 07). So CMA-ES can discover “move toward where h says the ball is” without ever having seen a dreamed ball come out of the band — which is exactly what the numbers in §2 say it discovered. Doc 07 §4 anticipated this (“the reward head may still be informative even when the decoded frame shows no ball”); it is now measured rather than hoped.

Calling this “training in a world model” would overclaim. The rollout supplies the state sequence; the head supplies the objective; the part that would make it a world — a ball that goes behind an occluder and comes out the other side — is the part that does not work.

4. The three controls, and what each one settled

The privileged ceiling did not beat the fair model (0.68 vs 0.73, intervals overlapping) and collapsed off its training band (0.30 and 0.16 on the short and long bands, below the feed-forward floor, where the fair controller is flat at 0.55 / 0.57 / 0.56). This is the third version of this project in which supervising the hidden position explicitly buys nothing for play. On v3.1 there is finally a clean reason: doc 07 showed the fair model’s hidden-x memory had already caught up with the privileged model’s (R² 0.52 vs 0.48), so there was nothing left to add — and what the position head did add did not generalise.

The real-trained controller did not beat them either (0.65). Same policy class, same inputs, 1.07 M real environment steps — 5.4× any dream run’s — and fitness measured as real interceptions. Its shape gives it away: 0.80 on medium moves, the best in the table, and 0.37 on long ones. Direct optimisation of a sparse outcome finds the best reaction policy and overfits its seed block (its real score peaks at generation 20 of 40 and then declines). What the dream supplies that real rollouts do not is a dense reward at every step — the signal that pays for moving while blind.

The feed-forward floor is a real floor (0.46, below the bound), and the gap from it to 0.73 is the largest effect in the table.

5. The honest failures

6. Lessons

Next: 09 — v3.1 results and lessons.