Methodology
Every range on this site comes from bcfr — a vector full-update CFR+ solve of a K=1000 card-abstracted, joint preflop + postflop 6-max NLHE game (100bb, 7 bb open). Card abstraction uses PAAEMD (potential-aware Earth Mover's Distance), so a hand is bucketed by how its strength will develop over future cards — not just its current average equity. Preflop opens are solved against an actual (abstracted) postflop game with multiple bet sizes, so they are postflop- and potential-aware. This page discloses how the solve was produced, what it covers, its in-abstraction convergence, and — clearly and up front — exactly what that number does and does not promise.
Release version: 4.6-bcfr-k1000-ochs169
Headline result
| Position | In-abstraction NashConv (% pot) |
|---|---|
| UTG | 0.0003 % |
| HJ | 0.0002 % |
| CO | 0.0001 % |
| BTN | 0.0002 % |
| SB | 0.0001 % |
| BB | 0.0001 % |
Read this carefully. The number above is the in-abstraction Nash gap of the K=1000 PAAEMD-bucketed game (with its bucket-transition chance abstraction). It is not a true-game / un-abstracted exploitability guarantee — abstraction error remains, exactly as it does for any abstraction+CFR solver, including commercial ones. See Scope & honest caveats below.
Game configuration
| Stakes | NL100 — 100bb starting stack, no-limit hold'em, 6-max, no straddle |
|---|---|
| Open size | 7 bb from every position including SB |
| 3-bet size | 20 bb |
| 4-bet | all-in (100 bb) |
| Postflop bet sizes | Bets 25 % / 75 % / 150 % pot; raises and re-raises 50 % pot; all-in always available; at most two raises per street. |
| SB limp | Disabled — no-limp rule |
| Rake | 5 % with 3 bb cap, applied to showdown pots only (fold-out pots are unraked; all-in-to-showdown pots are raked) |
| Scope | Joint preflop + postflop. The preflop tree (open / 3-bet / 4-bet all-in / fold) is solved against an actual, abstracted postflop game across 90 heads-up postflop lines — not a raw all-in-equity terminal. |
| Abstraction | 169 suit-isomorphic hand classes preflop; K = 1000 OCHS-grounded potential-aware buckets per postflop street — each hand scored by its equity vs 169 opponent clusters (every preflop class its own cluster = maximum class-level opponent resolution), with Ganzfried-Sandholm potential-aware street-to-street transitions and a bucket-transition 'T-tensor' chance abstraction. |
Algorithm
bcfr — a vector full-update CFR+ over a K=1000 OCHS-169-abstracted, joint preflop+postflop 6-max NLHE game (100bb stacks). Every infoset is updated on every sweep (no Monte-Carlo sampling of branches), and CFR+ regret-matching⁺ is used for both the regret update and the average-strategy accumulation.
- Vector full-update CFR+. Every infoset is updated on every sweep over the whole abstracted game — there is no Monte-Carlo sampling of branches, so each sweep is an exact regret update.
- CFR+ regret-matching⁺ (non-negative regret flooring) for both the regret update and the average-strategy accumulation.
- Joint preflop + postflop. The preflop tree (open / 3-bet / 4-bet all-in / fold) shares the solve with the abstracted postflop game across 90 heads-up postflop lines (25 % / 75 % / 150 % pot bets, 50 % raises, all-in allowed). Preflop EVs therefore reflect what actually happens after the flop — not raw all-in equity.
- K=1000 PAAEMD card abstraction. K = 1000 / 1000 / 1000 OCHS-169 potential-aware buckets per street (flop / turn / river). Hands are clustered potential-aware (see below) rather than by raw strength, and a bucket-transition "T-tensor" chance abstraction models how a hand's bucket migrates from street to street.
- Preflop is kept exact at the 169 suit-isomorphic hand classes (AA, AKs, AKo, …, 22).
Potential-aware card abstraction (PAAEMD)
Grouping 1,300+ canonical flops (and far more turns/rivers) into a few hundred buckets per street is unavoidable on a single workstation. The question is how you group them. A naïve abstraction buckets hands by their current average equity (strength only) — which collapses a made-but- capped hand and an equal-equity drawing hand into the same bucket, even though they play completely differently. That under-values speculative hands (suited connectors, low suited gappers) and is exactly why a strength- only solve barely opens them.
This release uses PAAEMD — potential-aware Earth Mover's Distance clustering (Ganzfried & Sandholm, 2014). Instead of a single strength number, each hand is described by the distribution of how it transitions into next-street buckets, and hands are clustered by the Earth Mover's Distance between those transition distributions. It is built bottom-up:
- River (final street): clustered by exact equity.
- Turn: each turn hand is described by its histogram of which river buckets it rolls out into; clustered by EMD with the river-equity distance as ground metric.
- Flop: each flop hand is described by its histogram of which turn buckets it rolls out into; clustered by EMD with the (recursively defined) turn-bucket distance as ground metric.
The practical effect: two hands with the same average equity but different future potential now land in different buckets, so draws are valued on what they can become — and the opening/defending frequencies for speculative hands are more realistic than under a strength-only abstraction.
Game size & convergence
| Preflop infosets | 1,117 |
|---|---|
| Postflop infosets | 41,920 across 90 heads-up postflop lines |
| Card buckets | K = 1000 / 1000 / 1000 OCHS-169 potential-aware buckets per street (flop / turn / river) |
| Convergence | Mean in-abstraction NashConv 0.0002 % pot (max 0.0003 %) |
The joint game's mean in-abstraction NashConv reaches 0.0002 % pot (max 0.0003 %), where it plateaus at the abstraction floor. The full-update CFR+ iteration converges at the usual O(1/T) rate until it reaches this floor, after which the residual gap is dominated by the K=1000 bucketing and the fixed action sizings, not by under-training — running it further does not lower it.
What changed in this release
The previous release bucketed postflop hands by strength only (average equity) and offered a coarser postflop bet tree. This release makes two upgrades: (1) PAAEMD potential-aware card abstraction, so drawing hands are no longer collapsed with same-equity made hands, and (2) a richer postflop action tree (25 % / 75 % / 150 % pot bets, 50 % raises, all-in allowed) so each preflop open is valued against more realistic postflop play.
Because the abstraction and the action tree both changed, this is a different (richer) abstracted game, not the same game solved harder — so it is not a like-for-like "N times better" claim. The practical effect users see is that speculative hands (especially suited connectors) are valued more accurately, because each open is now judged on potential-aware postflop play rather than raw all-in equity.
Scope & honest caveats
- In-abstraction Nash, not true-game GTO. The headline number is the Nash gap within the K=1000 PAAEMD-bucketed game (including its bucket-transition T-tensor chance abstraction). It is not a guarantee about true-game / un-abstracted exploitability. Abstraction error remains — as it does for every abstraction+CFR solver, commercial ones included. We do not claim "perfect GTO" and we do not publish a true-game exploitability number.
- Fixed sizings only. Open = 7 bb, 3-bet = 20 bb, 4-bet = all-in (100 bb); postflop bets are restricted to 25 % / 75 % / 150 % pot bets, 50 % raises, all-in allowed. Any other size in the wild has to be translated by the user.
- K=1000 PAAEMD card abstraction postflop. Hands are grouped into 1000 potential-aware buckets per street; specific board-texture and card-removal effects finer than the bucketing are not resolved.
- Suit-isomorphic preflop. 169 hand classes; card-removal effects between specific suit configurations are not modeled preflop.
- 5 % rake, 3 bb cap, no-flop-no-drop. If your room's rake is materially different, the equilibrium drifts.
- Not a solver service. Spots outside the enumerated tree are not on this site. We don't promise on-demand custom solving.
- 6-max 100 bb cash only. Heads-up, MTT ICM, short-stack and deep-stack play are out of scope.
Update cadence
We re-train when meaningful improvements arrive (richer abstractions,
additional sizings, deeper postflop). Each release is published with its
solver, game size, measured in-abstraction NashConv per position, and the
honest caveat on this page. The release version
(4.6-bcfr-k1000-ochs169) is the source of truth.
If you spot a clear divergence from established GTO theory in any spot, please tell us via Contact. We'll add it to a regression test and re-publish.