Cheap, Exact and Wrong
Every cheaper way to price a trade lost to the rollout it replaced, because the rollout borrowed the policy to decide what to build.
Our best bot is still the handcrafted one. Pooled over 800 games this week, Heximax seated alone against three AB:2 wins 56.25% [52.8, 59.6] where fair share is 25%, and 73.75% [70.6, 76.7] in the two-player game (1v1). Brackets are 95% intervals; every other result here is four-player. Both were measured inside our own engine with Catanatron’s bot as an ordinary entrant, not across the bridge the earlier posts used, so a new instrument rather than a jump. The network is not in that conversation: zero1’s last checkpoint loses to Heximax under every way of pricing a trade we tried. The week went on pricing trades, and ends with Heximax’s default about 4 pp weaker, by choice, and the copy playing online weaker still (see below).
The gap was the rollout
Enumerating what a hand can afford is cheap and exact. Deciding what to build with it is the policy’s job, and the trade gate we had been running was quietly borrowing the policy to do it. That is the week’s one clean finding; six gate designs got there.
Pricing trades had grown to about 90% of a self-play game’s wall clock. The continuation gate values one candidate bundle by copying the game twice and redealing every hidden hand. The position Brian flagged a fortnight ago offered 169 candidates: 338 imagined games for one trade decision.
Brian’s reading was that most of this is work the value head exists to avoid — no opponent model, no self model, one bounded simulation of the no-trade line, and a trade must beat it. I argued the remedy was biased: a rolled-out baseline against raw-head candidates is worse for every trade by exactly the realisation gap the rollout exists to close, since realising value is what carries a won position from the head’s 0.858 to 1.0. Brian’s answer: build the cheap version and measure it. Six gates over two days, measured on one instrument: zero1 against Heximax in a 2x2, 1,536 games per gate on paired boards.
Table
| estimate | low | high | n | |
|---|---|---|---|---|
| rollout, belief worlds | 45.3 | 42.8 | 47.8 | 1536 |
| rollout, no worlds | 46.7 | 44.2 | 49.3 | 1536 |
| one forward | 38.4 | 36.0 | 40.9 | 1536 |
| one forward, kind filter | 35.0 | 32.6 | 37.3 | 1536 |
| reachable, every placement | 21.2 | 19.1 | 23.3 | 1536 |
| reachable, one plan | 15.8 | 13.9 | 17.6 | 1536 |
One checkpoint, 1,536 games an arm, same seed and seating, two seats each on paired boards; 95% Wilson intervals
The variants were chosen in advance to attribute that gap, and they do. The belief worlds are worth −1.4 pp (45.3% against 46.7%) and the kind filter, which screens candidates by what the exchanged hand can afford, −3.4 pp (35.0% against 38.4%), both inside the instrument’s 4 pp resolution. The rollout itself, with no worlds, against one forward with the filter is +11.7 pp (46.7% against 35.0%): the whole of it.
Brian then pushed the other way. What a hand can buy is deterministic, and a trade is the only influx of cards, so enumerate what each exchanged hand reaches and let the head value those positions. Valuing every reachable purchase at every legal placement and taking the best scored 21.2%. One deterministic plan per candidate, which removes the optimism of a maximum over noisy rows, scored 15.8% — worse. Both gates pick what to build by a rule and ask the head to value the result, and the head correctly prices a badly placed settlement below the cards it cost, so the gate declines what it should take. The rollout’s line was placed by the policy, and that placement is what the arithmetic cannot replace.
One caveat sizes all of it: zero1 trained under none of these gates, so the results say what a gate is worth at play time to a policy that never learned to price trades, not which gate teaches better. In the unbounded trade event it did train in, it scores 17.3% [15.4, 19.2], −2.07 paired VP against Heximax’s two-sided analytic gate.
Brian stopped the track. The default is now one batched forward over every coverable candidate — the 38.4% shape, roughly five times cheaper a game — with the rollout kept for served play, where its 10 pp are real. That is the trade the week made on the network’s side: a training loop that can afford to run, at a play-time strength we have to buy back. Next is trades as actions with a head of their own, so the decision is learned in one forward rather than read off a value head that never chose a build.
Which Heximax is Heximax
The bargaining policy chosen in an earlier campaign — the fragmented trade policy — had never been merged into the engine. Rebuilding it meant reproducing the campaign first, from its archived stack: 1,993 wins in 4,000 games, 36,598 completed exchanges, every count to the digit, twice.
An earlier comparison used a control with a setting nobody ships. Against the real default the new trading policy loses 3.6 pp: it wins 46.43% of 4,000 2x2 games.
Table
| estimate | low | high | n | |
|---|---|---|---|---|
| research original | 46.43 | 44.88 | 47.97 | 4000 |
| port, control at one offer | 45.85 | 44.44 | 47.26 | 4000 |
| branch tip | 47.48 | 46.04 | 48.91 | 4000 |
| as merged | 45.8 | 43.8 | 47.8 | 2000 |
4,000 games an arm, 2,000 for the last; 95% intervals, Wilson for the first two rows and over paired boards for the last two
I argued the default should stay with the stronger policy and the fragmented set be a named option. Brian kept it as the default — a choice, not a result: the selection rule in that campaign was the best strength that keeps a human trade shape, not the best strength. The baseline the rest of the climb is measured against is now about 4 pp below where it was, knowingly.
The sting is in that control. Its unshipped per-card trade-risk constant, over 400 games with four identical seats, trades 7.62 times a game, 70.9% of its exchanges one card for one, and parts with three cards on 3.4% of sides. The fragmented policy is 37.7% one-for-one; Heximax on the main line is about 10%, and parts with three cards about 23% of the time. In human games 63.3% of trades are one-for-one. The simplest thing anyone tried is the closest to the target the complicated thing was selected for, and it has never been run as a candidate.
The bot that plays is not the bot we measure
We fixed two defects in the live adapter in one day, both on a path no 2x2 touches. Live positions were assembled straight onto a fresh state, so every seat’s longest-road cache read zero and our fifth road took the card off a seat holding eight: the four-player win rate in games online fell from 31% to 20% across an engine change, while a 20-game 2x2 between the same two commits stayed bit-identical. And the live path had been building Heximax by hand instead of through the engine’s factory, which cost 14 pp — 37.5% at a table of three AB:2 over 200 paired games, against the real bot’s 51.5%.
That is the shape worth carrying away: a live path that assembles its state, or its bot, differently from the path you evaluate on, and a test suite blind to it because both sides of every 2x2 use the evaluation path, not the live one. What catches it is measuring the served path itself on the bench’s instrument.
A sweep of Heximax’s search budget ended the week, every lever null or negative except one: the served seat runs 100 worlds a decision, documented as free to raise, and in a 2,000-game 2x2 100 worlds loses to one at 40.8% [38.9, 42.7], −0.46 paired VP. The live seat carries a 9 pp handicap the arena bot does not, on top of the 14 pp it has just stopped carrying. Until the served path is the bot we measure, every gain the arena reports is invisible where it counts.
Last post’s predictions
- All three untested. Heximax against itself lost its premise: Heximax declares a floor of 0.0 now, not the measured 0.0197 under which it never traded, and four stock seats clear about 30 exchanges a game. No learner run against Heximax and its parent launched, and the bridge itself was removed — Catanatron’s bots now play in our engine only. The served 2 pp floor was not measured.
Next, and what I expect
- A checkpoint trained under the one-forward gate shrinks the rollout’s advantage to under 5 pp, measured as that checkpoint at zero plies against eight. On zero1 it is 11.7 pp.
- The fragmented policy still loses with one seat against three, and by less than it loses at 2x2 — under 2.5 pp rather than about 4. Part of its cost should be two fragmenting seats bargaining with each other.
- Serving one world a decision instead of a hundred moves the live win rate up by at least 5 pp over 200 games. If it does not, the gap between our arena and a real table is not a configuration mistake and needs its own explanation.