# Poker Solver Lab — 算法、范围与评分口径

本升级在原训练系统上加入真正的 WebAssembly 翻后求解模式，不用大语言模型生成策略概率。

## 求解引擎

- WASM Postflop: https://github.com/b-inary/wasm-postflop
- 上游源码版本: 97360db7644329b1c23a7adf06e9aa59406e4d4b
- Rust postflop-solver: https://github.com/b-inary/postflop-solver/tree/9d1509fe5077d019825f833eed04b16d342dfda1
- 二进制来源: https://wasm-postflop.pages.dev/7e7987ad18d75b6fce10.wasm
- JS 胶水来源: https://wasm-postflop.pages.dev/7a023623e45ca364f00b.js
- 保留单线程 wasm-bindgen 接口，移除上游 UI 与分析脚本。浏览器独立 Worker 运行 DCFR。
- 许可证: AGPL-3.0-or-later，见 LICENSE.txt。完整对应源码见同目录 corresponding-source.zip，包含本系统源码、修改说明、上游源码和锁文件；构建指令见上游 README 与 package.json。二进制沿用上游发布制品，未独立重编译验证二进制可复现性。

## 求解的游戏

双人无限注德州扑克的**有限下注树**。可从翻牌、转牌或河牌开始，所有剩余公共牌进入同一棵树。非全下加注、下注尺度由用户选择。默认无 donk 分支（面对上街进攻者时不增加独立领先下注尺度），开启全下添加阈值 0.15、强制全下阈值 0.05、不合并相近尺度。最多 384 MiB 压缩策略存储。

预设范围是人工训练假设，不是翻前求解结果。完整组合权重、公共牌阻断和冲牌关系参与计算，不按玩家暗牌修改对手范围。发牌按合法联合权重抽样；AI 查询时只使用自己的牌和公共历史。原版连续比赛仍使用原有人工翻前范围与启发式模型，原河牌求解仍保留。多人、ICM、奖金结构、翻前均衡不在新引擎覆盖范围。

## 精度与评分

- 默认目标可利用度 0.05% 起始底池，可选 0.02% 或 0.10%。上限 3,000 次迭代或约 4 分钟（在每 10 次迭代后检查），显示实测值而非宣称必达。
- exploitability 采用上游引擎的双方最佳应对指标，不把它当作任意单一节点的误差保证。抽水时按上游含抽水终局效用求解，不能套用零和游戏的完整理论保证。
- 动作 EV 为上游当前信息集 actionEV。选择损失 = 该手牌可选动作的最大 EV − 实际选择的 EV；单位固定为 100 内部筹码 = 1 BB。不按最终输赢打分。
- 节点评分要求：全局可利用度 ≤ 0.1% 起始底池、自身路径到达 ≥ 0.1%、未被本手阻断的对手剩余质量比例 ≥ 0.1%、局部加权残差 ≤ 0.1% 底池、频率 ≥ 0.4% 的动作间最高 EV 差 ≤ 0.5% 底池。此门槛是实用质量筛选，不是单节点严格误差证明。
- 原始混合频率全部保留并归一化供 AI 抽样，不人为添加噪声、不因低频就判为错误。不满足门槛的节点仅显示参考数值，不计入评分损失。
- 范围输入错误、下注抽象过粗、罕见路径都可能使建议偏离实际牌局；低可利用度不能证明输入范围正确，也不能证明与某商业求解器完全相同。
- 训练记录包括输入范围、树、公共牌、双方手牌、行动路径、动作 EV 与精度。仅保存在当前浏览器最近 100 手，可导出 JSON。

## 验证与限制

交付包含牌组/范围转换与阻断测试、联合发牌分布测试、评分门槛测试、真实 WASM 工作线程路径测试、原牌局筹码守恒测试，以及两套独立引擎在同一河牌全下树上的数值比较。翻牌实际完成计算的烟测也记录在项目 VALIDATION.md。

未对商业 PioSOLVER / GTO+ 做本项目的独立同输入对拍，因此不宣称本应用已达到商业求解器全场景精度。上游项目自己的对照结果可在其 README 查阅，不能替代本应用验证。
