How We Trained the AI Opponents, and the Three Times It Went Wrong
September 7, 2026
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.

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.
| AI | Win rate | Games | Note |
|---|---|---|---|
| Rulebook conditionals | 6.1% | 99 | 82% bankrupt |
| Language model, stateless | 26.3% | 38 | below the 33.3% null |
| Heuristic champion | about 33% | baseline | |
| Language model, stateful | 45.4% | 54 | p≈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
| Measure | Value |
|---|---|
| Finished games (operator excluded) | 341 |
| Human finished first | 91% (309 games) |
| Human bankruptcies | 6% |
| AI average score | 14.9 (29% bankrupt) |
| AI average by month | July 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.
More strategy articles
- Age of Steam Strategy Guide: the Fundamentals, Then Your First Turn
- How Many Shares Should You Issue in Age of Steam?
- Which Age of Steam Map Is Hardest? Numbers from 246 Games
- Which Age of Steam Map Should You Play First?
- Survive Turn One and You Will Probably Finish
- Age of Steam, Steam, Railways of the World: One Game, Three Lineages
- Ireland: The Map Where the Cubes Emigrate
- Making the Bupyeong Underground Map: From a Guestbook Post to a Board in 42 Hours
- Rust Belt: Why the Default Map Is a Place That Had Not Rusted Yet
- Korea: The Map Where Cities Have No Colour and the Cheapest Link Is the First Railway