返回作品

Game AI System

Texas Hold'em Poker AI

一个能真实对局的德州扑克 Heads-up 系统:规则引擎管牌局,AI 在不完全信息里做下注决策。

德州扑克好玩的地方在于:你永远看不全牌,却必须做一个像样的决定。这个项目把这件事拆成两层: 底层是一套不讲情面的规则引擎,负责每一手牌的合法流程;上层是一套可训练的 AI 策略, 在牌力、位置、赔率和对手行为之间做取舍。

AI stack 4820
A♠K♥8♣4♦J♠
Pot 360
Q♠10♠
equity 0.61SPR 2.8raise 3x

界面截图

下面是实际运行界面:模式选择、实时牌桌、玩家行动按钮、公共牌和行动日志都已经跑通。 对一个扑克 AI 来说,最基本的诚意是牌局真的能打完。

德州扑克 AI 项目的模式选择页面截图
模式选择
玩家与 AI 对战的牌桌页面截图
对局行动
带公共牌和下注按钮的德州扑克对局截图
翻牌阶段

系统结构

我把“能玩起来”和“会做决策”分开处理:先让规则闭环可靠,再把可调策略接到同一个行动接口。 这样 AI 可以换,牌桌不会跟着散架。

规则引擎

先把游戏规则做硬:发牌、盲注、下注轮、all-in、摊牌和分池都由 Python 引擎统一处理,界面不替规则兜底。

策略决策

AI 不是看见大牌就冲。它会综合胜率、位置、底池赔率、SPR 和 fold equity,再选择 fold / call / raise / all-in。

对手建模

玩家不会总按教科书出牌。系统记录 VPIP、PFR、AF、fold-to-cbet 等指标,用行为反推对手范围。

离线训练

CMA-ES 负责离线调参,自博弈结果保存为 JSON;Web 和 CLI 只加载冠军参数,不把训练压力带进对局。

决策链路

每次轮到 AI 行动,引擎会打包可用动作、底池、下注额、位置、公共牌和对手快照。 AI 只负责在约束内做选择,不能凭空发明一个“不合规但很聪明”的动作。

01Game Engine

规则引擎生成牌局状态

02Decision Context

整理底池、位置、可用动作

03Advanced AI

估算胜率并选择行动

04Flask Web UI

把结果反馈到牌桌界面

可展示亮点

  • 这不是一张会动的牌桌,而是一套从发牌到结算都能自洽运行的 heads-up 系统。
  • AI 决策没有停在固定 if-else,而是把胜率、收益、对手范围和历史风格放到同一张决策桌上。
  • 训练和对局解耦:慢活交给离线 self-play,玩家看到的是已经加载好的策略版本。

已补充模式选择、牌桌对局和翻牌阶段截图

核心引擎:engine.py 处理发牌、下注轮、all-in、摊牌和分池

AI 策略:advanced_ai.py 根据胜率、位置、SPR、pot odds 和 fold equity 选择 fold / call / raise / all-in

训练流程:train.py 使用 CMA-ES 和 self-play opponent pool 训练参数

Web 入口:server.py 用 Flask session 包装同步游戏引擎,static/ 提供中英文牌桌界面

当前展示方式:用截图证明可交互版本已经跑通,在线试玩后续再上服务器

运行方式

本地启动后可以直接在浏览器里进行玩家 vs AI 对局,适合复现一手牌的完整流程。

cd C:\homework\poker_github_repo
.\.venv\Scripts\activate
python server.py

# 训练 AI 参数
python train.py --generations 5 --lambda 6 --hands 800 --workers 4

Related work