Imagine a Move

The maze agent never simulates the world — it remembers transitions as one vector and queries it. Walk the grid to teach M = Σ bind(bind(state, action), next), then click any cell to watch the agent imagine each move by unbinding and cleaning up. No lookup table, no physics engine: just one hypervector.

Transitions learned 0 / 0 · M magnitude 0%

Click a cell to imagine

Each open move unbinds its key out of M and cleans the blurry result up to the nearest real cell. ✓ = matches where that move truly leads.

agent goal ★ selected cell confident prediction → wall
How it works. Every cell is a random hypervector. A move you've walked folds bind(bind(state, action), next) into one running sum M — all transitions superposed in the same D components. To imagine action a from a state, bind M with bind(state, a): because bind is self-inverse, the matching term collapses back to the stored next symbol while every other term scatters into noise. (The next symbol is stored ρ-shifted so it can't alias the keys — without it, reverse moves in a corridor collide.) Cleanup snaps that noisy estimate to the nearest real cell. Confidence is the cleanup similarity — it falls when M is overloaded (try D = 256) or the move was never walked.

Tie to Neuron Lab. This is the project's wmImagine verbatim: cleanupNearest(bind(M, bind(state, action))). The agent does one-step lookahead — imagine each move, score the result, commit the best — "trying a move in its head" before stepping. (The project keys on egocentric L/F/R actions so the model transfers between mazes — that twist is its own lab. Here we use plain N/E/S/W to keep the focus on the imagine step.)