How these ranges are solved

Reviewed

Every range on this site is computed by a solver written for it, not copied from a published Nash chart. This page says exactly what that solver does, what it is verified against, and where its answers stop being trustworthy.

Who publishes this

Push Fold Trainer is operated by Convergent Labs. Guides here are published under the organisation rather than an individual byline, because there is not yet a named person to attach one to and a fabricated one would be worth less than nothing. This page is the substitute: instead of asking you to trust a name, it shows what the numbers are made of.

The solver

The engine is Linear CFR - counterfactual regret minimisation, with each iteration weighted by its index so later, better-converged passes count more than the uninformative early ones. Strategy at every decision point comes from regret matching: the probability of shoving is that action's positive accumulated regret over the total positive regret across both actions, and an even split before either action has any.

That detail matters more than it sounds. An earlier version used damped fictitious play with a logistic curve turning EV into a frequency, and the width of that curve was a free parameter someone had to hand-tune per stack depth - a single global trade-off between clean 0/100 answers for obvious hands and honest mixing for genuinely marginal ones. CFR has no such parameter. A hand with clearly negative EV accumulates negative regret every iteration and decays toward zero shove frequency on its own; a hand near true indifference settles at a genuine mixed frequency because that is what the regrets say.

Updates are simultaneous: every position's EV for an iteration is computed against every other position's strategy as it stood at the start of that iteration, and all of them update together at the end. The published output is the weighted average strategy across all iterations, not the final iteration - CFR's convergence guarantee is about that average, and a single iterate can sit well off it.

How equity is computed

Heads-up all-ins use an exact precomputed equity table, so those numbers carry no sampling error at all. Pots with three or more players use Monte Carlo board dealing, because the exact enumeration is too expensive to run across the whole solve - the default is 1,600 trials per evaluation, and the GPU backend's error against a 200,000-trial reference at that setting measures 5.7e-05.

What is actually verified

Two checks, and they test different things. Final exploitability is measured on the solved strategy - the published solves reach 0.0000. Separately, the CPU and GPU backends are cross-checked by RMS difference at increasing trial counts: the two engines draw the same quantities from the same distributions but do not share a random trajectory, so they cannot be compared value by value. What is checked instead is that RMS multiplied by the square root of the trial count stays flat, which is the signature of ordinary sampling noise. A representation bug shows up as an RMS that stops shrinking.

These solves are seed-sensitive at near-indifference, and that is worth stating plainly. Solving the same spot twice with different seeds moves the strategy by a mean of 0.029. The movement sits on hands where the EV cost of choosing wrong is close to nil, which is exactly where you would expect it, but it does mean a specific borderline hand's frequency is a reading rather than a constant.

Where this stops being reliable

CFR's guarantee of converging to a Nash equilibrium holds for two-player zero-sum games. An opening position with several players still to act behind it is neither - it is n-player and general-sum. So convergence here is established empirically, by measuring exploitability, rather than assured by the algorithm. In practice the measured exploitability is what justifies calling these equilibrium ranges; the theory alone would not.

The ICM ranges carry a second assumption on top of the first. Turning chip stacks into prize-pool equity requires a model of how the tournament finishes, and every such model is an approximation - it prices a stack's value from the payout structure and the stacks at the table, not from how the specific players at that table actually play.

The exploit ranges are best responses to an assumed opponent, not equilibrium strategies. They win more than a balanced range against the tendency they target and lose to an opponent who does not have it, which is the trade they exist to make. Use them when you have a read you would defend, not by default.

Coverage

The free chip-EV tier holds 996 solved spots: 19 stack depths at 6-max (every big blind from 4 to 20, plus 25 and 30) and 14 at 9-max, across every opening position and the common facing-an-open spots. The big blind never opens a pot, so it has no opening range, and 9-max coverage is thinner than 6-max.

Not every solved spot is linked from the site. The published set is curated deliberately - a few hundred pages at the depths people actually search for, rather than 996 nearly identical charts, which is the scaled-content pattern search engines are right to discount. Any solved spot still resolves if you construct its URL directly.

Corrections

If a range here looks wrong, it is worth telling us - a solver bug that survives review is exactly the kind of thing an outside reader catches first. Guides carry their publish and last-updated dates so you can see how current a page is before acting on it.

← All guides