Settlers / Research

73 pages · Search titles and descriptions

↑ ↓ to navigate · Enter to open · Esc to closeLocal search
Play the game

Road blocking under the learned leaf

Road switches under the learned leaf

Measured evidence
-0.16-0.09-0.020.050.12block devblock confirmblock populationblock ext buildersblock ext populationgate devgate confirmgate populationSwitch and stageWins per game, switch minus controlno difference

Scroll the chart horizontally to inspect all values.

Tables leaf alone (95% interval)Quarter blend, hand 0.25 in both seats (95% interval)95% intervalno difference

Seating-corrected effect of each road switch per stage, under the tables alone and on the quarter blend.

Source: Engine-arena swapped pairs under expansion/roads-tables: the switch against the unchanged tables-leaf control, each half 64 deterministic seeds played once per rotation (256 games), seating-corrected as the per-seed half-difference of the two halves. Dev, confirm, and extension builders use the builders lineup; population stages seat a third tables search in slot 2. Run IDs are listed in the roads-tables report.

View data table
SeriesSwitch and stageWins per game, switch minus controlLowHigh
Tables leaf alone (95% interval)block dev-0.0078-0.01860.0029
Tables leaf alone (95% interval)block confirm0.002-0.00960.0135
Tables leaf alone (95% interval)block population0.002-0.00670.0106
Tables leaf alone (95% interval)gate dev-0.0195-0.06220.0232
Tables leaf alone (95% interval)gate confirm-0.0176-0.06630.0312
Tables leaf alone (95% interval)gate population-0.0234-0.05960.0127
Quarter blend, hand 0.25 in both seats (95% interval)block dev0.0273-0.01060.0653
Quarter blend, hand 0.25 in both seats (95% interval)block confirm0.0059-0.04880.0605
Quarter blend, hand 0.25 in both seats (95% interval)block population-0.0586-0.096-0.0212
Quarter blend, hand 0.25 in both seats (95% interval)block ext builders-0.0039-0.05120.0433
Quarter blend, hand 0.25 in both seats (95% interval)block ext population-0.0078-0.04560.0299
Quarter blend, hand 0.25 in both seats (95% interval)gate dev-0.0605-0.1072-0.0139
Quarter blend, hand 0.25 in both seats (95% interval)gate confirm-0.0586-0.1123-0.0049
Quarter blend, hand 0.25 in both seats (95% interval)gate population0.0215-0.02590.0689

The two switches and the two leaf contexts

Both switches are leaf weights with a candidate-generation part. With opponent_expansion set, the search charges the leading opponent's best reachable site, discounted by road distance, and the road shortlist gains the roads that raise that distance (v2/search.rs). With road_contention_gate set to 1, the longest-road contention credit, in the leaf and in the road shortlist, applies only while the seat ties or leads the table in brick plus lumber production. Under the tables alone (leaf.hand 0) the hand-written leaf terms are not evaluated, so only the shortlist part of each switch acts. The leaf parts were measured on top of the blended leaf, with "hand":0.25 in both the candidate and the control seat: the tables plus a quarter-strength hand-written leaf, the blend the leaf-blend study program found ahead of the tables alone. The weight values, 0.5 and 1.0, are the ones the earlier study registered.

The blend arms were first registered at hand:1.0. An unregistered screen by the leaf-blend agent then measured the full blend at −0.207 wins per game against the tables alone, far weaker, and the quarter blend at +0.074, so the ten full-blend registrations that had not started were withdrawn before running and re-registered at 0.25. One full-blend cohort was already running and completed; it is reported below as a single seating, not as evidence of the switch's effect.

The cohorts

Every cohort is one half of a swapped pair: 64 deterministic seeds played once per rotation (256 games), the candidate and the control in slots 0 and 1, half B swapping them, 6 threads per tournament. Stages 1 and 2 use the builders lineup (an ETA and a fast builder in slots 2 and 3, matching the hand-leaf cohorts); stage 3 and the extension's second pair use the population lineup (the plain tables baseline in slot 2 and ETA in slot 3). Stage 1 uses seeds 0 to 63, stages 2 and 3 use seeds 800 to 863, and the extension uses seeds 864 to 927. Every cohort completed 256 of 256 games.

opponent_expansion 0.5 under the tables alone (shortlist only):

StageHalfRunSlot 0 winsSlot 1 winsContrast (95% interval)
1 dev, buildersA4529da10-c5ab-49f8-be24-6bb5e7e317e1124101+0.090 (−0.006 to +0.186)
1 dev, buildersB86136b36-66e2-49a8-aa95-e5de0d802e6112699+0.105 (+0.014 to +0.197)
2 confirm, buildersA4629e513-2dac-459e-a018-e5faef0ed50a126104+0.086 (−0.021 to +0.192)
2 confirm, buildersB044327fe-d6f2-4c0e-8ae3-cfa7b0492ab5126105+0.082 (−0.024 to +0.188)
3 populationA36a7adfd-d1ce-49d3-a25f-ccec8f616c238191−0.039 (−0.127 to +0.048)
3 populationB4aa3d3a3-b395-4248-9837-ca3c09eb0ec18091−0.043 (−0.126 to +0.040)

road_contention_gate 1.0 under the tables alone (shortlist gating only):

StageHalfRunSlot 0 winsSlot 1 winsContrast (95% interval)
1 dev, buildersA10dead1d-160a-4c00-8b08-b1f77a5c75b3120104+0.063 (−0.034 to +0.159)
1 dev, buildersB86184ec9-2a1a-4944-bca0-c6a983829794126100+0.102 (+0.010 to +0.193)
2 confirm, buildersA82e6046b-1ba5-44d9-998c-fa4ec398244f117113+0.016 (−0.086 to +0.117)
2 confirm, buildersB773e53b5-26ce-42e4-8aa5-2565363f1f99122109+0.051 (−0.051 to +0.153)
3 populationAc29e9c07-6499-464c-9cb7-4aa7c090c1597694−0.070 (−0.159 to +0.019)
3 populationBad9a07b9-939c-49c4-99d2-df93b7b51b477884−0.023 (−0.109 to +0.062)

opponent_expansion 0.5 on the 0.25 blend (shortlist plus leaf term):

StageHalfRunSlot 0 winsSlot 1 winsContrast (95% interval)
1 dev, buildersAf9113c62-9c89-4095-9e81-cbb6c06d5dc014094+0.180 (+0.086 to +0.273)
1 dev, buildersBba368081-2db1-4998-9e81-902ef7a7bace12997+0.125 (+0.023 to +0.227)
2 confirm, buildersAc07b2268-3e6b-4055-93f1-bc6405019ca0125108+0.066 (−0.036 to +0.169)
2 confirm, buildersB3fb6583b-bc5c-4b8e-a19e-c62cf6c8f650122108+0.055 (−0.054 to +0.164)
3 populationAbd42145a-ca36-457b-954b-46c2980277878885+0.012 (−0.075 to +0.098)
3 populationBf95c0335-c77f-4d94-8026-b05cb06e855c10370+0.129 (+0.039 to +0.219)
4 ext, buildersA90d394ae-fc62-4426-aca0-5f04bd54f2a6131104+0.105 (−0.001 to +0.212)
4 ext, buildersB4e5d2807-1875-431f-b3ea-60a88f1ed2d912899+0.113 (+0.015 to +0.212)
4 ext, populationA66a398f5-9b69-442f-84f3-fd1fa219fd468479+0.020 (−0.071 to +0.110)
4 ext, populationBff3fe1b1-e62e-4271-8c35-4bb44e07764f8980+0.035 (−0.049 to +0.120)

road_contention_gate 1.0 on the 0.25 blend (shortlist gating plus leaf term):

StageHalfRunSlot 0 winsSlot 1 winsContrast (95% interval)
1 dev, buildersAeaec0233-a70b-4af4-8346-604a003e8f8c122109+0.051 (−0.046 to +0.147)
1 dev, buildersB160505ec-d7fb-4c53-b8a0-59f6ecccad2213894+0.172 (+0.083 to +0.260)
2 confirm, buildersA8d3680d8-d891-41be-a3e1-ca1ec203e7b2116115+0.004 (−0.115 to +0.123)
2 confirm, buildersB79e0863d-47ac-47c4-adc2-2ef8b800d544131100+0.121 (+0.009 to +0.233)
3 populationA4425d52b-8a9b-49f9-9c0d-1eecc7c4edb49281+0.043 (−0.053 to +0.139)
3 populationB5b51b4e0-633d-43ac-bf47-59d5ccd532e085850.000 (−0.089 to +0.089)

The one full-blend cohort that was already running when the blend moved to 0.25, stage 1 half A at hand:1.0 (run 4af53f81-6e2b-4a10-bdff-26fc68d192c3, experiment 661b57ce-4262-40db-ab34-c2a84d6d5960), finished with the candidate ahead 106 to 96, a single-seating contrast of +0.039 (−0.066 to +0.144). Its partner registration was withdrawn, so it has no swapped half and carries the seating term unmeasured.

Seating-corrected effects

The effect of a switch is the per-seed half-difference of the two halves' slot-0-minus-slot-1 contrasts and the seating term their half-sum (analysis/seating_pair.py). Per stage:

ArmStage 1 devStage 2 confirmStage 3 populationStage 4 extension
opponent_expansion, tables−0.008 (−0.019 to +0.003)+0.002 (−0.010 to +0.014)+0.002 (−0.007 to +0.011)not triggered
road_contention_gate, tables−0.020 (−0.062 to +0.023)−0.018 (−0.066 to +0.031)−0.023 (−0.060 to +0.013)not triggered
opponent_expansion, blend+0.027 (−0.011 to +0.065)+0.006 (−0.049 to +0.061)−0.059 (−0.096 to −0.021)builders −0.004 (−0.051 to +0.043), population −0.008 (−0.046 to +0.030)
road_contention_gate, blend−0.061 (−0.107 to −0.014)−0.059 (−0.112 to −0.005)+0.022 (−0.026 to +0.069)not triggered

After-the-fact pooling over stages: opponent_expansion under the tables is −0.003 (−0.011 to +0.005) over the 128 builders seeds and −0.001 (−0.007 to +0.005) over all 192 boards; on the blend it is +0.010 (−0.017 to +0.037) over the 192 builders seeds (the extension fired because the 128-seed read of +0.017 had an interval reaching −0.017, inside the 0.03 gate) and −0.033 (−0.060 to −0.006) over the 128 population seeds. road_contention_gate under the tables is −0.019 (−0.051 to +0.014) over the builders seeds and −0.020 (−0.045 to +0.004) over all 192 boards; on the blend it is −0.060 (−0.095 to −0.024) over the builders seeds, refuted, with the population stage at +0.022 (−0.026 to +0.069).

Measured seating terms sit between −0.047 and +0.152 per pair, largest under the blend in the builders lineup, matching the standing diagnosis that adjacent searches race. The stage-3 pairs, where a third search sits between the contestants in strength but not in seat order, show the term near zero or negative (−0.041 and −0.047 under the tables).

Comparison with the hand-written leaf

Under the hand-written leaf the corrected effects were +0.008 (−0.053 to +0.069) for the blocking weight and −0.004 (−0.061 to +0.053) for the gate on boards 64 to 127. The single-seating development contrasts on the same boards 0 to 63 as stage 1 here were +0.168 and +0.113; under the tables the same orientation gave +0.090 and +0.063, and under the blend +0.180 and +0.051, all carrying their pair's seating term (+0.098, +0.082, +0.152, +0.111). Neither leaf shows a real effect of the blocking weight. The gate differs by context: inert under the hand-written leaf and under the tables alone, but a measurable loss under the blend, where its leaf term is live at strength and the gated seat gives up award races it would otherwise contest.

What the switches did to the board

Diagnostics pool each arm's two halves per stage; candidate first, control second. Roads built per game barely move anywhere (5.2 to 5.7 in both seats), and opponent_expansion barely finds blocking roads to build: 0.04 to 0.08 per game against the control's 0.02 to 0.05, with denied-site value near zero. The learned leaf already prices expansion pressure, so the shortlist's extra candidates change almost nothing. The gate does exactly what it says: the gated seat holds the longest-road award at game end in 38% of games against the control's 53% on the blended development boards (42% against 50% on the confirmation boards, 29% against 35% in the population stage), builds the same number of roads, and loses the points the award and the contested races were worth. Sites lost stay within 0.05 per game between the seats in every arm (1.7 to 1.9), and settlements built move by hundredths at most.

Decision cost is the blocking weight's other price: the candidate averages about 14% more per decision than the control under the tables alone (the shortlist part) and about 30% more under the blend, where the leaf term runs the opponent reach walk at every leaf. The gate is free or slightly cheaper, since it removes candidates. Absolute decision times in these cohorts are inflated by a heavily shared machine; the ratios within each run are the fair comparison.

What could still be wrong

Everything here is engine-arena development tier on deterministic tapes; no protocol cohort was run, and the opponents never adjust beyond their fixed policies. The 0.25 blend choice rests on another agent's unregistered screen, not a registered cohort. Weight values other than 0.5 and 1.0 were not tried, so a weaker gate could cost less; the interval under the blend says the registered value is harmful, not that every value would be. The population lineup's third search is the plain tables baseline, and the blocking weight's refutation there (−0.033 pooled, after the fact) comes from 128 seeds in one such table. Decision-time ratios are measured under a machine shared with nine other agents and are noisy, though both seats of a pair share the same load. The hand-1.0 half-A cohort is a single seating and says nothing on its own.

What this means for the browser

Do not enable either switch. The browser build runs the hand-written leaf at depth 3 under a one-second budget, and under that leaf both switches already measured zero (+0.008 and −0.004, intervals crossing zero). This study adds that under the learned tables the blocking shortlist is also worth nothing (−0.001 pooled over 192 boards), that the blocking leaf term on the blend is worth nothing against builders (+0.010 over 192 seeds) and is refuted in the population lineup, and that the gate's leaf term is refuted under the blend at −0.060. Cost decides any remaining doubt for the blocking weight: about 30% more decision time under the blend and about a third more under the hand-written leaf (314 ms against 232 ms per decision in the earlier study), both over the 25% bound, for an effect that is zero. The gate is free but harmful where it acts. Neither switch transfers.

Agent notes

Implementation: the switches are weights.opponent_expansion and weights.road_contention_gate in crates/expectimax/src/v2 (leaf terms in leaf.rs, road-shortlist parts in search.rs), documented in the server's docs/expectimax.md under "Leaf". No server change was needed: both switches behaved sanely under the tables leaf. Seats: control v2:{"depth":2,"leaf":{"tables":"/home/keshav/settlers/research/artifacts/ntuple/hex-portfolio-main.bin"}}, tables-only candidates add "weights":{"opponent_expansion":0.5} or "weights":{"road_contention_gate":1.0}, blend candidates and controls add "hand":0.25 inside the leaf object. Lineups: builders (slots 2 and 3 eta, fast) and population (slot 2 the tables baseline, slot 3 eta).

Reproduction: python3 -m harness.engine run EXPERIMENT --threads 6 in a research checkout with SETTLERS_SERVER_DIR pointing at a server build of settlers-arena. Stage 1 pairs (seeds 0-63, builders): experiments 0b788486-7d5b-4d4c-a5c9-3989d6317337 / b8549250-edc9-4f21-a4b7-96fbaafd4782 (blocking, tables), 25c0c3ef-acce-4275-aa62-58fd11bba45e / 0b2dc424-752f-422c-94a9-3b91c60838dc (gate, tables), 20520824-b14b-48a2-94d2-468b77fa4d3a / 19dcce6e-a687-42fe-9652-4ebd7e21b169 (blocking, blend), 849b3f9f-e311-41a9-8462-ca01898eda3d / 95a95d6d-de73-400b-bf2c-f999c4c9f04c (gate, blend). Stage 2 (seeds 800-863, builders): 7159bd47-2352-49de-9dd2-497f8a3247a0 / f10f72f3-3e38-4ed2-bb13-58283d529243, d8769e27-605a-4c7c-880a-bf2adaaed80e / dba26122-eb55-425a-877a-510ccd1fbc35, ab1261cd-a9b2-4828-8002-3706e6db088b / 8866aa31-389c-419c-b031-3040f00bb8d7, 4915a44c-ca93-45cf-86f3-31e11c282d42 / a8c21c94-a6d6-4b1b-9344-274989d58976. Stage 3 (seeds 800-863, population): 82629df7-0f8a-4006-a042-60d0a6ebd16c / 8e3cc677-7fcf-4a2c-842c-e663cc626632, 5e8dd398-7515-4117-b0e0-bd0ab50e2a57 / 1af5542d-6c6d-4334-a282-a51d481449a0, 0bf9d6ee-2cf7-4928-b3d1-0a7cc79799df / 9c0cf8af-99c2-42ab-ba96-e51b9aa6d3bd, 52a94b11-6ccc-4e9b-9396-6bb01d581011 / a94f59d0-72bf-4245-af2b-2a3e1c7a7acc. Stage 4 extension (seeds 864-927): dd8dfd4f-9922-4621-b175-5c52db0df335 / 85c4582f-dd60-4705-a15b-7e0ec9aa757f (builders), ddf036cd-b4b2-49cd-9473-aff82f0a336e / 38d6d46d-d777-45fb-87d6-81972cf3f570 (population). The ten withdrawn hand:1.0 registrations are listed in the 2026-09-11 log. Analysis: analysis/roads_tables.py (per-pair effects and diagnostics), analysis/roads_tables_pool.py (after-the-fact pooling), analysis/roads_tables_assets.py (the plot above from the retained runs). Effects are computed from runs/<id>/games.jsonl; archive receipts for every run are under records/artifacts/.

All studies · Expansion and races · Experiment log