Devlog

Training an AI to play Pokemon: what actually happened, measured — including the failures.

#11 Twenty-five minutes with a keyboard

2026-09-14 · training

My agent hit the same wall 434 times while carrying the item that opens it. It could not use that item, and no metric in the system was capable of saying so.

Read more →

#10 The breakthrough we kept throwing away

2026-09-13 · training

My agent had taught Cut three times and I never knew, because the machinery built to capture exactly that moment was watching a list of milestones that did not contain it.

Read more →

#9 What a Nintendo DS costs

2026-09-07 · method

The Game Boy emulator runs at 38x real time on my server. The DS runs at 1.06x. That one measurement, taken before I wrote any of the environment, killed a fortnight of planned work — plus two bugs that would both have looked like a model that cannot learn.

Read more →

#8 We are not running a BOINC server

2026-09-06 · architecture

My training machine makes thirty checkpoints a night and my server can score five. Volunteer computing is the obvious answer, so I read how Berkeley built BOINC — and then borrowed its architecture instead of running it.

Read more →

#7 Off the S.S. Anne with HM01, and no way to use it

2026-09-02 · results

Two of sixteen runs obtained the item the published work says no agent obtains. None of the sixteen taught the move it is for, so the wall it unblocks is still standing — and the A/B that sent me looking returned nothing at all.

Read more →

#6 A perfect correlation and the wrong answer

2026-08-31 · debugging

I found a memory address that matched what I needed 1.00 to 0.00 across 1,500 frames, and nearly built on it. It agrees with reality two-thirds of the time once you are a few hours into the game.

Read more →

#5 The reward that cannot see the thing it needs

2026-08-30 · reward design

Every step of the critical path my agent is stuck behind is dialogue — standing still and pressing a button. Its only exploration reward counts tiles walked on. It has a blind spot exactly where the hard gate is.

Read more →

#4 Three runs is not enough

2026-08-30 · method

I rejected a checkpoint because it failed one run in three, while the checkpoint I compared it against looked flawless. Then I measured that one properly and found it fails one run in six.

Read more →

#3 The inference recipe that quietly broke my training

2026-08-29 · debugging

Fine-tuning a working policy made it worse every single time, with and without the feature I suspected. The cause was one number copied from the Stable-Baselines3 docs, where it is correct, into a place where it is not.

Read more →

#2 Always measure against random

2026-08-28 · method

We scored checkpoints against each other for weeks and never established a floor. That one missing row hid a policy that had actively gotten worse.

Read more →

#1 The AI learned to walk into walls, then unlearned it

2026-08-28 · training

A checkpoint with 1.47 million steps of training performed worse than pressing buttons at random. Here is how we found out, what caused it, and how it climbed back out.

Read more →