diff --git a/RULES.md b/RULES.md index bca7b9e..a33d15c 100644 --- a/RULES.md +++ b/RULES.md @@ -40,8 +40,10 @@ Each player has a position from **0 to 17**. Your belt is the segment you are in - 3–4 players: one pawn per corner Safe Room. - 5–8 players: two pawns per corner Safe Room. Players sharing a corner are never consecutive in turn order. -- Everyone starts on track position 0. - *Variant to test with 6+ players: start on 3 (Yellow).* +- Everyone starts on track position 0 (White). With 6 or more players, everyone starts on + 3 (Yellow) instead. +- *Shorter game:* with any number of players you may all start on 3 (Yellow). It saves about + a fifth of the playing time. - Choose the first player at random; play proceeds clockwise. ## Turn @@ -174,8 +176,7 @@ All other cards are shown and resolved immediately. ## Rule variants under test -Parameters to validate by simulation: starting on 3 with 6+ players; square mix; game -length at 3/4/6/8 players. +Parameters to validate by simulation: square mix; game length. Tested and set aside (simulator switches only): Exam ties to the defender; best-of-3 Exam; Kiai +1. diff --git a/agents/plans/2026-09-25-dojo-board-and-sim.md b/agents/plans/2026-09-25-dojo-board-and-sim.md index a11bcba..b377706 100644 --- a/agents/plans/2026-09-25-dojo-board-and-sim.md +++ b/agents/plans/2026-09-25-dojo-board-and-sim.md @@ -64,6 +64,7 @@ Deliverables: | D45 | The **`random` lineup is no longer run** in experiments: it never finishes a game and cost ~80% of a run's time. The bot stays in the code and the tests | Developer, 6.10. | | D46 | Performance work must leave **every game identical** (same events for the same seed), so every result recorded in this file stays valid | Developer, 6.10. | | D47 | **Kiai stays +2**: +2 and +1 are indistinguishable on every target (6.6); +2 decides more fights (5% vs 3% of Kumite in casual play). `kiai_bonus = 1` stays a simulator switch; RULES.md drops the "+1 to be tested" note | Developer, 6.6 results. | +| D48 | **6+ players start on 3 (Yellow)**; any player count may start on 3 as a "shorter game" option (saves 15–20% of the time, 6.7). 8 players stays long (107 / 142 min mixed / casual from Yellow) and is accepted: it will rarely be played. Balancing simulations stay at start 0 at every count (developer); `--start 3` reproduces the rules' 6+ setup or the shorter game | Developer, 6.7 results. | ## Phases @@ -174,7 +175,7 @@ Deliverables: - One change at a time. When a change is adopted, re-run the 6.1 baseline so later steps start from the current rules, and log the decision (D-number) here and in `RULES.md`. - Results go in this file as a table per step (command line, scenario, key measures). -**Next action:** 6.7 player counts. 6.2 is suspended (D43), 6.9 skipped (D44); 6.4.1 (chance square) stays optional. Order of the steps: D41. Everything up to 6.6 is committed; commit only when the developer asks. +**Next action:** length tuning (D39; target at 4 players: mean 60–90 min, p90 ≤ 110), then 6.8, when the developer says to continue. 6.2 is suspended (D43), 6.9 skipped (D44); 6.4.1 (chance square) stays optional. Order of the steps: D41. Everything up to 6.6 is committed; 6.7 and D48 are not; commit only when the developer asks. **Targets** (confirmed by the developer as a starting point, D32): @@ -296,7 +297,22 @@ Deliverables: | casual | +1 | 91 / 121 | 44% | 27% | 10%; 3% / 4% | 39% | 1.38 | - Reading: Kiai +2 and +1 are indistinguishable on every target measure (≤ 1 pp, inside the noise). Tecnica are rare: heuristic bots draw a Nebbia card on 2.3% of turns (0.5 Tecnica per game; Nebbia is worth 0.2 to them, below an Allenamento), casual bots on 9.7% (3.3 Tecnica per game). Even for casual play Kiai decides 5% (+2) vs 3% (+1) of Kumite. Scratch script `tecnica.py` (200 games per lineup). -- [ ] 6.7 Player counts: 3 / 4 / 6 / 8 players, start 0; plus start 3 at 6 and 8 players. Minutes per count; decide whether 6+ players start on Yellow. +- [x] 6.7 Player counts: 3 / 4 / 6 / 8 players, start 0; plus start 3 at 6 and 8 players. Minutes per count; decide whether 6+ players start on Yellow. **6+ players start on Yellow; shorter-game option for any count (D48).** + - Run: `uv run dojo sim --games 1000 --seed 0 --players 3 4 6 8 --start 0 3 --lineup balanced,farmer,aggressive casual` (48 s). + + | Players | Start | Minutes mean / p90: mixed; casual | Rounds: mixed; casual | Halfway leader wins: mixed; casual | Out of contention; worst player (mixed) | Rivals within 1 belt: mixed; casual | Wins by bot (mixed) | + |---|---|---|---|---|---|---|---| + | 3 | 0 | 55 / 75; 71 / 99 | 20.7; 28.9 | 49%; 45% | 3%; 9% | 0.61; 1.05 | 34 / 34 / 31 | + | 3 | 3 | 46 / 67; 59 / 84 | 17.4; 24.2 | 50%; 46% | 3%; 8% | 0.65; 1.05 | 34 / 35 / 31 | + | 4 | 0 | 72 / 95; 91 / 122 | 20.4; 27.5 | 40%; 39% | 4%; 13% | 0.84; 1.42 | 24 / 26 / 24 | + | 4 | 3 | 57 / 80; 77 / 110 | 16.2; 23.5 | 42%; 40% | 4%; 12% | 0.85; 1.47 | 24 / 25 / 26 | + | 6 | 0 | 107 / 145; 136 / 182 | 19.4; 26.4 | 32%; 27% | 9%; 29% | 1.19; 1.92 | 17 / 16 / 17 | + | 6 | 3 | 86 / 127; 113 / 161 | 15.8; 22.1 | 30%; 29% | 8%; 28% | 1.16; 1.96 | 15 / 18 / 17 | + | 8 | 0 | 133 / 181; 170 / 231 | 17.8; 24.3 | 26%; 20% | 11%; 37% | 1.41; 2.16 | 13 / 14 / 11 | + | 8 | 3 | 107 / 152; 142 / 200 | 14.5; 20.5 | 27%; 24% | 10%; 38% | 1.53; 2.29 | 13 / 14 / 11 | + + Wins by bot: aggressive / balanced / farmer. All games finished; Exam pass rate 40–44% everywhere. + - Reading: rounds stay ~15–29 whatever the count, so table time grows with the number of players (45 s per turn): 6 players take ~1.5x and 8 players ~1.9x the 4-player time. Starting on 3 saves ~3–4 rounds (15–20% of the time) at every count, and changes no other measure by more than a few points. At 6–8 players the worst player is out of contention 28–40% of turns (4-player target ≤ 35%), and the halfway leader wins less (20–32%): more players, more Kumite (2–3 per round), more reshuffling. 8 players on casual stays above 2 hours even from Yellow (142 min). - [x] 6.10 Simulation speed (before 6.3; D46: games unchanged). Profile: ~95% of the time was listing moves (`movement._extend`, `Board.neighbours`, the outcome keys in `Engine._path_choices`). - [x] 6.10.1 Guard: `agents/scripts/fingerprint_games.py` hashes every event of 210 games (mixed / casual at 4 players, 6 players, Fatica on stop with Kumite in round 1, random bots, 60-round cap); `write` before an engine change, `check` after. A tool for refactoring and speed work, not a test (rule changes are expected to differ). Timings came from a scratch benchmark. - [x] 6.10.2 `Board`: neighbour table, squares per code and Safe Rooms computed once (`cached_property`); neighbour order N, E, S, W kept (the random and casual bots pick by position in the offered list). `Engine`: Fatica squares as a set (`_tolls`), opponents' squares looked up once per move (`_fightable_squares`), and paths crossing no opponent keyed by their Fatica count with C-level set operations. @@ -304,7 +320,7 @@ Deliverables: - [x] 6.10.4 Parallel scaling: 8 processes running at once each take ~1.6x their solo time on this machine (8 real cores, clock and cache sharing), so ~5x on 8 workers is the hardware limit; no pool change. 16 workers (hyperthreads) add ~12%. - Result: 100 games on one process 8–12 s → 1.4–1.7 s; mixed + balanced + casual at 1,000 games on 16 workers 57 s → 8 s. All 210 fingerprinted games identical; the v0.8 baseline run prints the same metrics. - [ ] 6.9 Catch-up candidate A — **skipped (D44)**. Was: `RulesConfig` switch, Allenamento +2 for a player 2+ belts behind the leader (bot aware of it); compare on the contention, lead and length measures and on the style win rates. -- [ ] 6.8 Consolidation: the final configuration at 3 / 4 / 6 / 8 players with all lineups except `random` (D45), 2,000 games each; every target checked; `RULES.md` updated to the next version with the decisions; open items moved to Phase 7. +- [ ] 6.8 Consolidation: the final configuration at 3 / 4 / 6 / 8 players (start 0 as for balancing, plus start 3 at 6 and 8 as in the rules, D48) with all lineups except `random` (D45), 2,000 games each; every target checked; `RULES.md` updated to the next version with the decisions; open items moved to Phase 7. ### Phase 7 — Finalisation (later)