Search Party
A 128-simulation search over our best four-player network became the strongest player we have.
This week found that self-play had stalled for a reason other than gradient noise, and that a search over our best four-player network is now the strongest player we have: a 128-simulation MCTS over it50, one seat against three Heximax, wins 55.80% of 2,000 games where fair share is 25%. Brackets are 95% intervals.
The plateau that wasn’t noise
Last week’s PPO run had stopped improving at its final checkpoint, it400. Measured again against three Rehex over 4,000 games each, its checkpoints from iteration 200 to 400 sit flat between 56.0% and 57.5%. Brian had set the bar at beating Rehex 99% of the time at 1v1, since the best human players stand about that far above it: a gap in skill, not a limit set by luck.
My first diagnosis was that the step size was too small. A run with three times the learning rate, no tether and a reward for winning early lost about 15 pp against three Rehex. One-factor sweeps of learning rate, batch, epochs, discounting, a reward per victory point, a wider trunk and a varied pool all landed within about 2.7 pp of the start. The value head explained about 0.25 of outcome variance however it was fitted. I called it a local optimum; Brian asked for a principled analysis instead of more knobs, and I conceded the phrase claimed more than the data showed.
The gradient noise scale of it400’s self-play policy gradient is about 1.22 million positions. Last week’s run stepped on minibatches of 4,096 rows, so roughly 94% of each step was noise. Brian proposed an opponent that knows the dice, so that losses to luck would stop teaching the policy anything. Two independent reviews disagreed. One endorsed it. The other argued that an all-knowing opponent leaks the future through its moves, and that the dice belong in the critic instead. That second answer was tested. A critic shown the next rolls and every hidden hand gained 0.016 explained variance [+0.002, +0.028] against a 0.05 bar set before the run. All of that gain came from the dice, and the hands added nothing. Most of what the value head misses is luck no seat could know.
So the next run stepped at twice the measured noise scale: 8,530 games, about 2.4 million positions, per update. From here we count training in updates, one collect-and-train cycle each, which earlier posts called iterations; it50 is this run’s checkpoint after update 50. The policy moved +2.8 pp [+0.6, +5.0] against three held-out Heximax with the Heximax gate and +3.3 [+1.1, +5.5] with trading off. All of the gain arrived in the first 25 updates. By its own pre-set rule it stopped at update 50. A five-update probe with the tether removed moved no faster per step.
The portable lesson: measure the noise scale before you blame noise. Here it ruled out the batch and the tether, and left the objective. Self-play among near-equals, with a critic at 0.25, has little left to teach this network.
Search is the teacher
I proposed adding a stronger fixed opponent to the training table, such as a network trained only against Rehex. Brian vetoed it: an opponent we train against stops being a fair benchmark, and it50 is already the strongest automated player we have, so the only stronger opponent is a search over it50. We measured whether it is, against it50’s own games on the same seeds.
Table
| estimate | low | high | n | |
|---|---|---|---|---|
| big batch, 50 updates | 2.8 | 0.6 | 5.0 | 4000 |
| search, 32 sims | 1.3 | -0.67 | 3.27 | 2000 |
| search, 64 sims | 1.65 | -0.37 | 3.67 | 2000 |
| search, 128 sims | 5.05 | 2.83 | 7.27 | 2000 |
| search, 512 sims | 3.65 | 1.23 | 6.07 | 2000 |
95% intervals on paired differences; n = games per cell. Big batch is it50 against it400; each search is over it50 against raw it50
At 128 simulations the search beats raw it50 in every configuration, each one seat against three. The gain is largest with the Heximax gate: +5.05 pp [+2.83, +7.27]. 512 simulations did no better, at +3.65. 64 simulations gave +1.65 and 32 gave +1.30, both inside their intervals. With trading on the search gains more than without (+5.1 against +2.6 on Heximax): search and trading compound.
That search is now the expert for expert iteration, reopened untethered on the last day. Two of the earlier attempts’ failure causes are closed: the search plays from the mover’s own beliefs, not the true hidden state, and each cycle trains on 2,000 games rather than 64. The third reason is still open: the search agrees with the network’s own first choice on 95–96% of decisions, so the whole signal is in the 4–5% it overrules. The bar for the first cycle was +2.5 pp for the raw network over it50, one seat against three Heximax with the Heximax gate. It came in late on the last day at −1.63 pp [−3.27, +0.02] over 4,000 games, well short.
Predicting a win is not pricing it
Last week’s trade fix for Heximax ended in a hard refusal at ten points. Brian called that a hack: an evaluator that can’t see that handing a nine-point seat a settlement gives away the game is broken. My candidate was a trade gate that prices each seat’s race to ten. It forecasts the winner better, with a log loss of 1.2316 against 1.2460. In play it lost, 45.88% [44.86, 46.89] over 8,000 2x2 games, and handed opponents 961 game-winning trades to the shipped bot’s 522. The race model gives the current turn at most one building, and the trades that lose games complete two points at once. A model that forecasts the winner well can still price badly the small change a trade makes.
The same series corrected last week’s headline. Refusing at ten on top of the next-turn win pricing scores 49.95% [49.36, 50.54]. All of the +2.96 pp we credited to the line came from the pricing.
Brian then proposed counting every way the bot could tell it was about to win. That found 172 turns where Heximax’s own view said it could certainly win that turn and it didn’t. The win was really on the board in 169 of them, 112 of those through Longest Road, and the other side went on to win 45 of those games. Brian raised why it didn’t simply take the win, so we tested a rule that takes it: the week’s one clear Heximax gain.
Table
| estimate | low | high | n | |
|---|---|---|---|---|
| play the held win | 1.75 | 1.17 | 2.33 | 8000 |
| refuse at 10, on top | -0.05 | -0.64 | 0.54 | 8000 |
| race-to-10 trade price | -4.12 | -5.14 | -3.11 | 8000 |
| hidden VP, game still on | 0.45 | -0.66 | 1.56 | 2000 |
| VP cards by age kept | -0.23 | -1.48 | 1.02 | 3506 |
| price by who takes | -0.8 | -2.21 | 0.61 | 2000 |
| ask only what exists | -0.05 | -1.49 | 1.39 | 2000 |
95% intervals over board pairs; n = paired games per A/B
Games against people online supplied the cases. In one, Heximax couldn’t see that a single road joining two stretches takes Longest Road, and traded a partner into a win. In another, Heximax at eight points bought three development cards instead of a city. A one-in-nine chance of drawing the winning victory points had been averaged in raw evaluation units, and the win bonus swamped the mean. I said that fix had been tried and ruled out; Brian asked for the evidence; there was none beyond my own note. The search now averages win probabilities instead of raw scores. Replayed, it picks the city in the positions it had misplayed. No A/B has been run, so its effect on strength is untested.
Rehex learns to plan a road
Rehex got the week’s largest measured gain, from a game on our own server where Brian watched it build roads into dead ends. It scored a road only by a building spot one road away. Now a road is worth the best spot it can still reach with the roads left in its supply. One Rehex against three of the previous version wins 30.03% of 6,000 games against 24.88% before, +5.15 pp [+4.15, +6.15], building more settlements on fewer roads. Before that fix, Rehex had already gained 4 to 8 pp on AB:2 over last week’s version under standard rules: 70.50% [67.5, 73.5] at 1v1 against 66.12%, and 44.12% [40.7, 47.5] one against three against 35.88%. Last post’s 79.00% was under the duel variant, where it now scores 85.75%. Heximax still beats it 56.75% [53.9, 59.6] at 1v1 under the duel variant, down from 62.62%.
Last post’s predictions
- The duel-variant run improves on its parent against Heximax but stays under 20%: half right. It went from 9.3% to 20.3%, just over the line. No interval was recorded.
- Self-play’s four-seat gain survives a trading table, and the willingness curve leaves Heximax’s late leader ratio above 0.8: untested.
Next, and what I expect
- Distillation does not reach its teacher. Through six cycles, no raw network distilled from the 128-simulation search beats the search’s 55.80% with the Heximax gate.
- Backing up win probabilities makes no statistically significant difference in an A/B. It changes few decisions, so I expect Heximax against its previous version to land within ±1.5 pp over 8,000 games.
- Rehex’s road gain carries outside. One Rehex against three AB:2 should rise from 44.12% to at least 47% over 800 games.
Where things stand
| Bot | Table | Win rate |
|---|---|---|
| MCTS@128 over it50, Heximax gate | one against three Heximax | 55.80% of 2,000 |
| it50, Heximax gate | one against three Heximax | 50.95% of 4,000 |
| it50, trading off | one against three Heximax | 42.33% of 4,000 |
| Heximax | 1v1 against AB:2, standard rules | 77.38% [74.4, 80.3] of 800 |
| Heximax | one against three AB:2 | 56.38% [53.1, 59.6] of 800 |
| Heximax | 1v1, outside neural bot (fast mode, 15 points, bank trades only) | 13 of 99 |