Drawmaha Solver Open the solver

A research project · Deep CFR on mini-drawmaha

A solver for a poker game nobody has solved.

Drawmaha is a split-pot draw and Omaha hybrid. This solver is built one game at a time: four smaller games, each solved and graded against a known answer before the next is started.

Deep CFR is below the table at every hand count tried
Exploitability of the average strategy on mini-drawmaha, log scales
0.050.10.20.5124100k200k500k1M2M5M10M20Mhands per seatexploitability, chips per handDeep CFR 0.086 at 2MTabular LCFR 0.061 at 20M
At 2 million hands per seat the Deep CFR exact average grades 0.086 chips per hand; tabular LCFR grades 0.630 and needs 20 million to reach 0.061. One exact best-response walk grades both.

Results

Four games solved, each graded by exploitability

Exploitability is what a best response wins per hand against the solver's average strategy. Zero is a Nash equilibrium. Every grader reads the game's rules and nothing from the solver it grades.

All benchmarks →

GameMethodGraded againstExploitability
Rock-paper-scissorsregret matchingthe uniform Nash0.0009chips/round exploitable after 100k rounds
Kuhn pokervanilla CFRthe closed-form equilibrium; all 64 pure strategies0.00063chips/hand; game value −0.05555 against −1/18
Leduc pokervanilla CFRan OpenSpiel solve, frozen as a fixture0.011chips/hand; game value −0.0874 against −0.0856
Mini-drawmaha, 6.2M infosetslockstep MCCFR, four regret rules racedthe exact best-response walk0.061chips/hand at 20M hands per seat
Mini-drawmahaDeep CFRthe same exact walk and the tabular answer0.086chips/hand at 2M hands per seat, where LCFR is at 0.630
Full DrawmahaDeep CFR at scalehead-to-head checkpoint matches and a trained exploiter—not started; the range interface is built ahead of it

Range explorer

Seat 0 opens with a bet 25% of the time, most often when it makes trips with the board

Rows are what the three held cards make on their own; columns are what they reach for with the board card. Each cell is its share of every opening hand and how often that share bets. The explorer opens any cell down to a single hand, at every spot of the game.

Open the range explorer →

Seat 0 to act, round one, pot 2 · tabular LCFR, exploitability 0.061
All 5,460 deals of a hand and a board card, equally weighted
check 75%bet the pot 25%
held ↓ · with the board →
nothing8.0% · bet 4%
two to the straight38% · bet 10%
two to the flush14% · bet 17%
pairs the board36% · bet 48%
trips with the board3.3% · bet 50%
high card37%
check 76% · bet 24%
14%bet 2%
4.6%bet 8%
18%bet 45%
pair40%
check 81% · bet 19%
6.9%bet 1%
16%bet 11%
6.6%bet 18%
6.6%bet 44%
3.3%bet 50%
straight16%
check 62% · bet 38%
5.9%bet 17%
2.0%bet 28%
7.9%bet 57%
flush4.6%
check 63% · bet 37%
1.5%bet 23%
0.8%bet 26%
2.3%bet 50%
straight flush2.0%
check 61% · bet 39%
0.7%bet 31%
0.3%bet 46%
1.0%bet 43%
trips1.1%
check 79% · bet 21%
1.1%bet 21%
Read from the frozen table's export at the opening spot; the row mixes are the answer sheet's. A deeper tint bets more; a dashed cell holds no hands.

Research

Keeping negative regret wins the race, and a network passes the table at equal hands

One long write-up with its data and figures, a survey of the machine learning behind it, and the benchmarks every method was checked on first.

Oct 2026Mini-drawmaha, solvedLinear CFR grades 0.061 at 20 million hands per seat, against 0.248 and 0.250 for the two rules that drop negative regret; a Deep CFR run passes the table at every hand count tried.Write-up
Oct 2026Regret targets divided by √pot train a better network0.086 against 0.115 undivided at 2 million hands per seat, same network, same steps; dividing by the whole pot gives 0.084.Chapter
Aug 2026The machine learning behind the solverA survey: regret matching, CFR and its sampled and discounted variants, Deep CFR, and how each is graded.PDF
Oct 2026Rock-paper-scissors, Kuhn and Leduc, gradedThe three small games against a closed form and an OpenSpiel solve, each with a live demo.Benchmarks

Play

Act against the solver, with its answer beside yours

A hand is dealt from a pack of 600. You act; the coach shows how the solver mixes at the same spot with the same cards. Settled hands go to a ledger.

Play the solver →

Deal 31 of 600: with 2♦ 5♥ 6♣ the solver checks 48% and bets 52%
Seat 0 to act, pot 2 · Deep CFR exact average, release rung4-deep-pot0.5-t200, exploitability 0.086

Your hand

256

Board

5

High card in hand; with the board card it pairs the board.

Coach · the solver's mix here

check48%
bet52%
Read from the Play tab's deal pack: the strategy's mix at this node of this deal. The three held cards are scored at showdown as they stand; two of them with both board cards make the other half.

Method

Graded by an exact best response

Each game is solved, then a best response is computed exactly against the average strategy. What it wins per hand is the grade. A game is not called solved on a learning curve.

A grader shares no code with its solver

Every grader imports the game's rules and nothing else, so a bug cannot sit in both and cancel. Hidden cards are summed over before the responder takes a maximum.

Every figure is regenerated

Python, NumPy and torch; training runs on Modal and the site on Vercel. Every chart and table here is written from committed data by a named command, never edited by hand.