鱼局面全穷举 × 对手 open 穷举 —— 跟注范围与 open 尺寸两问 ·
执行依据:研究方案_v2_穷举测试.md · 参数口径 2026-08-02 已确认
★ 游戏计划(先看这个) 研究一 · 跟注 / 3B / 弃牌 研究二 · Open 尺寸 附录 · 口径、权重与边界
先看自己几条鱼定档位, 再看「被跟注后我有多少胜率」定动作 —— 尺寸永远取小。
鱼数决定的是你输得起输不起,胜率决定的是 3B 还是弃,这两件事分开做。 手牌强度不进第一顺位。
playbook_v2.py,同内容 md 见 打法方案_v2.md。23,112 格里 23,112 格的最优尺寸都是 20BB。对手的弃牌率不随你的尺寸变化,加码换不来更多弃牌, 只是把自己的钱推进一个概率没变的池子。每多开 1BB 的代价是 -0.40BB(对手爱3B时)到 -0.22BB(对手爱跟时)—— 开到 60BB 而不是 20BB,白扔 8~16BB。
| 我的鱼数 | 场景A 30/50/20 · 胜率30 | 场景A 30/50/20 · 胜率40 | 场景B 30/60/10 · 胜率30 | 场景B 30/60/10 · 胜率40 |
|---|---|---|---|---|
| 0 条 | 47 | 61 | 55 | 77 |
| 1 条 | 41 | 52 | 45 | 52 |
| 2 条 | 69 | 86 | 73 | 77 |
| 3 条 | 92 | 119 | 101 | 102 |
| 4 条 | 103 | 86 | 129 | 126 |
| 5 条 | 98 | 102 | 87 | 怎么开都行 |
| 6+ 条 | 126 | 144 | 122 | 怎么开都行 |
「怎么开都行」= 该档整段 20~150BB 都优于弃牌。
数据来源:open_summary.json → crossing_by_my / slope_bb_per_bb
低于表里的数就别 3B。3B 尺寸 4 × open, 「跟注」那条基准假设你跟注时有 30% 胜率。
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 48% | 49% | 50% | 51% | 53% | 56% | 58% |
| 1 条 | 51% | 52% | 53% | 54% | 57% | 59% | 61% |
| 2 条 | 45% | 46% | 48% | 49% | 50% | 54% | 56% |
| 3 条 | 42% | 43% | 45% | 47% | 48% | 50% | 53% |
| 4 条 | 35% | 37% | 40% | 42% | 43% | 45% | 47% |
| 5 条 | 33% | 34% | 37% | 39% | 41% | 43% | 45% |
| 6+ 条 | 35% | 36% | 39% | 41% | 43% | 45% | 47% |
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 32% | 33% | 34% | 35% | 37% | 41% | 44% |
| 1 条 | 36% | 36% | 37% | 39% | 41% | 45% | 47% |
| 2 条 | 29% | 30% | 32% | 33% | 34% | 38% | 41% |
| 3 条 | 26% | 27% | 29% | 30% | 31% | 33% | 37% |
| 4 条 | 20% | 21% | 23% | 25% | 27% | 29% | 30% |
| 5 条 | 17% | 19% | 21% | 23% | 24% | 27% | 28% |
| 6+ 条 | 19% | 21% | 23% | 25% | 26% | 28% | 30% |
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 3% | 3% | 2% | 2% | 3% | 8% | 12% |
| 1 条 | 6% | 5% | 4% | 6% | 9% | 13% | 16% |
| 2 条 | 1% | 1% | 1% | 1% | 1% | 5% | 9% |
| 3 条 | 0% | 0% | 0% | 0% | 0% | 0% | 4% |
| 4 条 | 0% | 0% | 0% | 0% | 0% | 0% | 0% |
| 5 条 | 0% | 0% | 0% | 0% | 0% | 0% | 0% |
| 6+ 条 | 0% | 0% | 0% | 0% | 0% | 0% | 0% |
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 27% | 21% | 13% | 8% | 4% | 1% | 0% |
| 1 条 | 1% | 1% | 0% | 0% | 0% | 0% | 0% |
| 2 条 | 25% | 22% | 11% | 11% | 3% | 0% | 0% |
| 3 条 | 40% | 30% | 30% | 26% | 15% | 15% | 5% |
| 4 条 | 81% | 50% | 50% | 40% | 33% | 19% | 19% |
| 5 条 | 68% | 68% | 58% | 58% | 34% | 26% | 11% |
| 6+ 条 | 77% | 77% | 52% | 42% | 27% | 12% | 2% |
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 92% | 92% | 87% | 71% | 59% | 48% | 38% |
| 1 条 | 57% | 57% | 57% | 50% | 17% | 17% | 7% |
| 2 条 | 100% | 100% | 100% | 72% | 72% | 61% | 32% |
| 3 条 | 100% | 100% | 100% | 100% | 100% | 76% | 76% |
| 4 条 | 100% | 100% | 100% | 100% | 100% | 81% | 81% |
| 5 条 | 100% | 100% | 100% | 100% | 100% | 100% | 84% |
| 6+ 条 | 100% | 100% | 100% | 100% | 100% | 100% | 90% |
| 我的鱼数 | open 25 | open 30 | open 40 | open 50 | open 60 | open 80 | open 100 |
|---|---|---|---|---|---|---|---|
| 0 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 1 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 2 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 3 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 4 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 5 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| 6+ 条 | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
数据来源:playbook_v2.py(指纹与加权同研究一, 3B 参数放开到现实区间)
| 我的鱼数 | 弃牌EV(BB) | 可跟 open 上限(BB) | p* @25 | p* @30 | p* @40 | p* @50 | p* @60 | p* @80 | p* @100 |
|---|---|---|---|---|---|---|---|---|---|
| 0 条 | -29.8 | 55 | 16% | 20% | 25% | 29% | 31% | 35% | 38% |
| 1 条 | -1.0 | 41 | 19% | 23% | 28% | 32% | 34% | 38% | 40% |
| 2 条 | -1.0 | 64 | 14% | 18% | 23% | 26% | 29% | 33% | 36% |
| 3 条 | -1.0 | 79 | 12% | 15% | 20% | 23% | 26% | 30% | 33% |
| 4 条 | -1.0 | 94 | 9% | 11% | 15% | 18% | 21% | 25% | 28% |
| 5 条 | -1.0 | 139 | 7% | 9% | 13% | 16% | 18% | 22% | 26% |
| 6+ 条 | -1.0 | 120 | 8% | 11% | 14% | 18% | 20% | 24% | 28% |
可跟上限按赢率 30% 算; p* 那几列是纯门槛,不依赖任何假设胜率。
数据来源:playbook_v2.py → maxcall / pstar / foldev
弃牌 EV 中位 -29.8BB —— 别人弃牌只亏 1BB,你亏 30BB。跟注门槛放到 25%(面对 40BB open),可跟到 55BB。这不是牌变好了,是「弃牌」这个选项对你不存在。
四个指标同时在这里掉头:临界赢率最高(28% @40BB)、可跟上限最低(41BB)、3B 门槛最高(37% @40BB / 胜率30)、自己 open 的上限也最低(41BB)。免赔威胁刚归零、Δ 还只有 5~10BB —— 既没有必须赌的理由,也没有值得赌的回报。
可跟上限 64~79BB,3B 门槛 29~32%(@40BB / 胜率30)。标准打法,没有特殊调整。
可跟上限 94~139BB,3B 门槛掉到 21~23%。鱼池快见底时预期输家从 1 人变 2 人,Δ 直接翻倍 —— 收官阶段反而是最该进攻的时候,不是保成果的时候。
网格:214 指纹(加权还原 718 局面)× open 25~100BB 每 5BB = 3,424 格 · pot = open + 9.5、 call = open − 9.5、赢牌概率固定 30% · 3B 尺寸 4 × open、对手弃3B 50%、 3B被跟后胜率 50%
p* = 跟注与弃牌打平所需的赢牌概率。曲线越低=可跟范围越宽。16 档 open 全部单调上升;1 条鱼那条线全程最高,0 条鱼反而比 1 条低——因为 0 条鱼弃牌要额外吞掉 q×Pen。
数据来源:call_fish_summary.json → pstar_by_my_open(按局面数加权,我的鱼数 6 条及以上并档 6+) · 图文件 data_v2/figs/study1_pstar_by_my.svg
换成按「赢下本手的边际价值 Δ」分组:Δ 越大,跟注门槛整体下移,而且高 Δ 组对 open 尺寸更不敏感(线更平)。
数据来源:call_fish_summary.json → pstar_by_dq_open(Δ 按局面数加权五等分) · 图文件 data_v2/figs/study1_pstar_by_dq.svg
固定赢率 30% 下,该鱼数档里有多少比例的局面 ev_call > ev_fold。1 条鱼的曲线塌得最快:open 到 45BB 就只剩一半局面能跟。
数据来源:call_fish_summary.json → callok_by_my_open · 图文件 data_v2/figs/study1_callok_by_my.svg
锁定的 3B 参数(对手弃3B 50%、被跟后胜率 50%)下 3B 在全部 3,424 格里都是三选一最优,三色地图会是纯色一片,所以这里画的是「把 3B 拿掉之后,CALL 与 FOLD 的胜负」。3B 为什么这么强,见图8。
数据来源:call_fish_summary.json → callok_by_my_open / action_share_by_my_open · 图文件 data_v2/figs/study1_decision_map.svg
余量过 0 线的位置就是该档的可跟上限。1 条鱼几乎贴着 0 线走,跟不跟差别极小、错一点就亏;4 条以上余量长期在 +20BB 以上。
数据来源:call_fish_summary.json → margin_by_my_open · 图文件 data_v2/figs/study1_margin.svg
每个指纹在 25~100BB 里能跟到的最大 open,按局面数加权取分位。100BB 是网格上界,落在这一档的意思是「整段都能跟」,真实上限见图7。
数据来源:call_fish_summary.json → maxopen_by_my · 图文件 data_v2/figs/study1_maxopen_by_my.svg
对每个指纹二分求解 ev_call = ev_fold 的那个 open(1BB 取整),不受 100BB 网格上界影响。鱼数每多一条,可跟上限就往外推一截,1 条鱼是全场最低点。
数据来源:call_fish_summary.json → maxopen_cont_by_my(二分解,容差 <1e-9) · 图文件 data_v2/figs/study1_maxopen_cont.svg
本图是解释性补充,用的不是锁定参数(锁定值=弃3B 50% / 被跟胜率 50%,即右下角那格,3B 占优 100%)。格里数字=3B 为三选一最优的局面占比。只有当胜率跌到 20% 以下、且对手基本不弃 3B 时,3B 才不再全面占优。
数据来源:call_fish_summary.json → sensitivity_3b(非锁定参数,仅用于解释图4) · 图文件 data_v2/figs/study1_3b_sensitivity.svg
网格:214 指纹 × open 20~150BB 每 5BB × 2 场景(A 30/50/20、B 30/60/10)× 2 档被跟注胜率(30 / 40)= 23,112 格 · 被 3B 我 100% 弃牌 · 尺寸弹性 = 0
七条线全部单调下行——尺寸弹性锁死为 0,加大尺寸换不来更多弃牌,只是把自己的投入放大。最优点因此永远落在网格下界。
数据来源:open_summary.json → ev_curve(场景A / 被跟注胜率30) · 图文件 data_v2/figs/study2_ev_curve_by_my.svg
对手画像和被跟注胜率只改变曲线的高度和斜率,不改变最优点位置;它们真正改变的是这条线什么时候跌破灰色弃牌基准(=盈亏临界尺寸)。
数据来源:open_summary.json → ev_curve / evfold_by_my · 图文件 data_v2/figs/study2_ev_curve_scenarios.svg
曲线是直线,斜率与鱼局面无关(Δ 和 q×Pen 只平移不改斜率)。被跟注胜率越高、对手 3B 越少,加码的代价越小,但始终为负。
数据来源:open_summary.json → slope_bb_per_bb · 图文件 data_v2/figs/study2_slope.svg
23,112 格全部撞网格下界 20BB,分布直方图退化成一根柱子,四个面板完全一样。这是弹性=0 的直接后果,不是数据出错——详见附录「撞边界说明」。
数据来源:open_summary.json → best_by_my / edge_hits_weight · 图文件 data_v2/figs/study2_best_hist.svg
总EV 曲线跌破弃牌基准的那个尺寸——open 超过它就不如直接弃牌。灰格=该档没有交点(整段 20~150BB 都优于弃牌)。1 条鱼那行数字最小:最没有余地的一档。
数据来源:open_summary.json → crossing_by_my(线性插值口径,同 find_ev_crossings) · 图文件 data_v2/figs/study2_crossing_by_my.svg
Δ 越大,能承受的 open 越大;高 Δ 组直接没有交点(灰格),意味着赢下本手的边际价值足够高时,怎么开都比弃牌强。
数据来源:open_summary.json → crossing_by_dq · 图文件 data_v2/figs/study2_crossing_by_dq.svg
参数越软(对手更常跟、我胜率更高),越多局面变成「全程优于弃牌」——不是尺寸变好了,是弃牌变得更差。
数据来源:open_summary.json → crossing_by_my / no_crossing_weight · 图文件 data_v2/figs/study2_nocross.svg
8 人局、鱼池 11 条。枚举「别人持鱼分布 × 我的鱼数 × 额外鱼」 的全部组合,保留同时满足以下条件的局面:
共 718 个合法局面。整个鱼局势只通过两个标量进入所有 EV 公式:赢下本手的边际价值 Δ,与成为输家的风险 q×Penalty。两个局面只要这 两个数相同,后续每一条 EV 都逐位相同,可以合并计算一次 —— 于是 718 个局面压成 214 个指纹 (压缩 3.4×,无损)。
映射表:data_v2/states_n8.csv.gz,
每个局面一行,带 fid、Δ、q×Pen、Δ 五分位。
所有聚合不按指纹等权,而是按每个指纹覆盖的合法局面数加权, 把结果还原到 718 个局面的总体;按「我的鱼数」分组时, 权重是该指纹里属于这一档的局面数(同一指纹可能横跨多个鱼数)。 每张图的权重总和都等于 718。
Δ 五分位同样按局面数加权五等分:Δ1 5~10BB / Δ2 15~20BB / Δ3 25~50BB / Δ4 60~100BB / Δ5 120~450BB。
| 参数组合 | 最优在下界 20BB | 最优在内点 | 最优在上界 150BB | 指纹数(下界) |
|---|---|---|---|---|
| 场景A 30/50/20 · 胜率30 | 718 | 0 | 0 | 214 |
| 场景A 30/50/20 · 胜率40 | 718 | 0 | 0 | 214 |
| 场景B 30/60/10 · 胜率30 | 718 | 0 | 0 | 214 |
| 场景B 30/60/10 · 胜率40 | 718 | 0 | 0 | 214 |
单位=局面数(总体 718)。 四组参数全部 100% 撞下界:真实最优可能小于 20BB, 本报告不做网格外外推。研究一的「可跟 open 上限」同样会撞 100BB 上界,因此另用二分求了不受网格限制的连续解(图7)。
squid_engine.selftest():闭式解 vs 桌面版 calc_ev
(240 组)、Open 总EV vs 独立参照实现(200 组)、3B 所需弃牌率自洽(589 组),
容差 1e-9,全绿才允许出数。verify_v2.py:3 个格子做手算 × 桌面版引擎 × 落盘 CSV
三方对账,记录在 data_v2/对账日志.md。python squid_study_v2.py(先 --quick 冒烟),
再 python make_report_v2.py。图表格式说明:方案里写的是 .png,但本机 matplotlib 与
NumPy 2.x 不兼容(import 即崩),因此改用项目自带的手写 SVG 图表模块
svgchart.py,图文件落 data_v2/figs/*.svg,
同时内嵌进本页,离线可看、放大不糊。
| 文件 | 内容 | 行/格数 |
|---|---|---|
data_v2/call_fish_grid.csv.gz |
研究一逐格明细(输入回声 + ev_fold/ev_call/p_star/ev_3b/f_star/best) | 3,424 |
data_v2/open_grid.csv.gz |
研究二逐格明细(ev_open_total / ev_fold / margin_vs_fold) | 23,112 |
data_v2/states_n8.csv.gz | 局面 → 指纹映射表 | 718 |
data_v2/call_fish_summary.json | 研究一聚合 | — |
data_v2/open_summary.json | 研究二聚合 | — |
data_v2/对账日志.md | 3 格人工对账记录 | 3 |