How I Built the Top Catan 1v1 Bot Without a GPU
Published:
As of November 9, 2026, 3 p.m. Eastern, my bot, Oversized Pig, had reached #1 on Colonist’s global 1v1 leaderboard: 2552 rating, 62.9% wins, and a 97-point lead over second place.
Thanks to Ben Burk for encouraging me to build a 1v1 bot, it’s been really rewarding!

Think you can beat Oversized Pig? Play a game in your browser.
It runs a small neural network and search on a CPU, with deterministic decisions for the same inputs and seed. It doesn’t call an LLM during play, and neither training nor play requires a GPU.
I set up a leaderboard repo, spun up 10+ Astra, Fable, and ChatGPT agents, and gave them roughly this brief:
Keep beating the leader. If you get over 55% wins, merge yourself in as the new leader. I believe in you. Aim for a breakthrough.
Over a few days and 20 successive leaderboard leaders, we arrived at this pig.
Most of my effort went into designing the environment: a working simulator, a measurable objective, and a shared leader everyone challenges. When one agent found an improvement, it became everyone else’s starting point. The promotion rules evolved, but the loop stayed simple:
Build → Challenge the Leader → Measure → Promote
Moves I Would Never Have Thought Of
Open on Three Wheat Tiles
Against 33scano, its very first settlement touched only wheat: 3, 6, and 9. Its second added 8-sheep and 4/5-ore. It never built on wood or brick—then won 15–8 by taking Longest Road.
Start a Race, Then Turn Away
Against MistaSmart, the pig built a road toward 3-ore, 11-ore, and the desert. Its opponent raced to settle there. As they spent a road and settlement on that spot, the pig’s recorded position estimate rose from 55.6% to 65.4%. The pig then branched toward 5-sheep, 6-sheep, and 11-ore, and won 15–7.
Leave Gaps to Deny Ore
Against Akash69420, its opening settlements claimed 5-ore and 6-ore, leaving it with no sheep and wood only on a 2. Its opponent opened without ore and only reached 12-ore later. The pig won 15–9.
These recorded games used the earlier oslo-surge version.
Three Differences Across 100 Games
Compared with its opponents in the same 100 recorded ladder games, the pig built cities before expanding more often, bought more development cards early, and reached fewer specialist ports.
| Recorded Behavior | Oversized Pig | Opponents |
|---|---|---|
| City before first expansion | 50% | 21% |
| Development cards bought by personal turn 10, average | 0.92 | 0.62 |
| Reached a 2:1 port by game end | 37% | 54% |
How These Were Counted
All 100 games, across development versions; opponents are presumed human. Expansion means the third settlement; the city-first count includes players who never added one. Card counts cover each player’s first ten turns, or the whole game if it ended earlier. Ports count ownership, not trades. Counts come from recorded board and card states, not chat or rendered log rows. These are descriptive comparisons, not evidence that any one habit caused the wins. Per-game data.
The Two Ideas I Added
The agents had already built whole-turn search around a learned value function. I pushed on two training changes:
Learn the search’s choices. Search outplayed the network alone. Instead of only fitting numerical position values, train the network to rank the search’s preferred plan above alternatives from the same decision.
Train where search actually looks. The first attempt improved one-action-at-a-time play, but not full search. Training on shortlisted plans’ end-of-turn positions fixed that mismatch. Put the evaluator back into search, collect new choices, and repeat.
The agents did the rest of the experimentation and implementation. My main contribution was the environment that let them measure progress and build on each other’s work.
Watch the Games
1. Last 100 Games Against Humans
71–29 (71%). The latest 100 available completed ladder recordings, across development versions.
2. 100 Games Against VINCO
VINCO recently went viral on X after its creators announced that it had reached #1 and #2 on Colonist’s global leaderboard.
66–34 (66%) across 100 games against VINCO. Its service hid discarded cards and Year of Plenty choices, so our adapter had to estimate its resource hand—a disadvantage for a model built to use exact resource counts.
3. 100 Games Against Two Sheep
Colonist uses balanced dice: the remaining deck and recent rolls change the next-roll probabilities. The printed number alone is not enough to judge a block.
74–26 (74%) across 100 corrected games against Two Sheep’s JAx Expert. Our adapter initially treated Two Sheep’s rolls as draws from Colonist’s finite dice deck. Two Sheep can produce sequences impossible under that setup: a depleted dice counter wrapped from 0 to 255, corrupting our roll probabilities.
Play Against the Pig
Play against the pig in your browser. Every device uses the same model and search budget; slower devices take longer.
The repo contains everything needed to play locally if the hosted demo is down. Follow me on X for updates.