When to buy and play development cards
The three switches
Each switch is one mechanism on the otherwise unchanged depth-2 search, off by default. The first is a leaf change: played knights are worth half the flat weight when three or more from the largest army, the full weight at two away, 1.75 times at one away, and 1.25 times while holding it, and a held playable knight is credited with one roll of the production it would unblock from the robber's hex. The production a play unblocks was already in the baseline leaf: the afterstate of a knight play has the robber moved, so the production term credits it over the remaining rolls; the switch isolates the army-distance schedule and the explicit held-knight credit.
The second is a candidate rule: a development purchase is generated only when no road, settlement, or city is affordable within the next own turn at current production, using the leaf's own acquisition-time estimate. The third is a timing rule: main-phase knight plays exist only when the robber sits on this seat's best-producing hex, while the roll phase keeps the choice, so a held knight is spent on the before-the-roll unblock and not on an opportunistic main-phase robber move.
The measurements
Every cohort is 256 games in the engine arena, deterministic, each board played
once per rotation of the four slots, with an ETA and a fast builder beside the
two searches. The first five cohorts were registered as single-seating
contrasts, candidate in slot 0 against the control in slot 1. The
seating diagnosis then showed that two identical searches
in adjacent slots differ by +0.05 to +0.18 wins per game from turn order alone:
the seat directly before another acts first after three of the four rolls in a
round. Every contrast below is that size, so none of them is an effect. The
knight_play_value arm was re-registered as a swapped pair on boards 64 to
127, and the pair separates the effect from the term.
| Arm | Boards | Slot 0 | Slot 1 | Wins 0 / 1 | Contrast, slot 0 minus slot 1 (95% interval) |
|---|---|---|---|---|---|
knight_play_value | 0-63 | candidate | control | 128 / 91 | +0.145 (+0.050 to +0.240) |
knight_play_value | 64-127 | candidate | control | 110 / 91 | +0.074 (−0.021 to +0.170) |
knight_play_value | 64-127 | control | candidate | 113 / 96 | +0.066 (−0.022 to +0.155) |
buy_tempo | 0-63 | candidate | control | 109 / 98 | +0.043 (−0.066 to +0.152) |
hold_knight | 0-63 | candidate | control | 116 / 91 | +0.098 (+0.003 to +0.193) |
hold_knight | 64-127 | candidate | control | 112 / 95 | +0.066 (−0.020 to +0.153) |
The pair combines the two 64-127 contrasts: the effect is half their
difference, +0.004 (−0.061 to +0.069), and the seating term is half their
sum, +0.070 (+0.005 to +0.136), consistent with the +0.051 measured for
identical seats on these boards in the seating report. The buy_tempo and
hold_knight numbers are single-seating readings, each inside the seating
term, so they are consistent with zero rather than measured effects.
Development-card timing arms against the unchanged control
Measured evidenceScroll the chart horizontally to inspect all values.
Each point is one cohort’s slot-0-minus-slot-1 wins per game with its 95% interval over boards; single-seating points carry the turn-order term and the swapped-pair combination removes it.
Source: Engine-arena cohorts of 256 games on deterministic boards played once per rotation, the candidate and the unchanged depth-2 control in the named slots with an ETA and a fast builder. Runs ef72f172, 647d321b, 30038304 on boards 0-63 and e79ea358, f83b1214, 1d91dbfa on boards 64-127; the corrected point is half the difference of the two knight-value pair contrasts and the turn-order point half their sum.
View data table
| Series | Cohort | Wins per game, slot 0 minus slot 1 | Low | High |
|---|---|---|---|---|
| Single-seating contrast (slot 0 minus slot 1) | knight value, boards 0-63 | 0.1445 | 0.0495 | 0.2395 |
| Single-seating contrast (slot 0 minus slot 1) | knight value, boards 64-127 | 0.0742 | -0.0213 | 0.1698 |
| Single-seating contrast (slot 0 minus slot 1) | knight value, boards 64-127, seats swapped | 0.0664 | -0.0224 | 0.1552 |
| Single-seating contrast (slot 0 minus slot 1) | buy tempo, boards 0-63 | 0.043 | -0.0659 | 0.1519 |
| Single-seating contrast (slot 0 minus slot 1) | hold knight, boards 0-63 | 0.0977 | 0.0028 | 0.1926 |
| Single-seating contrast (slot 0 minus slot 1) | hold knight, boards 64-127 | 0.0664 | -0.0204 | 0.1532 |
| Swapped-pair combination | knight value, seating-corrected (boards 64-127) | 0.0039 | -0.0613 | 0.0691 |
| Swapped-pair combination | turn-order term measured by the pair | 0.0703 | 0.0051 | 0.1355 |
The mechanisms bite without winning
The diagnostics show the switches do what they claim, and that doing it does
not win. Per-game means for the candidate against the control; the
knight_play_value row pools both seatings of the pair, the others are
single-seating.
| Arm (boards) | Cards bought | Knights played | Army awards | First city turn |
|---|---|---|---|---|
knight_play_value (64-127 pair) | 2.63 / 2.57 | 1.26 / 1.19 | 0.18 / 0.16 | 29.4 / 29.2 |
buy_tempo (0-63) | 1.54 / 2.55 | 0.73 / 1.25 | 0.07 / 0.19 | 28.1 / 29.1 |
hold_knight (0-63) | 2.25 / 2.33 | 0.82 / 1.15 | 0.08 / 0.17 | 28.2 / 28.8 |
hold_knight (64-127) | 2.32 / 2.55 | 0.96 / 1.23 | 0.10 / 0.20 | 30.5 / 27.2 |
The tempo rule halves card purchases and advances the first city by a turn, and holding knights forgoes a third of the knight plays and half the army awards. The knight leaf barely moves any count, which is why its pair is so clean: the shaped schedule rarely outweighs what the search already prices. None of it separates from zero once the seating term is removed.
Limits
This is engine-arena evidence at depth 2 with the hand-written leaf, two
builders at the table, and one lineup; the protocol-arena baseline is now the
learned-tables leaf, which prices cards from self-play and may already encode
some of this timing. The screens that preceded the cohorts (16 boards each,
unregistered) read +0.16 to +0.19 and overstated everything, as screens at this
size do. The switches remain in the search, off by default, documented in
docs/expectimax.md.
Agent notes
Candidate and control seats are v2:{"depth":2,"samples":4,"scenarios":8,"inner_scenarios":4}
plus the named switch. Registrations and runs: 000e59d2 / ef72f172
(knight_play_value, boards 0-63), 0b22df5c / 647d321b (buy_tempo, 0-63),
119cbcf2 / 30038304 (hold_knight, 0-63), 20360d5d / e79ea358
(knight_play_value, 64-127), 8f739fd6 / f83b1214 (hold_knight, 64-127),
a6371eaf / 1d91dbfa (knight_play_value, 64-127, swapped seats). The swapped
pair's decision rule is in registration a6371eaf; per the seating report the
effect is half the difference of the two slot-0-minus-slot-1 contrasts and the
seating term half their sum, with the two independent intervals combined in
quadrature and halved. All runs used server commit 46578c0 (branch
research/development), which predates the rotating recipient order; the
seating report found the term unchanged by that fix. Screens ran on boards 0-15
and are kept under runs/screens-knight-timing/; they carry no evidential
weight. python3 analysis/knight_timing.py recomputes every number and the
plot asset from the retained run folders. The harness summary now aggregates
knights played, army awards, and the first city turn from the arena's per-game
records.