Strategy Registry & Key Files

# Strategy Registry & Key Files

> Updated 2026-08-09. Gen 5 = g50 + RangeNet v17. Gen 6 abandoned. NN opponent pool mandatory.

## Strategy Registry

| Strategy | Gen | Description |
|---|---|---|
| `g1_short_stack_preflop` | Gen 1 | Push/fold preflop (≤25 BB) |
| `g1_big_stack_preflop` | Gen 1 | Hand-grouping preflop (≥25 BB) |
| `g2_ke_hu_nash` | Gen 2 | KEHU20BB Nash HU equilibrium (19 tables) |
| `g2_postflop_rollout` | Gen 2 | EHS postflop baseline |
| `g3_postflop_rollout` | Gen 3 | Range-aware equity postflop |
| `g47_equity_preflop` | Gen 4.7 | PEM2 matrix equity preflop — **production preflop** |
| `g48_formula_postflop` | Gen 4.8/5 | Formula postflop + observer ranges + RangeNet — **production postflop** |
| `gen6_preflop` | Gen 6 | PreflopNet NN preflop — **ABANDONED** (-644 BB/100) |
| `gen5_rl` | Gen 5 | RL data collector + range recorder (formula teacher) |

### Opponent Bots (NN variants — mandatory for all sims/evals)
| Config | Type |
|--------|------|
| `g48_fish_nn`, `g48_whale_nn` | Loose NN variants |
| `g48_tag_nn`, `g48_nit_nn` | Tight NN variants |
| `g48_station_nn`, `g48_lag_nn` | Passive/aggro NN variants |
| `g48_maniac_nn`, `g48_reg_nn` | Aggressive/reg NN variants |
| `cash_nl_gen2` | Gen 2 (EHS rollout) — speed benchmark only |

### Legacy Opponent Bots (no NN — do not use for evals)
| Config | Type |
|--------|------|
| `cash_nl_gen2` | Gen 2 (EHS rollout) |
| `cash_nl` | Gen 3 (range equity) |
| `cash_nl_g48` | Gen 4 (formula, no range NN) |
| `g48_tag/nit/lag/station/fish/maniac/reg` | G48 personality variants (no NN) |

## Production Config Chain (2026-08-09)

**Gen 5** (`cash_nl_g50.toml` / `cash_nl_g50_live.toml`):
```
voting_mode = "first_applicable"

1. g2_ke_hu_nash          → heads-up Nash equilibrium
2. g47_equity_preflop     → PEM2 matrix equity preflop
3. g48_formula_postflop   → formula postflop + observer ranges
                           + RangeNet v17 (pure NN, alpha=1.0)
```

## Key Files

### Gen 4/5 Strategy Implementation
- `holdem_bots/src/gen4/equity_preflop.rs` — G47 strategy (PEM2 equity)
- `holdem_bots/src/gen4/formula_postflop.rs` — G48 strategy (formula + observer ranges), Gen48Config
- `holdem_bots/src/gen4/range_builder.rs` — heuristic range construction (Gen 3/4 only, unused in G50)
- `holdem_bots/src/gen4/observer.rs` — `Observer` — EMA-based opponent tracker
- `holdem_bots/src/gen4/range_predictor.rs` — `RangePredictor`, `probs_to_hand_range()` (hero+board exclusion), `blend_alpha()`
- `holdem_bots/src/gen4/mod.rs` — `build_ranges_and_equity()` (excluded_cards = hole.cards + board_cards)
- `holdem_bots/src/gen4/profile.rs` — `PlayerStats`, `PlayerProfile`, three-tier blend

### Gen 5 Range Model
- `holdem_bots/src/gen5/range_recorder.rs` — Feature extraction (85 dims), `compute_rich_action_history()` (shared train/serve)
- `holdem_bots/src/gen5/range_net.rs` — RangeNet (85→512→512→512→256→169) + `RangeTrainer`
- `holdem_bots/src/bin/train_gen5_range.rs` — Range model training CLI

### Gen 6 PreflopNet (abandoned)
- `holdem_bots/src/gen4/gen6_preflop.rs` — Gen6 preflop strategy (loads PreflopNet, 7-class → Actions)
- `holdem_bots/src/gen5/preflop_net.rs` — PreflopNet (15→128→128→128→7), PreflopTrainer, PreflopInference (GPU), PreflopNetPPO, PpoTrainer, PpoInference (GPU)
- `holdem_bots/src/bin/train_gen5_preflop.rs` — 7-class imitation trainer
- `holdem_bots/src/bin/train_gen5_preflop_ppo.rs` — PPO trainer (Phase 1 value, Phase 2 full PPO)
- `holdem_bots/src/bin/collect_gen5_preflop.rs` — Imitation data collector (postflop fold shortcut)
- `holdem_bots/src/bin/collect_gen5_preflop_ppo.rs` — PPO data collector (full hands, hero-only)

### Shared Infrastructure
- `holdem_bots/src/common/hand_potential.rs` — PotentialResult (hs, ppot, npot, nutpot)
- `holdem_bots/src/common/gpu_mc.rs` — GPU Monte Carlo kernel
- `holdem_bots/src/assembly/registrations.rs` — strategy registry
- `holdem_bots/src/lib.rs` — `register_bot_from_config()` (pre-resolves configs, re-assembles per instance)

### Configs
- `configs/bots/cash_nl_g50.toml` — Gen 5 sim config (pure NN, range_v17)
- `configs/bots/cash_nl_g50_live.toml` — Gen 5 live config (range_v17, 40K MC budget)
- `configs/bots/cash_nl_g48.toml` — Last Gen 4 config (heuristic ranges)
- `configs/bots/g48_{fish,whale,tag,nit,station,lag,maniac,reg}_nn.toml` — NN opponent variants
- `configs/bots/cash_nl_g60.toml` — Gen6 PreflopNet (abandoned)
- `configs/bots/cash_nl_g62.toml` — Gen6 PPO v2 (abandoned)
- `configs/bots/cash_nl_g63.toml` — Gen6 PPO v3 (abandoned)

### Scripts
- `scripts/sanity_check.sh` — mandatory pre-live validation (3 gates)
- `/tmp/run_eval_parallel.sh` — parallel eval (MAX_PARALLEL=15, generates per-seed TOML)

### Data & Models
- `data/preflop_equity_matrix.bin` — PEM2 binary (gitignored)
- `data/flop_distributions.jsonl` — flop distribution data
- `models/range_v17.safetensors` — Production RangeNet (85-dim, 4.35% top-1, 24.2% top-10)
- `models/preflop_v1.safetensors` — PreflopNet 7-class (abandoned)
- `models/preflop_ppo_v1/v2/v3.safetensors` — PPO models (abandoned)
- `/home/jan/gen5_data/equity_v5_2m4/` — Complete range data (19.2M samples, 85-dim)

## Generation Taxonomy
- Gen 1 = static rules
- Gen 2 = EHS rollout
- Gen 3 = range equity (heuristic ranges)
- Gen 4 = adaptive modelling (G45/G47/G48) — formula-based with observer EMA stats
- Gen 5 = G48 formula + RangeNet v17 (pure NN alpha=1.0) — **production**
- Gen 6 = PreflopNet/PPO preflop — **abandoned** (-644 BB/100)

id: 3073fa7641ab4c2f9cb9120a98eaa6e0
parent_id: 659da65d964344fc89e6b4eafac0098c
created_time: 2026-07-07T11:45:12.429Z
updated_time: 2026-08-09T09:50:30.100Z
is_conflict: 0
latitude: 0.00000000
longitude: 0.00000000
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 1783424712429
user_created_time: 2026-07-07T11:45:12.429Z
user_updated_time: 2026-08-09T09:50:30.100Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
is_locked: 0
extracted_resource_ids: 
type_: 1