Skip to content

docs: 100bb preflop solver vs published chart validation (final sanity check)#168

Merged
amaster97 merged 1 commit into
mainfrom
preflop-100bb-chart-validation
May 28, 2026
Merged

docs: 100bb preflop solver vs published chart validation (final sanity check)#168
amaster97 merged 1 commit into
mainfrom
preflop-100bb-chart-validation

Conversation

@amaster97

Copy link
Copy Markdown
Owner

Summary

Final pre-signoff sanity check: 100 BB HU preflop solver output vs published GTO chart, post-PR-#165 cs-bug fix.

Verdict: PARTIAL

  • Premium spots (AA, KK, QQ, JJ, AKs, AKo, A5s 4-bet jam) match chart 100% across SB-RFI, BB-vs-RFI, SB-vs-3bet contexts
  • Per-cell qualitative match: 24/37 = 64.9%
  • Aggregate freq abs_diff > 5pp on 5/8 rows (SB open 37% vs pub 78%; BB call 86% vs 34%)
  • Median per-cell L1 = 0.000 PASS; max L1 = 2.000 FAIL (driven by SB-limp + 3-bet-sizing labeling artifacts)

Disagreement hypotheses (structural, not bug)

  1. SB-limp (~47% of SB-RFI mass): our engine allows limp, chart implicitly forbids it
  2. 3-bet sizing: task-spec [2.0, 2.3, 4.0] multipliers emit max 8.5bb (chart targets 10bb); 22.3bb 4-bet matches chart's 23bb within 3%
  3. Suited-ace bluffs (A5s, A2s): solver flat-calls vs chart's bluff-3-bet — Nash multiplicity region

Engine code unmodified. Doc-only PR. Empirical measurement.

Test plan

  • 10000-iter full-tree preflop RvR solve completes without error (PR fix(engine): preflop State::initial honors config.initial_contributions (#67) #165 cs-bug fix validated)
  • Aggregate frequencies + 37 spot-cell strategies emitted (ours, published, abs_diff, L1)
  • L1 median + max recorded
  • Three top-disagreement cells with hypotheses
  • Reproducibility commands included
  • (Follow-up, not gating this PR) Re-run with preflop_reraise_multipliers=[5.0] for 10bb-3bet apples-to-apples

🤖 Generated with Claude Code

…y check)

Empirical comparison of `_rust.solve_hunl_preflop_rvr` output at 100 BB HU
against a published GTO chart provided by the user, on top of the post-PR-#165
cs-bug fix.

10000-iter solve, ~5.8 min wall on M-series single-thread.

Verdict: PARTIAL. Premium-value spots match (AA-JJ, AK*, A5s 4-bet jam at SB
vs 3-bet -- 100% match on the high-EV-signal regions). Disagreements
concentrate in (a) SB-limp action our engine permits but the published chart
omits, (b) 3-bet sizing mismatch (closest engine output 8.5bb vs chart's
10bb under the task-spec multipliers), (c) Nash-multiplicity bluff cells
(A5s/A2s flat-call vs chart's 3-bet bluff). Per-cell qualitative match:
24/37 = 64.9%; aggregate-frequency abs_diff > 5pp on 5/8 rows; median
per-cell L1 = 0.000 (PASS); max L1 = 2.000 (FAIL, driven by limp/no-limp
labeling artifact, not solver bug).

Engine code untouched -- empirical measurement only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@amaster97 amaster97 merged commit 7d75485 into main May 28, 2026
5 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant