How We Trained the AI Opponents, and the Three Times It Went Wrong

September 7, 2026

The AI scores every legal move the engine enumerates and takes the best one. 38 weights approximate the rulebook scoring (3 VP per income, −3 per share, link tiles), with two personalities on top: Carnegie and Vanderbilt.
It went wrong three times. Three weeks of trained weights never reached a human. Evolution converged on never bidding. And small samples fooled us three times over.
Where it stands: humans finish first in 91% of 341 games. The AI average rose from 2.4 points in July to 22 in September, but it does not beat people. The loop runs again tonight.

Your opponents on this site are code. This is how that code came to be, told through the failures rather than the wins, because the failures taught more.

Structure: the engine enumerates, the AI chooses

At every decision the engine lists every legal move. The AI only picks from that list. So it cannot make an illegal move, and because every die roll and cube draw comes from a seed, any game can be replayed exactly. Those two properties underpin every measurement below.

The choice is a weighted sum of 38 terms. A delivery over my own link raises income by one, which is 3 VP, so 3.0. Passing through an opponent's link hands them 3 VP, so −1.2. The turn-one textbook move of connecting a city with three tiles gets 6.0. Scattering unfinished branches costs 3.5. On top sit two personalities: Vanderbilt with a safety margin of 2, Carnegie with 4. That one number is why Vanderbilt issues 3 shares on turn one and Carnegie issues 2.

Rust Belt turn 1 action selection with AI opponents having already taken Engineer, Locomotive and Urbanization
Turn-one action selection. The three AIs have already picked their actions, each by its own weights.

Training: an evolution loop every night

On 5 July the first self-play arena ran. Mutate the champion's weights, play the variants against each other on identical seeds with rotating seats, and rank them by a fitness score that rewards wins and average VP and punishes bankruptcy. The generation-2 champion won 41.7% of games, but on 36 games, so it was frozen as is. The rule "no replacement under 100 games" dates from that day.

On 7 July a visitor left a long piece of feedback: nobody bids in the auction, track gets scattered, first place scores 90 while second scores 10. Instead of patching code, the first step was to build metrics that reproduced each symptom as a number, and then to gate on them. Since then three evolution arms run every night on a Mac mini, and at six in the morning a holdout league plays the candidates against the current champion. Clear four thresholds (fitness, bankruptcy, win rate, completion) and it deploys itself. Ten automatic deployments in two months.

First failure: three weeks of training that never reached a human

On 1 August, while replaying 103 human games through the AI to measure how often it agreed with human decisions, something looked off. In real games the AI averaged 3.2 points, median zero, with 34% bankruptcies. In the self-play league it averaged 62. The cause was wiring, not learning. The game screen assigned a preset to every AI seat, and the preset overwrote the learned weights with a hard-coded old set. Five nightly deployments had changed nothing. The league's plateau and the live results had been observations of two different policies.

After the fix, the outcome decomposition was redone. Shares were not the problem (humans issued 10.4, the AI 11.9). Income was: 35.1 for humans against 11.4, and the AI's income actually shrank after turn six. So a term was added that takes the top twelve build candidates, plays each one out, and simulates the deliveries. The delivery gap closed by 77%, and the live AI average went from 2.4 points in July to 20.5 in August.

Second failure: it evolved to give up the auction

Mutation had no ceiling. The weight for passing on turn order went from 2.2 to 641, and by September to 3,221. Self-play could not punish it: when identical policies meet nobody bids, bankruptcies sit at a peaceful 7%, and against a different policy they jump to 32%. At 66.6% of the points where humans bid, the AI dropped out. Two visitors who had never met reported the same symptom in July and August. It was the blind spot of an inbred league, and the lesson fits in one line: tuning finds a local minimum, not an optimum.

Third failure: fooled by small samples, three times

In late August a guestbook post said the AI was "really really bad", so different kinds of AI were put on the same scale: the rulebook rewritten as conditionals, a language model asked for every move, and a language model that keeps memory across the whole game. A six-game pilot came in at 67%. At 24 games, 45.8%. Another setup won 4 of 6, then 39.6% at 24. The report literally says "third small-sample optimism". With enough games, the final table looks like this.

AIWin rateGamesNote
Rulebook conditionals6.1%9982% bankrupt
Language model, stateless26.3%38below the 33.3% null
Heuristic championabout 33%baseline
Language model, stateful45.4%54p≈0.03, $4.6 to $13.9 per game

The deciding variable was memory, not the model. And adoption came down to cost, not performance: a free, non-monetised site cannot run an opponent that costs several dollars a game. Along the way a $10 API balance vanished in a day, billed for empty responses.

Where it stands

MeasureValue
Finished games (operator excluded)341
Human finished first91% (309 games)
Human bankruptcies6%
AI average score14.9 (29% bankrupt)
AI average by monthJuly 2.4, August 19.8, September 22.3

Finished games from 2026-07-06 to 09-07. As the AI improved, the human win rate rose too (84% to 93%); the audience changed over the same period and the two effects are not yet separated.

The early-September diagnosis was less comfortable. A champion with 11% bankruptcies in the 3-player league hit 50% in real 4-player games (the league switched to four players on 25 August), and re-measuring promoted candidates showed their edge mostly evaporating. Promotion reproducibility near zero, in other words, so validation is being rebuilt around paired games on identical seeds.

Eighty-six papers were read along the way. Two recommendations were adopted: use human games as a regression gate, and compute bids as a difference formula. Most of the rest was too heavy for a game this size.

In one line

Do not change what you have not measured. That rule made this slow, and that rule is why we know what was wrong. The day the AI beats you, that game's seed goes at the bottom of this article.

Figures in this article come from this site's operating documents (the AI training roadmap, the human replay analysis of 2026-08-01, the LLM arena evaluation of 2026-08-31, the nightly experiment log) and from finished-game records with the operator excluded.

Play a game against it

More strategy articles

Age of Steam Deluxe Edition retail box, shown from the Eagle-Gryphon Games official store page Get the original Age of Steam Deluxe Edition Copyright John Bohrer. Published by Eagle-Gryphon Games. This web implementation is no substitute for the physical game. Buy from the official store