Settlers / Research

73 pages · Search titles and descriptions

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

A planning defect, a protocol cohort, and new exhibits

The protocol confirmation of the frozen depth-3 candidate, e4949ebe-8132-4428-aae9-37ae1e0c3748, completed all 80 games with twelve matches in flight: 31 wins (38.8%) against the compared ETA slot's 25 (31.2%), a 7.5-point gap at p = 0.25, short of the registered rule. The protocol report records it.

Measuring the game tree exposed a defect in expectimax-v2: after any non-ending action, the turn enumerator reused the root's restricting action as its own action list, so it re-applied that action, failed, and returned nothing. Non-ending root actions were valued without the opponents' round and inner turns collapsed to ending the turn. The fix limits the restriction to the root step. A second problem surfaced with the fix: the flattened afterstate list averaged over the player's own alternatives instead of taking the best one, and the correct enumeration was expensive. The planner is now a recursion that takes the maximum over own actions and the expectation over chance outcomes with a transposition memo, ends the turn first among candidates, and narrows later steps to the best few actions. Every earlier v2 cohort and the structure measurement used the defective search; their records stand as recorded, and the corrected search is a new candidate with its own cohorts.

Registered cohort d5eb6354-2b59-4ca4-8ab0-fefee3690cb3, run a0c91849-4abf-4f1c-9de1-6255e1ef73e6, measured the corrected search at depth 2 on the same 64 boards as before: 129 of 256 slot-games (50.4%) against the compared ETA slot's 20.3%, paired contrast +0.301 (interval +0.190 to +0.412), at 87 ms per decision. The corrected search report records it. Cohort 11cb5a59-5490-4a78-96cf-2332d8364cf2, run 156f77ff-b781-42d6-b6e0-999bdf9506fe, put depth 3 under a 1.5 s budget on the same boards: 147 of 256 (57.4%) against 16.0%, paired contrast +0.414 (interval +0.327 to +0.502), 360 ms per decision. Depth now pays. Cohort 8d5b24cd-e6ed-4a04-87c8-c1d0db7b747c, run 436f4740-c7a5-48f2-9e35-9f1ce92c3af5, seated depth 2 against the frozen reference with an ETA and a fast builder: 46.9% against the reference's 13.3%, paired contrast +0.336 (interval +0.249 to +0.423). A corrected depth-3 candidate is frozen as expectimax-v2-plan and registered as protocol experiment 49427921-feaf-4291-a5bf-79500acdcae7.

Structure run fcd6c0c1-af77-4d2f-b43d-5c598f8d5ff5 measured the tree with the corrected search: median legal actions of 8 in the main phase and 22 for the robber, main-phase width rising from 2 to 9 through a game, and search cost multiplying by four to six per planned turn (medians of 15, 92, 465 and 1654 ms at depths 1 to 4). The tree-structure report has the charts and a term-by-term decision exhibit. An earlier structure run with the defective search was discarded before publication.

The protocol confirmation of the corrected candidate, 49427921-feaf-4291-a5bf-79500acdcae7, run 0df1bae1-1928-4bcc-8fb6-a5519621bb76, completed 80 of 80 games with twelve in flight and no timeout moves: 47 wins (58.8%) against the compared ETA slot's 11 (13.8%), a 45-point gap at p = 1.0 × 10⁻⁶. The registered rule is met and the protocol report makes expectimax-v2-plan the protocol-arena baseline.

The design package gained interval and bar plots, a decision-trace exhibit, and three animated search figures; the notebook validators accept them.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Deterministic mode

The engine gained a deterministic setting: the k-th roll, k-th theft, and k-th development draw are read from seed-derived tapes indexed by count, so two policies on one seed face the same luck in the same order whatever they do in between. Ordinary games keep the shared stream, and the board and opening seat are the same in both modes for a seed. An agent-only research table may pin its seed index at creation; seats never receive it. Both harness tiers register deterministic paired cohorts: just engine-register --deterministic and just register --seeds A-B, whose records report a paired seed contrast.

Protocol smoke 7d654352-7a65-4a1d-935f-136ce1b23ae8 checked the tape through the server. Its first run, f3b1fe74-aef9-46d0-8e35-54b9ee6695a9, is invalid: every game was rejected at creation because the running server binary predated the setting. After rebuilding and restarting, run 3d50d380-0b87-42c3-82d5-d30666933fe6 completed all 8 games, and on each seed all four rotations rolled the same totals by index over their shared 68 and 66 rolls. These are plumbing checks, not strength evidence.

Ablations, round one

Eighteen one-change arms ran on 64 deterministic boards each, treatment in slot 0 against the unchanged depth-2 control in slot 1 with an ETA and a fast builder. Lookahead and dice scenarios are decisive; every single leaf term and style slider is within 0.1 wins per game of the control with an interval that crosses zero. The ablation report has the forest plot and the method. Six borderline arms are registered again on 192 fresh seeds (64 to 255) and a reciprocity arm (cba5c2a6-9a7c-414c-81f8-b9dc8ef8f4a7) is registered under reputation/reciprocity; their runs are recorded below when they complete.

StudyRunTreatment winsControl winsContrast (95% interval)
opening/search-placement47db0437-fcc8-4bce-be06-57c2caadf5f98796-0.035 (-0.133 to +0.062)
tempo/acquisition-time-termd4472a6a-7480-43c5-a045-bd23cc41f94410589+0.062 (-0.039 to +0.164)
expansion/site-value-terms52198182-e594-45d0-b71a-71c6f90835e487106-0.074 (-0.169 to +0.021)
ports/port-value-terms03b1a60e-01fb-4a0f-85a6-db7c83a984729792+0.020 (-0.086 to +0.125)
beliefs/event-knowledge165fc976-0cb1-40af-a17b-14911bbdcc8978101-0.090 (-0.201 to +0.021)
beliefs/sampled-worldse5e7218e-5a00-4689-842d-01228f1bca1989102-0.051 (-0.166 to +0.064)
search/lookahead7586d662-410e-413b-a6d6-b1f8386ff39e50133-0.324 (-0.413 to -0.235)
search/scenario-count917f7901-15a9-410f-b8f5-314a8041ab5b27132-0.410 (-0.489 to -0.331)
risk/discard-exposure0b9e852a-cc87-4d37-8694-ef01545b677e9096-0.023 (-0.134 to +0.087)
risk/risk-appetited611102f-d5c0-4828-9131-1e746844ff6588104-0.062 (-0.175 to +0.050)
development/card-terms3fdce968-dd9a-4bba-9698-79bee17b6d2891100-0.035 (-0.144 to +0.074)
development/card-appetitee2b45621-eead-4c98-ade1-8113ced106f59890+0.031 (-0.070 to +0.132)
bargaining/offer-policy0e7068ca-536d-4c35-a77c-e37f551196398390-0.027 (-0.132 to +0.077)
bargaining/trade-openness7ff05cd9-d1d7-477a-8386-f49ddefba3be80104-0.094 (-0.192 to +0.005)
containment/opponent-terms49df8c4e-96e9-497f-80ce-d8dd9ed193029696+0.000 (-0.105 to +0.105)
containment/aggressionc4427fe6-e074-4598-83cc-aa2e4a0dc2839994+0.020 (-0.084 to +0.123)
adaptation/opponent-model3807570d-117b-4b6f-b0c4-86b77767b6f58890-0.008 (-0.111 to +0.096)
reputation/reciprocity7c17e2c7-a140-4fe5-b055-68bdea33ea609098-0.031 (-0.125 to +0.063)
population/cross-play729fc30f-edaa-4120-829d-125e68825e66builder 66, raider 59, gambler 69, trader 62 of 256four presets, no dominant style

Browser timing: on 40 sampled main-phase positions the WASM build runs 1.26 to 1.38 times slower than native by depth (asset search-cost-wasm), so a one-second browser budget usually completes depth 3.

Ablations, confirmation on fresh seeds

The six borderline arms ran again on seeds 64 to 255 (768 games each). Event knowledge is supported; the rest show no effect or stay unresolved.

StudyRunTreatment winsControl winsContrast (95% interval)
tempo/acquisition-time-termb4d274b1-d42c-44cb-bb54-25bfa331f346307277+0.039 (95% interval -0.021 to +0.099)
expansion/site-value-terms0ea66d80-04a1-470f-b6dc-384cf6f1dde6275287-0.016 (95% interval -0.078 to +0.047)
beliefs/event-knowledge9fa439db-c29a-446b-94ea-147bae23e473250301-0.066 (95% interval -0.125 to -0.008)
beliefs/sampled-worlds5b5b528d-de10-4a20-921f-68f1b286d6e9271280-0.012 (95% interval -0.072 to +0.048)
risk/risk-appetite837c9293-5996-49d1-8d1f-019c2dd395ee261303-0.055 (95% interval -0.118 to +0.008)
bargaining/trade-openness1bfc00f0-05ed-4635-b499-69cb50bc4c80281293-0.016 (95% interval -0.075 to +0.043)

Learned pattern values: an n-tuple leaf

The tunable search gained a second leaf: lookup tables of small board and portfolio patterns whose sum values a position in win-probability units, in the spirit of the Drop7 n-tuple tables. SearchConfig.leaf.tables names a table file and swaps the leaf inside the otherwise unchanged search; the arena and the remote protocol seat load it once per process, and the browser build rejects it (the tables are a server-side policy by decision). The hand-written leaf is unchanged: the refactored search replays run d611102f-d5c0-4828-9131-1e746844ff65 bit for bit on its first seeds.

Tables are trained by self-play on the engine. Every seat plans its turn with the depth-1 search over the tables on the true state; the leaf reads only that seat's own hand and public information, so hidden hands never reach a table. At game end each seat's chain of end-of-turn positions is updated backward with TD(0.7) toward 1 for the winner and 0 for everyone else plus 0.05 per point gained, with temporal-coherence step sizes. Two things were needed before the tables learned anything. Shared tables can hit one entry twice in a position, so the update weights entries by multiplicity. And blank tables never finish a self-play game (nobody builds, every game hits the turn cap, every target is zero), so the first 20,000 games are played by the fast builder while the tables watch; the builder plays 15,000 games per second and self-play then runs at 45 to 65 games per second on 32 threads.

An unregistered pilot trained six layouts for eighteen minutes each and played each as the depth-2 leaf against the hand-written leaf with the two builders on 24 fixed deterministic seeds (96 games; asset ntuple-pilot-margins, records under records/training/ntuple-pilot/). Final margins, tables minus hand leaf: hex + portfolio +0.302 (+0.141 to +0.464), hex + vertex + portfolio +0.271, portfolio alone +0.208, the full layout without the point reward +0.188, vertex + portfolio -0.125, and hex + vertex without portfolio tables -0.177 (-0.326 to -0.028). The portfolio tables carry the mechanism, hex windows add to them, and the eight-million-entry intersection windows hurt at this budget. These games chose the layout and carry no evidential weight. The main run trains hex + portfolio from scratch under a three-hour wall with a plateau rule; its screen and protocol cohorts are registered below when the candidate is frozen.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Registered before the candidate is frozen, all on fresh deterministic seeds with the frozen tables at artifacts/ntuple/hex-portfolio-main.bin in slot 0:

CohortRegistrationSlot 0Slot 1Seeds
Equal depth (engine)ea8af9cc-c1f0-42b9-a388-b241e62cc7e0tables, depth 2hand-written leaf, depth 2256 to 319, 256 games
One ply (engine)6a712b5a-0169-45e5-a14b-51b53ed0582btables, depth 1hand-written leaf, depth 2256 to 319, 256 games
Buys a ply (engine)9ed38762-4927-4f9e-bb2b-b45e893a1834tables, depth 2hand-written leaf, depth 3, 1.5 s256 to 319, 256 games
Deployment depth (engine)acf5812a-4596-4d09-b401-9c29758df92btables, depth 3, 1.5 shand-written leaf, depth 3, 1.5 s256 to 319, 256 games
Protocol confirmationa5e9b3f1-8ace-418f-b8e8-bd54c825c5c9ntuple-leaf (depth 3, 1.5 s)expectimax-v2-plan320 to 339, 80 games

Every engine cohort seats an ETA and a fast builder in the other two slots; the protocol cohort seats eta and fast. Their runs are recorded below when they complete.

The learned leaf on fresh seeds

The main run (records/training/ntuple-main/) trained hex plus portfolio tables from scratch and stopped on its plateau rule after 256,248 games and 1 hour 50 minutes; all eight validation points beat the hand-written leaf and the point at 96,093 games (+0.375 on the validation seeds) was frozen as artifacts/ntuple/hex-portfolio-main.bin (SHA-256 f8e61e66…, receipt in records/artifacts/). The four pre-registered screens then ran on seeds 256 to 319, 256 games each, tables in slot 0 and the hand-written leaf in slot 1 with an ETA and a fast builder:

CohortRunTables winsHand winsContrast (95% interval)
Equal depth, d2 vs d209fb758b-051f-435c-aaa8-8c9454c3baa313074+0.219 (+0.124 to +0.314)
One ply, d1 vs d2d249aa28-d737-4f4e-b068-12542f4679b912179+0.164 (+0.058 to +0.270)
Buys a ply, d2 vs d3 (1.5 s)169b0772-f6c8-46ff-8eb3-aa8b5f0f6cfb12282+0.156 (+0.051 to +0.262)
Deployment depth, d3 vs d3 (1.5 s)ec904c96-b029-4d1b-8d37-393cc15ebb5a13573+0.242 (+0.140 to +0.345)

Every registered rule is met: the learned leaf beats the hand-written leaf at equal depth by more than the +0.10 the rule asked for, is worth more than a planned turn of search, and keeps its margin at the baseline's depth. The report has the training curve, the decoded hex table, and the build profile. The protocol cohort a5e9b3f1-8ace-418f-b8e8-bd54c825c5c9 is running as run e861616e-8100-43e6-a8d3-39047b5b6669; its outcome is recorded below.

The protocol cohort completed: run e861616e-8100-43e6-a8d3-39047b5b6669 played all 80 games with twelve matches in flight and no timeout moves; ntuple-leaf won 46 (57.5%) against 25 (31.2%) for expectimax-v2-plan, with eta at 5 and fast at 4, a paired contrast of +0.263 wins per game over 20 seeds (95% interval +0.094 to +0.431). The registered rule is met and the protocol report makes ntuple-leaf the protocol-arena baseline. Protocol run records for deterministic cohorts now carry their paired contrast; this run's record was regenerated from its retained summary with the corrected template.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Follow-ups: more searches at the table

Two cohorts under patterns/ntuple-followups, seeds 340 to 403, 256 games each, with the frozen tables at depth 2. With a second hand-written search replacing the fast builder (5af081f1-c109-4390-9bea-2ca7f451d43a, run b5bd6e07-98f8-42aa-ac82-79b060e116cf), the tables won 107 slot-games against 63 and 58 for the two hand-written seats and 28 for ETA: contrast +0.172 (95% interval +0.056 to +0.287), supported. In a symmetric field of two table seats and two hand-written seats (94097c5c-0247-4d7e-a10f-ca855680de21, run 8a6a8227-3951-410c-b278-fc27944f4005) each table seat won 76 against 52 for each hand-written seat: contrast +0.094 (+0.004 to +0.183). That lineup is unchanged by a two-seat shift, so its four rotations come in identical pairs and the cohort holds 128 distinct games; the interval over seeds is therefore narrower than it should be, and the reading is a narrow support. The advantage does not come only from exploiting the two builders, and it shrinks, as it must, when half the table is the tables.

A stability digest over 303 positions now pins pattern extraction; a compact corner window family (the three touching hexes and the building state, 303,918 entries) is added for the next pilot. Feature extraction is not the cost: one table evaluation takes 0.64 microseconds against 1.65 for the hand-written terms, and the tables seat's longer decisions come from a search that expands about twice as many nodes and chance branches under the tables.

Second pilot: learning settings

Nine unregistered arms of eighteen minutes each (records under records/training/ntuple-pilot2/, asset ntuple-pilot2-margins): the defaults repeated as a control finished at +0.115 where the first pilot's identical run finished at +0.302, so the pilot's noise floor is about 0.2 wins per game. λ 0.3 (+0.354) and λ 0.9 (+0.281) finished highest, the corner family at +0.167, and step size 0.5 (+0.042), point reward 0.1 (+0.094), and a 100,000-game warm-up (+0.135) lowest; none separates from the floor. Two four-hour runs, the defaults and λ 0.3, are training concurrently on sixteen threads each with a 192-game validation cohort under runs/ntuple-long/.

Deepening where it matters, and an explain mode

Two search changes, both behaviour-preserving for every registered configuration (recorded deterministic games replay bit for bit): iterative deepening now stops on settled decisions (a single-candidate position never deepens past the first depth, and deepen_gap ends deepening once the best candidate leads the runner-up by that many leaf units), and explain: true reports, for the chosen move, the distribution of end-of-turn positions it leads to at every planned level with probabilities and values, merged by what the player has by then. The exhibit ntuple-explain-decision shows one such decision; the search trace figure renders the panel. On 509 traced decisions of the tables at depth 2, 29% had a single candidate, and among the rest the median lead of the best move over the runner-up was 5.5 leaf units (half a percentage point of win probability), with a tenth above 38.

Depth 4 with the tables costs a median of 3.5 s and a 90th percentile of 6.5 s per main-phase decision on sampled positions without deepening, and the default node budget of 400,000 transitions aborts most depth-4 searches, so a depth-4 configuration needs a larger node budget. A depth-4 candidate under a 4 s budget with the gap rule is registered against the depth-3 baseline once the long runs release the machine.

Two four-hour runs, and their screens

The default-settings run (records/training/ntuple-long/long-default/) trained 300,150 games on sixteen threads and peaked at +0.375 on its 192-game validation cohort at 150,075 games; the λ 0.3 run reached +0.292 at 270,135 games. Both best points were frozen (records/artifacts/ntuple-long-*.md) and screened against the frozen 96,000-game tables on seeds 404 to 467 under patterns/ntuple-followups: the default run's tables won 109 slot-games to 101 (caf6e656-fccc-424f-addf-f0ed62e384f8, run dee1f84c-7e07-4ae7-ac8c-e8ae30998e6b, contrast +0.031, 95% interval −0.082 to +0.145) and the λ 0.3 tables 106 to 92 (714fa798-4f0c-469b-8d96-efaa71898aff, run a144ba45-27e3-46b5-8ad2-3e45525f4a17, +0.055, −0.046 to +0.155). Both inconclusive: longer training and the λ change do not measurably improve on the frozen tables. The trainer's driver now resolves its output path; these runs' table files were written under the server checkout and moved back before freezing, with the digests recorded.

Depth 4, first screen

ntuple-leaf-deep (depth cap 4, 4 s budget, 5,000,000 transitions, gap 20) against the depth-3 baseline configuration on seeds 468 to 531 (c36715d4-a947-4166-86a5-8ef0bca620c6, run 57717b3e-f5ab-4fa2-85a4-d35bf41c2868): 129 wins to 109, contrast +0.078 (95% interval −0.039 to +0.196), inconclusive. The deep seat completed depth 4 on few decisions (mean completed depth 1.98) because the 30% time rule stops deepening after a depth-3 completion that took longer than 1.2 s; it mostly bought depth-3 completions the 1.5 s seat had to abort. An equal-time comparison, a depth cap of 4 against a cap of 3 under 10 s budgets on seeds 572 to 603, is registered as 8dc65a70-0b16-44fb-97b6-4fc7d4471ab8. The same two configurations with the hand-written leaf (6d9624c9-90bb-4427-8381-e706cec9389a, run 90009612-234c-4b68-b2b3-fa93885f84b9): 89 wins to 102, contrast −0.051 (95% interval −0.176 to +0.074), inconclusive. Under this budget the fourth ply buys nothing measurable for either leaf.

The protocol cohort 372d07bc-183f-4970-a93a-f65db4d9e964, run 8f6dd1a7-d354-4e5c-a590-7b23c2f9f2fd, seated ntuple-leaf-deep against ntuple-leaf with the two builders on seeds 532 to 551 under an 8 s deadline: 80 of 80 games valid with no timeout moves, 27 wins to 43, contrast −0.200 (95% interval −0.357 to −0.043). The rule reads that as a refutation: the depth-4 configuration with a 4 s budget and a gap of 20 is weaker through the protocol, and the baseline stays ntuple-leaf. A gap-rule-only cohort (the baseline configuration with deepen_gap 20 against without) is registered to separate the deepening rule from the depth cap.

The equal-time comparison (8dc65a70-0b16-44fb-97b6-4fc7d4471ab8, run 4e81a0cd-174e-42e3-aa5b-9c41be3c55cc, seeds 572 to 603, 10 s budgets, 20 million transitions, deepening while under 60% of the budget): the cap of 4 won 60 to 52 against the cap of 3, contrast +0.062 (95% interval −0.105 to +0.230), inconclusive; the deep seat completed a mean depth of 2.85 against 2.34 and spent 3.5 s per decision against 0.7 s, aborting 17% of its attempts.

The gap rule alone (0ce4a417-5521-4d5c-9478-fa2d0374176d, run a32e7819-1d3d-4dc0-9065-13eabc9f2a86, seeds 604 to 667): the baseline configuration with deepen_gap 20 against without, 120 wins to 103, contrast +0.066 (95% interval −0.044 to +0.177), at 262 ms per decision against 448 ms. The rule does not weaken the search and saves 42% of decision time.

Transposition tables

The search's memos now live in a table the seat owns, keyed by a verified Zobrist-style information-set key, with three lifetimes (cache: none, decision, turn); the opponents' round arrivals are cached too, and indistinguishable positions are grouped in first-appearance order so sums no longer depend on the key. The grouping change is the one non-identical step: runs recorded before it stand as recorded and are not replayable move for move. The equal-nodes pair under search/transpositions (968bb602-4742-472e-97ad-b77d6b83a1ab, run a278a790-1e12-435f-90ed-95c516a6a94f, fresh tables; and 420a6324-b780-4998-b61c-c047e672cf7f, run e02cf22e-6cb2-4dba-a08d-ab45b1a4556a, shared tables) played 128 identical games; the shared tables decided 11.7% faster (654 ms against 741 ms) with 16% fewer transitions, short of the 15% the rule asked for. The equal-time cohort (04515fd6-3f1a-4d87-9baf-b603885badb9, run 392cc1bc-8a64-4adc-825f-3058c66e006a, seeds 700 to 763): turn tables against fresh tables at depth 3 under 1.5 s, 107 wins to 115, contrast −0.031 (95% interval −0.145 to +0.082), inconclusive; the turn tables decided in 368 ms against 434 ms at the same completed depth (2.23 against 2.20). The protocol cohort (77be5dcd-ba5e-4fd8-8014-a9aec230ed07, run bd18246c-4161-49e7-9391-a2530bdb3434, seeds 764 to 783): ntuple-leaf-tt 27 wins to 36 for ntuple-leaf, contrast −0.113 (95% interval −0.265 to +0.040), all games valid; inconclusive, and the baseline stays ntuple-leaf. The transposition report has the concept figure, the key, and every run.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.