Skip to content

PokerML

Updated Mar 2026

  • Python
  • FastAPI
  • phevaluator
  • CFR+

this is a heads-up no-limit hold'em solver built on CFR+ and external sampling monte carlo. it trains over a card and bet-size abstraction, then serves the converged strategy through a fastapi web app where you can play against the bot and see its 13x13 range grid in real time.

what i built

  • CFR+ trainer with external sampling MCCFR, immutable game states, and per-iteration bucket caching for speed
  • card abstraction: heads-up, all 169 preflop hands keep a bucket of their own; flop and turn hands are clustered by earth mover's distance over where their strength can go, and river hands by OCHS, strength against clusters of opponent hands
  • action abstraction with 75%, 100% and 175% pot preflop, up to five geometric sizes postflop from a small blocking bet to an overbet, fold/check/call, all-in, and a 4-raise-per-street cap
  • fastapi server with session management, bot inference, and a 13x13 range grid API for the frontend

what's next

  • expand action abstraction with more bet sizings and raise depths