Inspiration

Heads-Up Short Deck 5-Card Pot-Limit Omaha appealed to us as an AI problem: five hole cards and a 36-card deck create an enormous number of situations, and a bot gets only milliseconds to respond to each one.

What it does

Polaris is an autonomous poker bot that plays complete heads-up matches against other bots. It chooses whether to fold, check or call, or raise at every turn, using a solid precomputed strategy as its foundation. As a match goes on, it tracks how often its opponent folds to raises and adjusts when the evidence is clear.

How we built it

Polaris is a Python and FastAPI web server that responds to the tournament judge. We compressed solver data into lookup tables keyed by hand strength, board texture, position and betting situation. When a spot has no exact match, the bot steps down through progressively broader tables to find the closest one. On the river, a Monte Carlo simulation estimates hand strength. Opponent adjustments use a statistical significance check, shrinkage and a 10% cap on how far the strategy can move.

Challenges we ran into

Tight time limits: each half allows only 8 seconds of thinking across 1000 hands, so we reserved simulation for the river and reduced it when the time bank runs low. Incomplete coverage: the solver data can’t include every situation, so we built fallbacks that still give a reasonable strategy. Noisy opponent data: adapting too quickly to small samples is exploitable, so the bot waits for clear evidence. Getting it tournament-ready: late in development, a missing strategy file and accidentally removed server code stopped the bot from running, so we had to verify the exact version we submitted.

Accomplishments that we're proud of

Polaris won every full 1000-deal duplicate match we ran against the random, calling-station and always-pot baseline bots, with no errors and within its time limit. It passes the full compatibility test suite and turns a very large game into a bot that usually decides in milliseconds.

What we learned

We learned how to turn solver output into a strategy that runs in real time, and how to balance strategic accuracy against strict speed limits. We also saw why duplicate scoring and confidence intervals matter for separating skill from card luck, and that exploiting opponents takes restraint. On the engineering side, a good bot is worthless if the exact commit doesn’t build and run.

What's next for Polaris Pokerbot

Expand the strategy tables to cover more situations exactly Test against stronger opponents, including self-play Use more of the opponent data it already collects, such as preflop and showdown tendencies Speed up river simulation to make room for more accurate estimates

Built With

Share this project:

Updates

Submission history