什么是 GTO?
GTO 不是「一种打法」,而是在博弈论意义下无法被剥削的最优混合策略。
在德州扑克中,两位玩家如果都采用 GTO 策略对局,长期来看谁也无法从对方身上稳定获利—— 这对应博弈论中的纳什均衡(Nash Equilibrium): 给定对手策略不变,任何一方单独改变策略都无法提高期望收益。
混合策略
GTO 很少是「永远下注」或「永远弃牌」。同一局面下,最优解往往是按一定频率随机选择多个行动(如 70% 加注、30% 过牌)。
不可剥削
采用 GTO,对手无论多聪明都无法通过针对性调整来稳定赢你。代价是:对弱玩家你也无法最大化剥削他们的错误。
平衡(Balance)
GTO 要求你的下注范围里既有强牌也有诈唬,让对手跟注或弃牌都占不到便宜——这就是「范围平衡」。
一个极简例子
想象河牌圈你下注 100,底池 100。若你只下注坚果牌,对手永远弃牌,你赢不大; 若你只诈唬,对手永远跟注,你输光。 GTO 会在价值牌与诈唬牌之间分配下注频率,使对手跟注或弃牌的 EV(期望值)相等—— 这就是无差别原理(Indifference Principle)。
实现 GTO 的核心算法
扑克的状态空间巨大(尤其翻前 169 种起手牌 × 多种行动 × 多人), 无法像井字棋那样穷举。现代 GTO 求解依赖迭代 regret 最小化类算法。
博弈树与 Regret
把扑克抽象成扩展式博弈树:每个节点是某个决策点,边是行动,叶节点是摊牌或弃牌后的收益。 「Regret(遗憾值)」衡量:「如果过去在这个节点选了别的行动,我会多赚多少」。 算法通过反复自我对弈,让各节点的 regret 趋近于零,策略就收敛到纳什均衡。
| 核心思想 | 特点 | |
|---|---|---|
| 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 与策略平均做折扣加权,进一步加速收敛。 | 近年求解器常用变体,在速度与精度间折中。 |
算法演进脉络
为什么需要「抽象(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 MCCFRAI 对战与人类基准
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 的入门实例 |
quasi-GTO 与 equity-eval,数据侧用 phh-pretreat,
在线侧重 analysis-service + pokershow。
扑克是 imperfect-information 博弈的「天然试验场」;上述其他领域则展示同一套博弈论工具在更宽场景中的迁移潜力。
现代 GTO vs 现代深度学习(含 LLM)
两者都能「下棋/打牌」,但优化目标、可解释性与数据需求截然不同。
🃏 GTO / CFR 求解
- 目标明确:收敛到纳什均衡(或 ε-纳什),有博弈论保证。
- 自我对弈:主要依赖博弈规则与 regret 迭代,不需人类牌谱。
- 输出形式:每个信息集上的概率分布(策略表),可审计、可可视化。
- 泛化方式:通过抽象与博弈结构迁移,而非统计拟合。
- 弱点:状态空间大时计算昂贵;抽象损失精度;多人博弈理论更难。
🧠 深度神经网络 / LLM
- 目标灵活:最小化预测误差或最大化奖励,不保证纳什均衡。
- 数据驱动:需要大量标注数据或强化学习样本,易过拟合训练分布。
- 输出形式:黑盒权重;LLM 生成自然语言,擅长解释与推理表达。
- 泛化方式:从统计模式泛化,遇分布外局面可能崩溃。
- 优势:感知复杂特征、处理非结构化输入(文字牌谱、语音、图像)。
LLM 特别说明
大语言模型(如 GPT 系列)是通用序列预测器,在扑克场景中可以:
- 解读手牌历史、生成中文解说、回答「这手牌 GTO 吗」类问题;
- 辅助教学、复盘、内容创作(如短视频脚本);
但 LLM 不会在内部精确求解纳什均衡——它的「策略建议」来自训练语料的统计关联, 可能出现幻觉、数值不准、对细粒度混合频率缺乏校准。 因此:LLM 是优秀的解说员与助手,不是 GTO 求解器替代品。
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 讲。
产品化方向典型混合架构
这一流水线正是下文研究项目的整体设计思路: 从原始牌谱到可求解的数据集,从 equity 评估到 quasi-GTO 策略, 经分析服务生成解说与权益数据,最终通过「博弈秀」等产品触达大众。
研究与开源代码库
以下五个项目构成一条完整的「扑克 GTO 研究 → 工具 → 解说服务 → 大众传播」链路, 由 lindede 维护。
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/
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结构化输出
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 等
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/CommentaryLite、GET /v2/Commentary/data(读缓存);GET /v1/commentary2(在线 LLM) - Hero 视角:从 OBFU 源牌裁剪
phh_plus,第一人称提示词与{n}-{hero}解说产物 - 附加数据:
GET /v2/Commentary/additional/equity动作后权益;/v2/Commentary/voice/*语音 mp3 - 离线工具链:
pre_generate_data、pre_generate_data_hero_base、pre_generate_data_additonal等批量预生成
博弈秀(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 剥削技术讲解体验版——让大众「看得懂」而非「背表格」
研究整体架构
phh-pretreat 预处理,再经第三方大模型生成解说文本与语音;
右侧将解说数据上传至 analysis-service 后端(权益计算依赖
equity-eval,GTO 策略研究依赖 quasi-GTO),
最终由 pokershow 前端 APP 呈现。
快速体验
- 预处理:
phh-pretreat run -c config.yaml --root ./hands -o ./output - 权益:
pokerapp-phh_equity_eval.exe equity -h AcAs,KcKd -b 5c8s9h -c - 求解:
gto_m1.exe v4 BTN preflop_chart_v4_btn.html - 解说后端:
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 - 前端:
npm run dev启动博弈秀 H5 开发服务(代理/v1、/v2到后端)