A No-Limit Texas Hold'em poker bot, 6th of 500+ entrants in the Fullhouse 2026 UK National Championship.
My bot was called BATNEEC, short for Best Available Technology Not Entailing Excessive Cost.
Before the flop it plays from fixed positional hand charts based on solver ranges, with Nash equilibrium push and fold charts once the stacks get short, and these ranges widen as players are knocked out and the table gets smaller.
After the flop it keeps a Bayesian estimate of what each opponent holds, updating it with every bet they make, since a bet is more likely to come from a strong hand than a weak one, and tuning it to how loosely or tightly each opponent plays. It runs thousands of fast simulations of the remaining cards against that range to work out how often it is ahead, and solves the final card exactly when only one opponent is left. That estimate drives the decision, so it bets or raises when it is ahead, calls for a good price, and folds otherwise, needing a bigger edge when calling a shove.
It also varies its play to stay hard to read. It sizes its bets to the board and the opponent, betting more on draw-heavy boards and bigger against players who call too often, and with a strong hand it chooses bet sizes that add up to getting all the chips in by the river. It bluffs a fair amount so a big bet is not always strong, and in the right spots it does the opposite and checks or calls with a strong hand to disguise it and let the opponent keep betting.
The whole bot is the single file bot.py, with decide(game_state) as its entry point. It's pure Python with eval7 and numpy.
