枚举法:把所有可能的发牌组合都算一遍,得到精确值。翻牌圈还剩 45 张未知牌,转牌河牌两张的组合数是 C(45,2) = 990 种,算得完。所以翻牌圈的胜率可以做到精确。
抽样法:随机发牌几十万次,统计赢的比例。转牌圈未知牌 44 张,河牌一张,组合数不多;但如果要考虑对手范围(几十上百种手牌),组合数就爆炸了,只能抽样。
成熟的实现会混合用:能枚举的地方枚举,涉及范围的地方抽样。
统计上,误差与抽样次数的平方根成反比。粗略的换算:
| 抽样次数 | 典型误差 | 感受 |
|---|---|---|
| 5,000 | ±1.4 个点 | 边缘牌会看到明显跳动 |
| 20,000 | ±0.7 个点 | 基本够用 |
| 100,000 | ±0.3 个点 | 肉眼看不出来 |
| 1,000,000 | ±0.1 个点 | 实战完全没必要 |
所以「同一手牌两次算出 62% 和 63%」是正常的。但如果两次差 5 个点以上,那就不是抽样误差,是代码有 bug 或者范围设错了。
抽样只影响小数点后一位,范围建模能影响 10 个百分点。
举例:你手里 AKo,翻牌 K-7-2。对手在枪口位加注后跟了你的 3-bet。
差 23 个点。这不是算法精度问题,是「对手不可能拿 72o 跟你 3-bet」这个基本事实没被考虑进去。
所以判断一个工具好不好,别问它抽样多少次,问它「对手 UTG 开池的范围是什么」——答得出来才有模型。
弃牌的人手里有牌,那些牌不在牌堆里了。严格算要把已弃的牌也排除,但工具通常不知道别人弃了什么,只能忽略。这会让胜率略微偏高(对你和对手都偏高)。
平局算赢还是算一半?算一半才对(分池)。有些实现把平局直接算赢,长期看会高估胜率。
简单实现只看「现在这条街的直接补牌」,不算后门同花/后门顺。这会在翻牌圈低估边缘牌的胜率,差 2~4 个点。
三步,十分钟能做完:
三步都过,这个工具的数学部分就可以信了。剩下的问题在识别层和决策层。
问得最多的几个,直接给答案。
同一个工具的不同角度,点进去看细节。