Inspiration
Poker is a fascinating combination of probability, game theory, decision-making, and uncertainty. We wanted to explore a challenging question: Can we build an AI that makes profitable decisions without knowing its opponent's cards, while operating under strict computational limits?
The TAMU Datathon Heads Up Poker Bot Challenge gave us the perfect opportunity to turn statistical reasoning into a competitive AI system.
Our goal was to build more than a bot that follows fixed poker rules. We wanted an agent that estimates probabilities, observes its opponent's behavior, and adapts its decisions over time.
What it does
AdaptiveProfit is an autonomous poker AI designed for heads-up Short Deck Pot-Limit Omaha with five hole cards (PLO5).
Our bot combines three main techniques:
- Monte Carlo Equity Simulation: Estimates the probability of winning by sampling possible opponent hands and future community cards.
- Opponent Behavior Modeling: Tracks betting, raising, calling, and folding patterns to adjust estimates of the opponent's likely hand strength.
- Expected Value Optimization: Evaluates legal actions based on estimated equity, pot odds, fold probability, betting size, and potential profit. Instead of relying entirely on predetermined rules, AdaptiveProfit combines probabilistic calculations with information learned throughout the match.
How we built it
We developed our agent primarily in Python, using NumPy for efficient numerical computation, FastAPI for communication with the tournament engine, and Docker for reproducible deployment.
One of our biggest technical challenges was calculating poker hand strength efficiently. In Short Deck PLO5, players must construct their final hand using exactly two hole cards and three community cards.
We implemented fast hand evaluation and precomputed equity information to reduce expensive calculations during gameplay.
For postflop decisions, our bot uses Monte Carlo sampling to estimate equity against possible opponent holdings. It then adjusts those estimates using observed betting behavior and compares the expected profitability of available actions.
We also developed an automated benchmarking process to test multiple strategy variants against different poker bots using duplicate deals and statistical confidence intervals.
Challenges we ran into
- Working under strict computational constraints
Our bot had to operate with a limited thinking-time budget, strict response deadlines, and constrained CPU and memory resources. We optimized simulations and reused computations to balance decision quality with execution speed.
- Making decisions with incomplete information
Unlike many traditional optimization problems, poker involves hidden information and opponents who can bluff. We had to estimate hand strength while accounting for uncertainty and potentially misleading betting behavior.
- Avoiding overfitting to specific opponents
One of our biggest lessons came from testing against multiple competitive bots. A strategy that performed well against one opponent could perform poorly against another.
We experimented with bluffing frequency, position-based decisions, opponent modeling, and re-raise-aware expected value calculations.
Surprisingly, more sophisticated models did not always perform better. This taught us the importance of rigorous evaluation rather than assuming theoretical complexity guarantees improvement.
- Distinguishing variance from actual improvements
Poker outcomes are highly variable. Winning a few matches does not necessarily mean a strategy is stronger.
We used duplicate-deal evaluations, multiple random seeds, confidence intervals, and controlled comparisons to measure performance more reliably.
Accomplishments that we're proud of
- Built a complete, autonomous Short Deck PLO5 agent capable of participating in the tournament environment.
- Implemented Monte Carlo equity estimation and adaptive opponent behavior modeling.
- Developed a reproducible Docker-based benchmarking workflow.
- Evaluated multiple experimental strategies across hundreds of thousands of simulated hands.
- Achieved strong results against several tested opponent bots while identifying weaknesses against others.
- Completed extensive reliability testing without observed match errors, timeouts, or forfeits in our reported validation runs. One accomplishment we are particularly proud of is our willingness to reject experimental changes that did not demonstrate reliable improvements. Rather than selecting whichever strategy produced the highest score in one test, we prioritized reproducibility, statistical evidence, and consistent performance.
What we learned
This project helped us connect statistics, probability, software engineering, and strategic decision-making in a practical setting.
We learned that building intelligent agents is not just about designing clever algorithms. It also requires reliable systems, careful experimentation, uncertainty estimation, and a willingness to question assumptions.
Most importantly, we discovered that a more complex algorithm is not necessarily a better algorithm. The quality of an AI system depends on how well its decisions perform in real environments.
What's next for AdaptiveProfit: An Adaptive Poker AI
We would like to continue improving AdaptiveProfit by exploring better opponent-range estimation, more accurate multi-street expected value calculations, and robust decision-making against previously unseen strategies.
In the future, we hope to investigate game-theoretic methods and self-play approaches to develop poker agents that can generalize across a wider range of opponents.
AdaptiveProfit represents our attempt to turn statistical reasoning into intelligent decisions under uncertainty.
Built With
- docker
- fastapi
- machine-learning
- numpy
- python
- uvicorn