id: 3c81cc2152324f9586b68ca0376ae8c2
parent_id: 643cdffe60e6436486d150145f87ea16
item_type: 1
item_id: 47031623e2c6451fb36730ffe93380ea
item_updated_time: 1786792831616
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"-08-\"],[-1,\"09\"],[1,\"15\"],[0,\" (rev \"],[-1,\"9). Gen 6 PreflopNet/PPO abandoned. Gen 5 = G48 + RangeNet v17\"],[1,\"10). **Production: G51 (G48 + RangeNet v17 + action-likelihood corrector), live since 2026-08-15.** Sanity Gate 1 now tests the NN path; Harrington board parser bug fixed (all prior turn/river validations ran on corrupted boards)\"],[0,\".\\\n\\\n-\"]],\"start1\":25,\"start2\":25,\"length1\":78,\"length2\":245},{\"diffs\":[[0,\"ETE\\\n\"],[-1,\"\\\n\"],[0,\"- \"],[-1,\"Simulation engine (`holdem_core`) — cash games, SNG, MTT\\\n- Strategy framework — trait-based composition\\\n- Gen 1 strategies — static rules\\\n- Configurable thresholds with TOML overrides\\\n- `hand_replay` crate — PokerStars parser + bot decision replay/\"],[1,\"holdem_core engine, strategy framework, Gen 1, TOML thresholds, hand_replay parser+\"],[0,\"regr\"]],\"start1\":312,\"start2\":312,\"length1\":259,\"length2\":93},{\"diffs\":[[0,\"sion\"],[-1,\"\\\n-\"],[1,\",\"],[0,\" PEM2 \"],[-1,\"preflop equity matrix — 169×169 distribution matrix\\\n\\\n---\"],[1,\"matrix\"],[0,\"\\\n\\\n##\"]],\"start1\":407,\"start2\":407,\"length1\":72,\"length2\":21},{\"diffs\":[[0,\"2-4 \"],[-1,\"Strategy Development \"],[0,\"✅ CO\"]],\"start1\":442,\"start2\":442,\"length1\":29,\"length2\":8},{\"diffs\":[[0,\"ETE\\\n\"],[-1,\"\\\n\"],[0,\"- Gen 2\"],[-1,\":\"],[0,\" M\"],[-1,\"onte Carlo EHS equity engine\\\n-\"],[1,\"C EHS,\"],[0,\" Gen 3\"],[-1,\": R\"],[1,\" r\"],[0,\"ange\"],[-1,\"-aware\"],[0,\" equity\"],[-1,\" (heuristic ranges)\\\n-\"],[1,\",\"],[0,\" Gen 4\"],[-1,\": A\"],[1,\" a\"],[0,\"daptive \"],[-1,\"opponent modelling (G45/G47/G48) — formula-based with observer EMA stats\\\n- **Last Gen 4 config: `cash_nl_g48.toml`** (G48 formula + heuristic ranges)\\\n\\\n---\"],[1,\"(G45/G47/G48)\"],[0,\"\\\n\\\n##\"]],\"start1\":453,\"start2\":453,\"length1\":267,\"length2\":72},{\"diffs\":[[0,\"NAL\\\n\"],[-1,\"\\\n\"],[0,\"- \"],[-1,\"`\"],[0,\"live\"]],\"start1\":568,\"start2\":568,\"length1\":12,\"length2\":10},{\"diffs\":[[0,\"rver\"],[-1,\"` (Axum gateway), Torn\"],[1,\" :8088,\"],[0,\" Tam\"]],\"start1\":581,\"start2\":581,\"length1\":30,\"length2\":15},{\"diffs\":[[0,\"aper\"],[-1,\"\\\n- D\"],[1,\", d\"],[0,\"efau\"]],\"start1\":609,\"start2\":609,\"length1\":12,\"length2\":11},{\"diffs\":[[0,\" bot\"],[-1,\": Gen 5 (\"],[1,\" \"],[0,\"`cas\"]],\"start1\":622,\"start2\":622,\"length1\":17,\"length2\":9},{\"diffs\":[[0,\"l_g5\"],[-1,\"0\"],[1,\"1\"],[0,\"_live`, \"],[-1,\"now using range_v17)\\\n- Profile persistence, graceful shutdown/restart\\\n\\\n---\"],[1,\"profile persistence\"],[0,\"\\\n\\\n##\"]],\"start1\":634,\"start2\":634,\"length1\":91,\"length2\":36},{\"diffs\":[[0,\"et ✅\"],[-1,\" DECLARED (2026-07-31),\"],[0,\" PRO\"]],\"start1\":694,\"start2\":694,\"length1\":31,\"length2\":8},{\"diffs\":[[0,\"UCTION (\"],[1,\"v17, \"],[0,\"2026-08-\"]],\"start1\":703,\"start2\":703,\"length1\":16,\"length2\":21},{\"diffs\":[[0,\"09)\\\n\"],[-1,\"\\\n**Gen 5 = G48 formula + RangeNet v17 (p\"],[1,\"- P\"],[0,\"ure NN\"],[-1,\",\"],[0,\" alp\"]],\"start1\":724,\"start2\":724,\"length1\":55,\"length2\":17},{\"diffs\":[[0,\"=1.0\"],[-1,\")**\\\n\\\nConfig: `cash_nl_g50.toml` (sim) / `cash_nl_g50_live.toml` (live, range_v17)\\\n\\\nRangeNet predicts opponent hand distribution (169-dim softmax) from 85 observable features. Pure NN — no heuristic blending in the G50 path. Hero cards + board cards excluded at inference via `probs_to_hand_range()` masking.\\\n\\\n### Key Decisions\\\n- **Pure NN (alpha=1.0)**: Sweep showed pure NN (+138 BB/100 seed 42) beats blend (+80.5) beats heuristic (-0.5). NN is strictly better including cold start.\\\n- **Combo-count fix** (critical): `probs_to_hand_range()` was inflating offsuit combos 3× vs suited. Fixed with 2-pass division. Turned blend from -16.4 → +15.1 BB/100.\\\n- **NN opponent pool mandatory**: All sims and evals use `g48_{fish,whale,tag,nit,station,lag,maniac,reg}_nn.toml`.\\\n\\\n### RangeNet Architecture\\\n```\\\nInput(85) → Linear(512) → ReLU → LayerNorm\\\n         → Linear(512) → ReLU → LayerNorm + residual\\\n         → Linear(512) → ReLU → LayerNorm + residual\\\n         → Linear(256) → ReLU\\\n         → Linear(169) → softmax\\\n```\\\n\\\n85 features = 53 base + 32 rich action history (8\"],[1,\", 85-dim, 4.35% top-1 / 24.2% top-10, hero/board card masking\\\n- **G51 (2026-08-15)**: + action-likelihood corrector (idea #7) — XpotTable likelihood re-weighting; fixes KK-overplay class; sim-neutral; live default\\\n- Improvement levers: feature quality (Tier-2: per-combo Xpot profile as NN input), live data (Torn VPIP 0.6-0.7 vs sim 0.08-0.40),\"],[0,\" per\"],[-1,\" \"],[1,\"-\"],[0,\"street \"],[-1,\"× 4 streets).\\\n\\\n### Range Model History\\\n| Version | Dims | Samples | Top-1 | Top-10 | Notes |\\\n|---------|------|---------|-------|--------|-------|\\\n| v10-v13 | 57 | 2-4M | ~3% | ~19% | Hit ceiling with coarse 8-dim action history |\\\n| v14_b1 | 81 | 1M | 2.86% | 19.0% | Accuracy unchanged, combo-count fix improved downstream equity |\\\n| v14_b2–b4 | 81 | 1-3M | — | — | Bug-fix iterations (combo-count, alpha config) |\\\n| v16 | 81 | 19.2M | 3.61% | 22.3% | Full collection, +26% top-1 vs v14 |\\\n| **v17** | **85** | **19.2M** | **4.35%** | **24.2%** | +20% top-1, +9% top-10 vs v16. **Production model.** |\\\n\\\n### Gen 5 Tuning (ongoing)\\\n- **RangeNet v17 in production** (4.35% top-1, 24.2% top-10)\\\n- **Improvement levers**: (1) Feature quality — showdown history, positional stat breakdown, pot-odds context, board interaction. (2) Live data — real opponents have exploitable patterns. (3) Per-street specialization — separate model for updating preflop range given board+actions.\\\n- **Diminishing returns on data**: 19M→84M samples projected <1% improvement. Better levers: feature quality, live opponent data.\\\n\\\n---\\\n\\\n## Phase 5: Gen 6 — PreflopNet/PPO ❌ ABANDONED (2026-08-09)\\\n\\\n**Gen 6 = Gen 5 + PreflopNet NN for preflop decisions**\\\n\\\nAttempted to replace G47 formula preflop with a neural network (7-class, 15-dim), then fine-tune with PPO.\\\n\\\n### Why It Failed\\\n- PreflopNet achieved 99.38% eval accuracy on imitation training but **-644 BB/100** when deployed\\\n- 15-dim feature space can't capture G47's nuanced logic (PEM2 equity, limper stats, implied odds, position-dependent thresholds, pot-based 3-bet sizing)\\\n- PPO on top of broken base was hopeless (value corr=0.10, weight changes <0.001/iteration, G62 ≈ G60 ≈ -644 BB/100)\\\n- Would need 50+ features, continuous raise sizing (not 7 fixed classes), and much more training data\\\n\\\n### Eval Results (10 seeds × 5K hands, 9-max vs 8 NN opponents)\\\n| Bot | Avg chips/hand | BB/100 |\\\n|-----|---------------|--------|\\\n| **G48_nn** (production) | **+3.73** | **+18.7** |\\\n| G60 (PreflopNet imitation) | -128.75 | -643.8 |\\\n| G63 (PPO v3 on-policy) | -129.45 | -647.3 |\\\n\\\n### Future Options\\\n- Redesign PreflopNet with 50+ features and continuous sizing (major effort)\\\n- NN-assisted formula: use NN to provide inputs (e.g., estimated opponent range) to G47 formula\\\n- Focus postflop: NN-based sizing or bluffing frequency (smaller, easier problem)\\\n\\\n---\"],[1,\"specialization\\\n\\\n## Phase 5: Gen 6 ❌ ABANDONED (2026-08-09; code removed 2026-08-15)\\\n- PreflopNet imitation -644 BB/100; PPO no help. Post-mortem in AGENTS.md. Models archived.\\\n\\\n## Open strategy items (from fixed Harrington suite, 2026-08-15)\\\n1. **4_5_99**: 99 turn barrel vs mono-flop check-call — npot weighting too low for flush-heavy caller ranges\\\n2. **7_6**: KK river value-bet vs capped line — needs line-aware capping (turn donk + river check)\\\n3. NN-returns-None empty-range fallback in build_ranges_and_equity\\\n\\\n## Next major workstreams\\\n1. **EquityNet (ideas #1)** — range-conditioned equity histogram on equity_v5_2m4; replaces multiway MC (10x sim speedup); absorbs KK-overplay class end-to-end\\\n2. **FutureActionNet (#4)** — opponent next-action distributions; enables proper bet EV + check-raise planning; addresses 7_6-style capping\\\n3. **Preflop EV net (#2)** — value regression, not imitation; G47 floor + guardrails\\\n4. **Residual RL postflop (#3)** — after #1/#4\\\n5. **RangeNet v18 Tier-2** — merge corrector into the net\"],[0,\"\\\n\\\n##\"]],\"start1\":743,\"start2\":743,\"length1\":3472,\"length2\":1398},{\"diffs\":[[0,\"2026-08-\"],[-1,\"09)\\\n\"],[1,\"15)\"],[0,\"\\\n| Metri\"]],\"start1\":2155,\"start2\":2155,\"length1\":20,\"length2\":19},{\"diffs\":[[0,\"ion \"],[-1,\"preflop | **G47** (PEM2 matrix equity) |\\\n| Production postflop | **G48** (formula + observer ranges) |\\\n| Production range | **RangeNet v17** (pure NN, alpha=1.0) |\\\n| Configs | `cash_nl_g50.toml` (sim), `cash_nl_g50_live.toml` (live, v17) |\\\n| Gen 4 fallback | `cash_nl_g48.toml` (heuristic ranges) |\\\n| Harrington tests | 18/18 pass (range_v17) |\\\n| Sanity check | G48_nn ✓ +18.7, TAG_nn +1.8, Nit_nn +0.1, Mixed +0.3, Fish +4.5 BB/100 |\\\n| Range features | 85 dims (53 base + 32 action history) |\\\n| Range model | range_v17 (85-dim, 19.2M samples, 4.35% top-1, 24.2% top-10) |\\\n| Opponent pool | 8 NN variants (mandatory for all sims/evals) |\\\n| Eval speed | ~10 h/s (9-max vs mixed NN opponents), parallel 15× → ~150 h/s aggregate |\\\n| Sim speed notes | Bottleneck is multiway postflop (loose opponents = 5-7 way flops), not NN inference |\"],[1,\"| G51 (`cash_nl_g51_live`) |\\\n| Corrector | range_corrector.rs, `corr_*` knobs |\\\n| Harrington | 51 pass, 2 ignored-open (NN path tested) |\\\n| Sanity g51 | all gates pass |\\\n| h2h g51 vs g50 | −0.29 BB/100 (200K hands) |\\\n| Known g50-NN failures | a2o_river, 99_twopair (g51 passes) |\\\n\\\n## Ideas backlog\\\nSee Joplin `f3c42f44` — top-10 ranked list with implementations (#7 done).\"]],\"start1\":2214,\"start2\":2214,\"length1\":837,\"length2\":376}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-08-15T11:25:31.255Z
created_time: 2026-08-15T11:25:31.255Z
is_locked: 0
type_: 13