Gen 3 — Range-Aware Equity (State of the Art)

# Gen 3 — Range-Aware Equity

> **FROZEN FINAL, 2026-08-27.** Gen3 ist final kalibriert und eingefroren (Commits 0e8227c, 2f47157). Struktur-Anpassung an Gen2 (Fork-Architektur) + 8-Runden-Sweep-Kalibrierung abgeschlossen. **Bekannte, akzeptierte Limitation:** Ring (t3/9-max) ~−2.0 BB/100 gegen Gen2 (Triple-Combo lag mit +0.59 im Tie-Band → keine Adoption per Protokoll). HU und OTB stark.

## Role in the Framework

Gen 3 is the **range-aware equity** concept that all production strategies build upon. The `RolloutPostFlopGen3` struct (`compute_equity_with_ranges`) is still used by Gen 4/5 for MC equity computation — only the range source changes (Gen 3: heuristic, Gen 5: RangeNet NN).

## Preflop Maneuver

| Priority | Strategy | When |
|---|---|---|
| 1 | `g2_ke_hu_nash` | HU, ≤25 BB |
| 2 | `g1_short_stack_preflop` | ≤25 BB |
| 3 | `ng_preflop` | >25 BB — **mit HU-Fork** (`hu_*`-Knobs, num_players==2): hu_open=1.0, hu_limp=1.0, hu_call_raise=0.40, hu_reraise=0.80 |

HU-Kalibrierung: monoton steigende Kurven über 4 Runden; hu_reraise 0.60→0.70→0.80 jeweils besser gegen Gen1/Gen2/Mirror. 1.0-Endpunkt bewusst nicht verfolgt (immer-3-betten = degeneriertes, unrealistisches Sparring-Profil).

## Postflop Maneuver

### Gen 3 Postflop: `g3_postflop_rollout`

**Range-aware equity**: statisches `PlayerModel` → gewichtete Range → MC gegen Range → Threshold-Entscheidung (Calls: `win_prob`, Bets/Raises: `hs`).

**Fork-Architektur (Gen2-analog, 2026-08-26):** `is_short_handed` (dealt-in ≤6, gleiche Gate-Semantik wie Gen2) gabelt die 3 Threshold-Funktionen — OTB: flache Knobs (bet_otb_flop=0.18, raise_otb=0.73, bet_otb_turn/river, call_otb), linear, ohne M-Terme/Multiway-Floors. Ring: Formeln mit M-Skalierung + Modell-Modifier. Action-Tree geteilt (Unterschied zu Gen2, das den ganzen Tree gabelt — dokumentierte bewusste Entscheidung).

**Ring-final:** call_base=0.65, bet_flop_base=0.30 (monotone Sweep-Kurven R6), fold_freq_multiplier=0.75 (0.25 killte alle Bluff-Pfade — restauriert 2026-08-25).

## Finale Messwerte (deterministisch, sweep_mode=true, 5 Seeds × 50K)

| | Duel | t3 | 5v4 | 4v5 |
|---|---|---|---|---|
| vs Gen1 | **+161** | −1.7 | +3.7 | +3.2 |
| vs Gen2 (final) | **+150** (mit hr=0.80: +163) | −1.9 | −1.9 | −2.4 |
| vs Gen4/G48 | nicht gemessen (Gen3 ist Vorgänger) | | | |

Head-to-Head final vs pre-calibration: **+97 Duel**.

**KRITISCHE Messregel:** `cash_nl.toml` hat `sweep_mode=false` (Live-Entropie) → Einzelzell-Messungen schwanken −3 bis −308 BB/100. ALLE Gen3-Messungen mit `sweep_mode=true`-Kopien fahren (Restrauschen ~0.02 BB/100, Thread-Reihenfolge).

## Configs

| Config | Chain |
|---|---|
| `cash_nl.toml` | ke_hu → short_stack → ng_preflop (hu_*) → g3_postflop_rollout (OTB + Ring) |

## Key Files

| File | Content |
|---|---|
| `holdem_bots/src/cash/rollout_postflop_gen3.rs` | Gen3-Strategie + OTB-Fork + Fixes (i_am_last_to_act, capped-raise-Rundung, conti_bet-Multiplier, decision_rng-Salt) |
| `holdem_bots/src/cash/ng_preflop.rs` | NG-Preflop + HU-Fork (hu_*-Knobs, SB-Steal-Misfire-Fix) |
| `holdem_bots/src/common/player_model.rs` | Static PlayerModel |
| `scripts/gen3_sweep.sh` | Sweep-Referenz (deterministische Mess-Config mit sweep_mode=true patchen!) |

## Verifikation (finale Adoption)

- Harrington: 4 pre-existing Failures (jj_4bet, 55_shortstack, 99_turn, kqs) — Double-Run-Determinismus-Filter, keine neuen
- 1000-Hände-Selbstplay: 0 Panics, 0 Guardrails

## Open Issues

- Ring ~−2 BB/100 vs Gen2: dokumentiert, Tie-Band-Kalibrierung ausgeschöpft (R7: alle Kandidaten +0.4-0.8 mean, g2 ±0). Ein echtes Schließen bräuchte range-narrowing oder formel-strukturelle Änderungen — Gen4/G48-Territorium, nicht Gen3.
- Harrington-KQs-Case: pre-existing (Call statt Raise, Multiway-Limp-Pot) — Gen3-typische vorsichtige Range-Equity.
- `compute_equity_with_ranges` bleibt geteilte Infrastruktur für Gen 4/5.

id: 0f0e106e3da94b75a2223dd2b22aafca
parent_id: abc167de888d41bf9391c373e90dec8d
created_time: 2026-06-28T05:16:18.613Z
updated_time: 2026-08-27T13:46:09.015Z
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: 1782623778613
user_created_time: 2026-06-28T05:16:18.613Z
user_updated_time: 2026-08-27T13:46:09.015Z
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