Game Learning · 扑克博弈论与 AI

博弈技术学习
GTO · CFR · 深度学习

系统学习 imperfect-information 博弈中的 GTO(Game Theory Optimal)策略、 CFR / CFR+ / MCCFR 等求解算法及其应用场景, 并理解它们与现代大语言模型(LLM)等深度神经网络的区别与结合方式。

开始阅读 查看研究代码

什么是 GTO?

GTO 不是「一种打法」,而是在博弈论意义下无法被剥削的最优混合策略。

在德州扑克中,两位玩家如果都采用 GTO 策略对局,长期来看谁也无法从对方身上稳定获利—— 这对应博弈论中的纳什均衡(Nash Equilibrium): 给定对手策略不变,任何一方单独改变策略都无法提高期望收益。

🎯

混合策略

GTO 很少是「永远下注」或「永远弃牌」。同一局面下,最优解往往是按一定频率随机选择多个行动(如 70% 加注、30% 过牌)。

🛡️

不可剥削

采用 GTO,对手无论多聪明都无法通过针对性调整来稳定赢你。代价是:对弱玩家你也无法最大化剥削他们的错误。

⚖️

平衡(Balance)

GTO 要求你的下注范围里既有强牌也有诈唬,让对手跟注或弃牌都占不到便宜——这就是「范围平衡」。

一个极简例子

想象河牌圈你下注 100,底池 100。若你只下注坚果牌,对手永远弃牌,你赢不大; 若你只诈唬,对手永远跟注,你输光。 GTO 会在价值牌与诈唬牌之间分配下注频率,使对手跟注或弃牌的 EV(期望值)相等—— 这就是无差别原理(Indifference Principle)

通俗总结:GTO 是数学上「谁也占不到便宜」的策略。 实战中高手往往在 GTO 基准上,根据对手漏洞做剥削(Exploit)调整—— 这正是「GTO 学框架、剥削抓利润」的现代扑克训练思路。

实现 GTO 的核心算法

扑克的状态空间巨大(尤其翻前 169 种起手牌 × 多种行动 × 多人), 无法像井字棋那样穷举。现代 GTO 求解依赖迭代 regret 最小化类算法。

博弈树与 Regret

把扑克抽象成扩展式博弈树:每个节点是某个决策点,边是行动,叶节点是摊牌或弃牌后的收益。 「Regret(遗憾值)」衡量:「如果过去在这个节点选了别的行动,我会多赚多少」。 算法通过反复自我对弈,让各节点的 regret 趋近于零,策略就收敛到纳什均衡。

瞬时 regret:r(a) = u(a) − u(σ)   // 选行动 a 比按当前混合策略 σ 多多少效用
核心思想 特点
CFR
Counterfactual Regret Minimization
遍历(或采样)博弈树,在每个信息集上累积 counterfactual regret,用 regret matching 更新策略。 奠基算法(Zinkevich 2007)。理论保证收敛到纳什均衡,但全树遍历在大游戏中极慢。
CFR+ CFR 的改进:regret 只保留正部分(floor at 0),策略用加权平均(常对近期迭代加权)。 实践中收敛更快、策略质量更高。Libratus(2017 击败顶尖人类)等系统的重要组件。
MCCFR
Monte Carlo CFR
不遍历整棵树,而是对外部采样(Outcome Sampling)或内部采样,用蒙特卡洛估计 regret。 让大规模游戏(如 Pluribus 六人无限注)在可接受时间内求解成为可能。
Deep CFR / Neural CFR 用神经网络近似存储每个信息集的策略与 regret,避免显式遍历巨大表格。 结合深度学习,可处理更大抽象空间;代表研究方向而非单一标准库。
Discounted CFR / DCFR 对历史 regret 与策略平均做折扣加权,进一步加速收敛。 近年求解器常用变体,在速度与精度间折中。

算法演进脉络

2007CFR 理论奠基
2010sCFR+ 工程加速
2017Libratus HU NLHE
2019Pluribus 6-max
2020sDeep CFR + 抽象

为什么需要「抽象(Abstraction)」?

真实扑克的行动可以是任意筹码量,牌面组合天文数字级。 求解器会把相近的手牌桶化(bucket)、把下注尺寸离散成几个档位, 在缩小后的游戏上跑 CFR,再映射回真实游戏—— 抽象粒度直接影响策略精度与计算时间的权衡。

GTO 算法的多种应用场景

CFR 及其变体源于 imperfect-information 博弈研究,最早在 Kuhn Poker、Leduc Hold'em 等玩具博弈上验证, 随后在德州扑克落地;同一套「regret 最小化 → 纳什均衡」思路也广泛用于扑克以外的对抗与资源分配问题。

扑克领域

📋

翻前范围表与开池策略

在抽象后的翻前博弈树上跑 CFR,输出各位置的 RFI、3bet、跟注频率与混合比例,生成可查阅的范围表(如 BTN 开池 A2s 频率)。

quasi-GTO CFR / CFR+
🌐

翻后 spot 求解器

PioSOLVER、GTO+ 等工具在固定公共牌与行动线下跑 CFR+,研究特定局面的下注尺寸与混合频率——职业训练最常用形态。

CFR+ Abstraction

实时子博弈求解

对局中以当前局面为根节点局部重跑 CFR/MCCFR,动态调整后续街策略——Libratus 击败人类的关键技术之一。

Subgame Solving MCCFR
🤖

AI 对战与人类基准

Libratus(2017)、Pluribus(2019)等系统用 CFR+ 与抽象逼近纳什均衡,是 imperfect-information 博弈 AI 的里程碑。

CFR+
🎓

训练基准与剥削参照

以 GTO 为「不可被剥削的下限」,再识别对手偏离做 exploit 调整——现代扑克教学的核心框架。

GTO + Exploit
🔍

手牌复盘与偏离分析

将真实牌谱与 GTO 频率对比,标注偏离点并辅助解说复盘——连接求解结果与实际牌局。

analysis-service pokershow

扑克以外的领域

以下场景与扑克 GTO 同属信息不完全、多方对抗问题,核心目标一致:寻找难以被对手剥削的混合策略均衡。

🛡️

安保巡逻与资源调度

机场、港口巡逻:防御方随机化路线与时间,使攻击者无法预测薄弱点;Stackelberg 博弈与 regret 类方法计算最优混合巡逻策略。

Security Games
🔐

网络安全攻防

加固时机、蜜罐部署、检测阈值等决策在信息隐藏下轮流博弈;FlipIt 等模型给出随机化防御与轮换策略。

Cyber Defense
🌍

外交与多边谈判

《外交》等谈判博弈中,AI(如 Cicero)结合均衡求解与语言模型,在联盟与背叛中寻求难以被利用的策略——与扑克 CFR 研究路径最接近。

Multi-agent Cicero
🎖️

军事推演与兵棋

红蓝对抗、情报不完全条件下的稳健策略计算,用于指挥员训练与决策支持——与扑克 AI 同属 strategic 博弈求解。

Wargaming
📢

广告竞价与拍卖

搜索引擎广告位、频谱拍卖:不完全信息下出价,参与者需混合出价策略以避免被对手预测与剥削。

Mechanism Design

体育零和对抗

点球方向、发球落点等——经典混合策略纳什均衡:让对手对各类行动 indifferent,是理解 GTO 最直观的入门实例。

Mixed Strategy

扑克:按求解规模划分

场景类型 典型规模 常用算法 产出形式
翻前全树 169 起手牌 × 有限行动 · 可离线长时间训练 CFR / CFR+ / DCFR 开池/3bet 范围表、HTML 策略图
翻后 spot 求解 固定公共牌与行动线 · 中等规模 CFR+、抽象 + bucket 特定局面的混合频率、下注尺寸
实时子博弈 当前街剩余决策 · 需秒级响应 MCCFR、Safe/Nested Subgame 对局中的即时策略调整
多人 / 全桌 状态空间极大 · 需强抽象 MCCFR、Pluribus 式 blueprint Blueprint 策略 + 在线微调
教学与传播 不要求完整求解 · 重解释与可视化 预计算策略 + LLM 叙事 解说 JSON、胜率曲线、短视频

其他领域:问题类型对照

领域 博弈特征 与 GTO/CFR 的关联
安保巡逻 防御方随机化 · 攻击者观察后行动 Stackelberg / 混合策略 · 大型部署系统(如 ARMOR 系列)
网络安全 反复攻防 · 隐藏信息 · 资源有限 FlipIt 等模型 · regret 迭代求稳健防御
拍卖与广告 不完全信息出价 · 多方竞争 贝叶斯纳什 · 机制设计 + 参与者防剥削策略
外交 / 谈判 多人 · 联盟可变 · 通信与欺骗 均衡求解 + LLM(Cicero);与扑克 CFR 研究路径最接近
军事推演 情报不完全 · 红蓝对抗 稳健策略计算 · 与 Pluribus 类 AI 同属 strategic 求解
体育零和 双行动选择 · 收益矩阵已知 经典混合策略纳什 · 理解 GTO 的入门实例
与本研究的对应关系: 本仓库以德州扑克为切入点实践 CFR 与 GTO 工具链—— 离线侧重 quasi-GTOequity-eval,数据侧用 phh-pretreat, 在线侧重 analysis-service + pokershow。 扑克是 imperfect-information 博弈的「天然试验场」;上述其他领域则展示同一套博弈论工具在更宽场景中的迁移潜力。

现代 GTO vs 现代深度学习(含 LLM)

两者都能「下棋/打牌」,但优化目标、可解释性与数据需求截然不同。

🃏 GTO / CFR 求解

  • 目标明确:收敛到纳什均衡(或 ε-纳什),有博弈论保证。
  • 自我对弈:主要依赖博弈规则与 regret 迭代,不需人类牌谱。
  • 输出形式:每个信息集上的概率分布(策略表),可审计、可可视化。
  • 泛化方式:通过抽象与博弈结构迁移,而非统计拟合。
  • 弱点:状态空间大时计算昂贵;抽象损失精度;多人博弈理论更难。

🧠 深度神经网络 / LLM

  • 目标灵活:最小化预测误差或最大化奖励,不保证纳什均衡。
  • 数据驱动:需要大量标注数据或强化学习样本,易过拟合训练分布。
  • 输出形式:黑盒权重;LLM 生成自然语言,擅长解释与推理表达。
  • 泛化方式:从统计模式泛化,遇分布外局面可能崩溃。
  • 优势:感知复杂特征、处理非结构化输入(文字牌谱、语音、图像)。

LLM 特别说明

大语言模型(如 GPT 系列)是通用序列预测器,在扑克场景中可以:

但 LLM 不会在内部精确求解纳什均衡——它的「策略建议」来自训练语料的统计关联, 可能出现幻觉、数值不准、对细粒度混合频率缺乏校准。 因此:LLM 是优秀的解说员与助手,不是 GTO 求解器替代品。

一句话对比: CFR 用数学均衡;神经网络用数据模式;LLM 用文本道理。 三者互补,而非互相取代。

GTO 算法如何与深度学习结合?

当前工业界与学术界的主流路径是「神经网络做函数近似 + CFR 做均衡求解」。

🔗

Deep CFR

用两个网络分别近似 regret 与策略,替代巨大 lookup table。训练循环仍是 CFR 框架,网络只是压缩存储。

代表:DeepStack, ReBeL
🎲

价值网络 + 搜索

神经网络估计局面 EV 或行动价值,CFR/MCCFR 在局部子博弈中实时搜索(Subgame Solving),用于实时辅助决策。

代表:Libratus 子博弈求解
📊

策略蒸馏(Distillation)

先用 CFR 在抽象游戏上求高精度策略,再用神经网络蒸馏为快速推理模型,部署到实时工具或 APP。

工程落地常见
💬

LLM + GTO 引擎

LLM 负责自然语言交互与教学叙事;后端 CFR/权益引擎负责数值与频率。用户问「BTN 开池 A2s 频率」,由引擎算、LLM 讲。

产品化方向

典型混合架构

数据层手牌历史 PHH
预处理分类 / 过滤
权益引擎精确 / MC
CFR 求解翻前 / 子博弈
解说服务LLM + API
前端博弈秀

这一流水线正是下文研究项目的整体设计思路: 从原始牌谱到可求解的数据集,从 equity 评估到 quasi-GTO 策略, 经分析服务生成解说与权益数据,最终通过「博弈秀」等产品触达大众。

研究与开源代码库

以下五个项目构成一条完整的「扑克 GTO 研究 → 工具 → 解说服务 → 大众传播」链路, 由 lindede 维护。

1

phh-pretreat · 手牌数据预处理

github.com/lindede/pokerapp-phh_dataset_pretreatment

C++20 命令行工具。批量读取 .phh / .phhs 手牌历史, 按 YAML 配置维度(variant、depth_bb、ante、table_size 等)分类过滤, 输出分层目录下的分卷数据集,为后续 CFR 训练与统计分析提供干净输入。

  • 流水线:Ingest → Parse → Filter → Classify → Output
  • 支持 dry-run、分卷追加、progress 进度输出
  • 示例输出路径:V1/NLH/BB100/NoAnte/SixMax/
C++ yaml-cpp
2

phh-equity-eval · 权益计算引擎

github.com/lindede/pokerapp-phh_equity_eval

德州扑克 2–9 人权益计算器。支持精确枚举(PokerStove peval/penum)与蒙特卡洛采样, 以及 {AA,KK,AK}A2s+ALL 等范围语法—— 是 GTO 求解与手牌分析的基础数值组件。

  • 精确枚举:毫秒级完成已知手牌局面
  • MC 模式:-m 100000 处理 wildcard 大局面
  • 脚本友好:-c 仅输出百分比,--json 结构化输出
C++20 PokerStove
3

quasi-GTO · CFR 翻前求解器

github.com/lindede/pokerapp-quasi_GTO

基于 CFR 的 6-max 无限注德州翻前求解器(quasi-GTO)。 含 v2 / v3 / v4 多个迭代版本,v4 为当前默认实验路径, 支持并行训练、翻前 equity 矩阵缓存、HTML 策略表输出。

  • 算法核心:CFR regret 迭代 + 有界树深 + 终端 fallback 估值
  • 输出:翻前范围表(如 BTN RFI 频率),可生成 HTML 可视化图表
  • 诊断:训练进度、visited nodes、cache hit/miss、overall_rfi 等
C++ CFR
4

phh-analysis-service · 手牌解说后端

github.com/lindede/pokerapp-phh_analysis_service

Python FastAPI 服务。将 .phhs 牌谱解析为统一 Hand IR, 再经大模型(OpenAI 兼容接口)生成整手摘要与逐行动中文解说; 对接 phh_equity_eval 产出逐步胜率,支持 Azure / DashScope TTS 语音预生成。 是「博弈秀」前端的数据与解说 API 后端。

  • 解析:POST /v1/hands/parse — PHHS → Hand IR
  • 解说:GET /v1/CommentaryLiteGET /v2/Commentary/data(读缓存);GET /v1/commentary2(在线 LLM)
  • Hero 视角:从 OBFU 源牌裁剪 phh_plus,第一人称提示词与 {n}-{hero} 解说产物
  • 附加数据:GET /v2/Commentary/additional/equity 动作后权益;/v2/Commentary/voice/* 语音 mp3
  • 离线工具链:pre_generate_datapre_generate_data_hero_basepre_generate_data_additonal 等批量预生成
Python FastAPI LLM
5

博弈秀(phh-pokershow)· 手牌解说与传播

github.com/lindede/pokerapp-phh_pokershow

uni-app + Vue 3 跨端前端。消费 analysis-service 的 /v1/v2 API, 将 GTO 概念与真实手牌结合,提供逐步回放、中文解说、语音播报、逐步胜率曲线—— 支持 H5、微信小程序等平台,面向浏览器与短视频生态传播。

  • by_action 时间线还原发牌、下注、摊牌
  • 对接权益 API,展示各步骤胜率变化
  • Hero 视角、横屏/录屏模式、稳定分享链接(k=all&id=
  • GTO 剥削技术讲解体验版——让大众「看得懂」而非「背表格」
Vue 3 uni-app

研究整体架构

扑克 GTO 研究架构:数据生产(预处理 → LLM 解说生成)与应用(后端服务 → 博弈秀前端)
架构分为数据生产应用两阶段:左侧从开源手牌历史经 phh-pretreat 预处理,再经第三方大模型生成解说文本与语音; 右侧将解说数据上传至 analysis-service 后端(权益计算依赖 equity-eval,GTO 策略研究依赖 quasi-GTO), 最终由 pokershow 前端 APP 呈现。
研究心得: 完整 GTO 求解器成本极高;quasi-GTO 通过有界树深与终端近似, 在可接受训练时间内得到近似均衡的翻前策略。 analysis-service 将 GTO 相关数值(权益曲线)与 LLM 自然语言解说结合, 由博弈秀前端呈现——这是「理论严谨 + 工程可行 + 大众可理解」的务实路径。

快速体验