← 返回主页 德州扑克学校 · 免费专区

鱿鱼策略研究 V2

鱼局面全穷举 × 对手 open 穷举 —— 跟注范围与 open 尺寸两问 · 执行依据:研究方案_v2_穷举测试.md · 参数口径 2026-08-02 已确认

718
合法鱼局面
8人 / 11 池,穷举无遗漏
214
(Δ, q×Pen) 指纹
无损压缩 3.4×
3,424
研究一格子
214 指纹 × 16 档 open
23,112
研究二格子
214 × 27 尺寸 × 2 场景 × 2 胜率
先读这一段。本次两组扫描各自撞上了一个「退化解」, 它们是锁定参数的算术后果,不是数据错误:
① 研究一锁定的 3B 参数(对手弃3B 50% / 被跟后胜率 50%)让 3B 在全部 3,424 格里通吃,所以跟注范围的结论都在 「把 3B 拿掉」的口径下给出;
② 研究二锁定尺寸弹性 = 0,加大 open 换不来更多弃牌, 总EV 对尺寸严格单调递减,23,112 格的最优尺寸全是网格下界 20BB,所以该研究真正有信息量的输出是「盈亏临界尺寸」而不是 「最优尺寸」。

★ 游戏计划(先看这个) 研究一 · 跟注 / 3B / 弃牌 研究二 · Open 尺寸 附录 · 口径、权重与边界

★ 游戏计划 —— 照着这个打

总纲一句话

先看自己几条鱼定档位, 再看「被跟注后我有多少胜率」定动作 —— 尺寸永远取小。

鱼数决定的是你输得起输不起,胜率决定的是 3B 还是弃,这两件事分开做。 手牌强度不进第一顺位。

这一章的数字不是研究锁定参数下的输出。 研究锁定的 3B 参数(对手弃3B 50% / 被跟后胜率 50%)让 3B 在 3,424 格里全部通吃、所需弃牌率恒为 0,桌上没法当门槛用。 本章把这两个参数放开到现实区间反算门槛,属于把研究结论翻译成打法时的 必要外推;Δ 与 q×Penalty 仍走同一套指纹与同一套加权。 生成脚本 playbook_v2.py,同内容 md 见 打法方案_v2.md

第一步 · 自己 open:能开多小开多小

23,112 格里 23,112 格的最优尺寸都是 20BB。对手的弃牌率不随你的尺寸变化,加码换不来更多弃牌, 只是把自己的钱推进一个概率没变的池子。每多开 1BB 的代价是 -0.40BB(对手爱3B时)到 -0.22BB(对手爱跟时)—— 开到 60BB 而不是 20BB,白扔 8~16BB。

尺寸上限(超过它不如直接弃牌,BB · 中位数)

我的鱼数场景A 30/50/20 · 胜率30场景A 30/50/20 · 胜率40场景B 30/60/10 · 胜率30场景B 30/60/10 · 胜率40
0 条47615577
1 条41524552
2 条69867377
3 条92119101102
4 条10386129126
5 条9810287怎么开都行
6+ 条126144122怎么开都行

「怎么开都行」= 该档整段 20~150BB 都优于弃牌。

数据来源:open_summary.json → crossing_by_my / slope_bb_per_bb

第二步 · 面对 open:3B 需要对手弃多少才不亏

低于表里的数就别 3B。3B 尺寸 4 × open, 「跟注」那条基准假设你跟注时有 30% 胜率。

3B 被跟注后我的胜率 = 20%

我的鱼数open 25open 30open 40open 50open 60open 80open 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%

3B 被跟注后我的胜率 = 30%

我的鱼数open 25open 30open 40open 50open 60open 80open 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%

3B 被跟注后我的胜率 = 40%

我的鱼数open 25open 30open 40open 50open 60open 80open 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%
执行规则 被跟后有 40% 胜率 → 无脑 3B(门槛趴在 0~9%,对手一次都不弃你也不亏); 30% 胜率 → 看鱼(鱼 ≥3 条时门槛只要 29~21%,正常对手就够; 鱼 0~1 条要 34~37%, 不够就弃);20% 胜率 → 基本别 3B(要 37~53% 的弃牌率, 桌上很少有人这么软)。

对手弃 3B 40% 时, 3B 优于跟注/弃牌的局面占比

胜率 20%

我的鱼数open 25open 30open 40open 50open 60open 80open 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%

胜率 30%

我的鱼数open 25open 30open 40open 50open 60open 80open 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%

胜率 40%

我的鱼数open 25open 30open 40open 50open 60open 80open 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 参数放开到现实区间)

第三步 · 跟注:只在 3B 不达标时考虑,且有硬上限

我的鱼数弃牌EV(BB)可跟 open 上限(BB)p* @25p* @30p* @40p* @50p* @60p* @80p* @100
0 条-29.85516%20%25%29%31%35%38%
1 条-1.04119%23%28%32%34%38%40%
2 条-1.06414%18%23%26%29%33%36%
3 条-1.07912%15%20%23%26%30%33%
4 条-1.0949%11%15%18%21%25%28%
5 条-1.01397%9%13%16%18%22%26%
6+ 条-1.01208%11%14%18%20%24%28%

可跟上限按赢率 30% 算; p* 那几列是纯门槛,不依赖任何假设胜率。

数据来源:playbook_v2.py → maxcall / pstar / foldev

四张打法卡

0 条鱼 —— 你在流血,必须动手

弃牌 EV 中位 -29.8BB —— 别人弃牌只亏 1BB,你亏 30BB。跟注门槛放到 25%(面对 40BB open),可跟到 55BB。这不是牌变好了,是「弃牌」这个选项对你不存在。

1 条鱼 —— 全场最紧的一刻,立刻收手

四个指标同时在这里掉头:临界赢率最高(28% @40BB)、可跟上限最低(41BB)、3B 门槛最高(37% @40BB / 胜率30)、自己 open 的上限也最低(41BB)。免赔威胁刚归零、Δ 还只有 5~10BB —— 既没有必须赌的理由,也没有值得赌的回报。

2~3 条鱼 —— 恢复正常节奏

可跟上限 64~79BB,3B 门槛 29~32%(@40BB / 胜率30)。标准打法,没有特殊调整。

4 条以上 —— 踩满油门

可跟上限 94~139BB,3B 门槛掉到 21~23%。鱼池快见底时预期输家从 1 人变 2 人,Δ 直接翻倍 —— 收官阶段反而是最该进攻的时候,不是保成果的时候。

三个反直觉的点(别做反了)

1. 0 条鱼比 1 条鱼更该跟不是牌力问题,是弃牌基准差了 29BB:0 条 -29.8BB vs 1 条 −1.0BB。跟注门槛因此反而更低(25% vs 28%)。
2. 对手越软,你越不该开大软对手让 EV 曲线整体抬高、盈亏临界点右移(0 条鱼从 47BB 推到 77BB),但最优点一步没动,仍是网格下界 20BB。多出来的是容错空间,不是加码空间。
3. 1 条鱼时跟注余量只有 +1.3BB跟错弃错都只差一两个 BB,但它恰恰是最容易上头的一档 —— 刚摸到鱼,最想继续冲。

研究一 · 鱼局面 × 对手 open:跟注 / 3B / 弃牌

网格:214 指纹(加权还原 718 局面)× open 25~100BB 每 5BB = 3,424 格 · pot = open + 9.5、 call = open − 9.5、赢牌概率固定 30% · 3B 尺寸 4 × open、对手弃3B 50%、 3B被跟后胜率 50%

1. 锁定的 3B 参数下,3B 吃掉全部格子对手弃3B 50%、被跟后胜率 50%、尺寸 4×open —— 这组参数下 3,424 格全部判 3B 最优,CALL 与 FOLD 一格没占到。原因是 3B 的两条腿都太肥:50% 直接收下底池,另 50% 还有 50% 胜率去争一个已经被 Δ 放大的底池。所以「跟注范围」这个问题必须在把 3B 拿掉之后再看,本章其余结论都是 CALL vs FOLD 的口径。
逐格比 ev_3b 与 ev_call:3,424/3,424 格 3B 更高(占比恒 100%),所以方案 3.4-④ 要的「3B 边界」在锁定参数下整个网格里都不存在 —— 边界在参数空间里,不在 (open, 鱼局面) 平面上,见图8。
来源:call_fish_grid.csv.gz → best 列;call_fish_summary.json → b3_beats_call_by_my_open;分组:全部 214 指纹 × 16 档 open
2. 跟注门槛随 open 单调上升,没有例外逐指纹验证:214 个指纹里 0 个出现回落。以 40BB open 为例,临界赢率从 6+ 条的 14.8% 一路升到 1 条的 29.7%。可跟集合也全部是「低 open 全可跟、高 open 全不可跟」的连续前缀(反例 0 个),「可跟 open 上限」这个说法才站得住。
来源:call_fish_summary.json → pstar_by_my_open;分组:我的鱼数 × open
3. 1 条鱼是全场最紧的一档40BB open 下,1 条鱼的临界赢率 29.7% 是七档里最高,比 0 条高 5.9 个点,比 6+ 条高 14.9 个点(几乎两倍)。可跟局面占比只剩 51%,而 0 条还有 78%。刚拿到第一条鱼,就该切成全场最紧的节奏
来源:call_fish_summary.json → pstar_by_my_open / callok_by_my_open;分组:我的鱼数(6 条及以上并档)
4. 0 条鱼比 1 条鱼更该跟,因为弃牌本身在流血0 条鱼时弃牌要吞下 q×Pen,弃牌 EV 加权均值 -43.9BB;有鱼之后 q=0,弃牌 EV 恒为 −1BB。基准这么低,跟注自然更容易「优于弃牌」——这不是牌变好了,是另一个选项变得更烂了
来源:open_summary.json → evfold_by_my(两项研究共用同一套鱼标量)
5. 可跟 open 上限随鱼数抬升,1 条鱼是谷底网格口径(25~100BB)的中位上限:0 条 50BB、1 条 40BB、3 条 75BB、6+ 条 100BB。谷底在 1 条,不在 0 条。
来源:call_fish_summary.json → maxopen_by_my;分组:我的鱼数,按指纹覆盖局面数加权取分位
6. 网格上界把真实上限截掉了一大截解开 100BB 的网格限制后(二分求 ev_call = ev_fold 的连续解),加权均值分别是:0 条 69BB、1 条 43BB、4 条 134BB、5 条 140BB,最高的局面到 364BB。鱼多的时候,25~100BB 这段网格里根本没有「跟不起」的 open。
来源:call_fish_summary.json → maxopen_cont_by_my(二分解,1BB 取整)
7. Δ 是比鱼数更干净的解释变量按 Δ 五分位分组,40BB open 下的可跟局面占比从最低组 46% 直接跳到 100%(第三组起全部 100%)。鱼数只是 Δ 的粗代理:同样 1 条鱼,池子快见底(预期输家变 2 人)时 Δ 会翻倍。
来源:call_fish_summary.json → callok_by_dq_open;分组:Δ 按局面数加权五等分(Δ1 5~10BB … Δ5 120~450BB)
8. 跟注余量:1 条鱼几乎是无差别点40BB open 下 ev_call − ev_fold 的加权均值:1 条鱼只有 +1.3BB,0 条 +11.4BB,4 条 +37.5BB,5 条 +39.9BB。1 条鱼这档跟错弃错都只差一两个 BB,但它同时是最容易被情绪带偏的一档。
来源:call_fish_summary.json → margin_by_my_open;分组:我的鱼数 × open
9. 3B 的所需弃牌率在锁定参数下恒为 0f* = 让 3B 打平弃牌所需的对手弃牌率。锁定口径(3B 被跟后胜率 50%)下它被截断在 0:就算对手一次都不弃,3B 也已经不亏(3,424 格里 f* 的最大值就是 0)。这就是第 1 条里 3B 通吃的算术原因。
来源:call_fish_grid.csv.gz → f_star 列;口径:3B=全压模型,基准=弃牌EV
10. 要让 3B 不再通吃,得同时把两个参数压下去补充扫描(非锁定参数,仅用于解释):对手 open 50BB 时,3B 被跟后胜率 40% 就已经让 3B 占优 44%(对手完全不弃 3B);要把 3B 最优占比压到 0,需要胜率 ≤20% 且对手弃 3B ≤20%。本条不属于锁定参数下的结论,只用来说明图4 为什么是单色的。
来源:call_fish_summary.json → sensitivity_3b(超出锁定参数的补充扫描)

图1 · 跟注临界赢率 vs 对手 open(按我的鱼数)

102030402530354045505560657075808590951000 条鱼1 条鱼2 条鱼3 条鱼4 条鱼5 条鱼6+ 条鱼临界赢率 p*(%)对手 open 尺寸(BB)

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

图2 · 跟注临界赢率 vs 对手 open(按 Δ 五分位)

10203040253035404550556065707580859095100Δ1 5~10BBΔ2 15~20BBΔ3 25~50BBΔ4 60~100BBΔ5 120~450BB临界赢率 p*(%)对手 open 尺寸(BB)

换成按「赢下本手的边际价值 Δ」分组:Δ 越大,跟注门槛整体下移,而且高 Δ 组对 open 尺寸更不敏感(线更平)。

数据来源:call_fish_summary.json → pstar_by_dq_open(Δ 按局面数加权五等分) · 图文件 data_v2/figs/study1_pstar_by_dq.svg

图3 · 「跟注优于弃牌」的局面占比

02550751002530354045505560657075808590951000 条鱼1 条鱼2 条鱼3 条鱼4 条鱼5 条鱼6+ 条鱼可跟局面占比(%)对手 open 尺寸(BB)

固定赢率 30% 下,该鱼数档里有多少比例的局面 ev_call > ev_fold。1 条鱼的曲线塌得最快:open 到 45BB 就只剩一半局面能跟。

数据来源:call_fish_summary.json → callok_by_my_open · 图文件 data_v2/figs/study1_callok_by_my.svg

图4 · 决策地图:CALL 优于 FOLD 的局面占比(%)

2530354045505560657075808590951000 条鱼10010093786456504541363331272421181 条鱼10067575117171717777711112 条鱼1001001001007272726132322525252222223 条鱼10010010010010076767676766540404030304 条鱼1001001001001001001008181818181816950505 条鱼10010010010010010010010084848484686868686+ 条鱼1001001001001001001001009090909077777777对手 open 尺寸(BB)

锁定的 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

图5 · 跟注相对弃牌的 EV 余量(BB)

-20020402530354045505560657075808590951000 条鱼1 条鱼2 条鱼3 条鱼4 条鱼5 条鱼6+ 条鱼ev_call − ev_fold(BB)对手 open 尺寸(BB)

余量过 0 线的位置就是该档的可跟上限。1 条鱼几乎贴着 0 线走,跟不跟差别极小、错一点就亏;4 条以上余量长期在 +20BB 以上。

数据来源:call_fish_summary.json → margin_by_my_open · 图文件 data_v2/figs/study1_margin.svg

图6 · 可跟注 open 上限(网格档,BB)

025507510035501000 条2540601 条40601002 条45751003 条55901004 条601001005 条801001006+ 条p10(保守)中位数p90(宽松)我的鱿鱼数可跟 open 上限(BB)

每个指纹在 25~100BB 里能跟到的最大 open,按局面数加权取分位。100BB 是网格上界,落在这一档的意思是「整段都能跟」,真实上限见图7。

数据来源:call_fish_summary.json → maxopen_by_my · 图文件 data_v2/figs/study1_maxopen_by_my.svg

图7 · 可跟注 open 上限(连续解,不受网格截断)

05010015055690 条41431 条64712 条79983 条941344 条1391405 条1201286+ 条中位数加权均值我的鱿鱼数可跟 open 上限(BB)

对每个指纹二分求解 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

图8 · 补充:3B 何时不再压倒一切(对手 open 50BB)

被跟胜率 10%被跟胜率 20%被跟胜率 30%被跟胜率 40%被跟胜率 50%对手弃3B 0%00044100对手弃3B 10%00084100对手弃3B 20%008100100对手弃3B 30%0137100100对手弃3B 40%01676100100对手弃3B 50%14551001001003B 被跟注后我的胜率

本图是解释性补充,用的不是锁定参数(锁定值=弃3B 50% / 被跟胜率 50%,即右下角那格,3B 占优 100%)。格里数字=3B 为三选一最优的局面占比。只有当胜率跌到 20% 以下、且对手基本不弃 3B 时,3B 才不再全面占优。

数据来源:call_fish_summary.json → sensitivity_3b(非锁定参数,仅用于解释图4) · 图文件 data_v2/figs/study1_3b_sensitivity.svg

研究二 · Open 加注:尺寸穷举

网格:214 指纹 × open 20~150BB 每 5BB × 2 场景(A 30/50/20、B 30/60/10)× 2 档被跟注胜率(30 / 40)= 23,112 格 · 被 3B 我 100% 弃牌 · 尺寸弹性 = 0

1. 弹性锁 0 ⇒ 最优 open 恒等于网格下界,一格不剩23,112 格里 23,112 格的最优尺寸都是 20BB(214/214 指纹、718/718 局面权重,四组参数一致)。弃牌率不随尺寸变化时,加码不换弃牌率、只放大自己的投入,EV 对尺寸严格单调递减。「最优 open 多大」这个问题在弹性=0 下没有内点解,要研究尺寸取舍必须打开弹性(见 V1 研究 A)。
来源:open_grid.csv.gz → 每 (指纹,场景,胜率) 的 argmax;open_summary.json → edge_hits_weight
2. 每多开 1BB 要付多少钱,只由对手画像和胜率决定斜率(BB per BB):场景A 30/50/20 · 胜率30 -0.40、场景A 30/50/20 · 胜率40 -0.30、场景B 30/60/10 · 胜率30 -0.34、场景B 30/60/10 · 胜率40 -0.22。与鱼局面完全无关——Δ 和 q×Pen 只把整条线上下平移,不改斜率。
来源:open_summary.json → slope_bb_per_bb;口径:(EV@150 − EV@20)/130
3. 换场景、换胜率,最优尺寸一步都不动逐指纹作差:场景B − 场景A 的最优尺寸差 = 0BB(全部 7 档鱼数、两档胜率都是 0);胜率 40 − 胜率 30 同样是 0。跟注率 50↔60、3B 率 20↔10、胜率 30↔40 —— 这些变化在弹性=0 下只改 EV 高度,不改 argmax。
来源:open_summary.json → diff_scenarioB_minus_A / diff_wp40_minus_wp30;分组:逐指纹配对作差后按局面数加权
4. 真正随鱼局面变的是「盈亏临界尺寸」总EV 跌破弃牌基准的那个尺寸,场景A 30/50/20 · 胜率30 下中位数:0 条 47BB、1 条 41BB、3 条 92BB、6+ 条 126BB。鱼越多,能开的上限越高。
来源:open_summary.json → crossing_by_my;口径:线性插值,同 app 的 find_ev_crossings;分组:我的鱼数 × 场景 × 胜率
5. 1 条鱼在这项研究里同样是谷底场景A 30/50/20 · 胜率30 下 1 条鱼的临界尺寸均值 48BB,比 0 条低 13BB、比 2 条低 18BB。两项独立研究、两套公式,指向同一个结论。
来源:open_summary.json → crossing_by_my(场景A / 胜率30)
6. 对手更软 ⇒ 临界点整体右移我 0 条鱼时的临界尺寸中位数:场景A 30/50/20 · 胜率30 47BB → 场景B 30/60/10 · 胜率40 77BB,右移 30BB。最优点不动,但容错空间变大了。
来源:open_summary.json → crossing_by_my;分组:场景 × 胜率,我的鱼数=0
7. 有相当一部分局面「怎么开都比弃牌强」没有交点的局面占比:场景A 30/50/20 · 胜率30 18%、场景A 30/50/20 · 胜率40 33%、场景B 30/60/10 · 胜率30 27%、场景B 30/60/10 · 胜率40 54%。参数越软越多。这不是尺寸变好了,是弃牌那条基准太差——尤其 0 条鱼时弃牌 EV 均值 -44BB。
来源:open_summary.json → no_crossing_weight;口径:整段 20~150BB 都在弃牌线之上
8. 也有「怎么开都不如弃牌」的角落,全在 1 条鱼只出现在 场景A 30/50/20 · 胜率30:51 个局面,其中 50 个是 1 条鱼、1 个是 0 条鱼。手上正好 1 条鱼、对手爱 3B、我被跟后只有 30% 胜率——这时候连最小的 open 都不该开。
来源:open_summary.json → no_crossing_weight / no_crossing_by_my
9. 最优点相对弃牌的余量,仍然是 1 条鱼最薄最优尺寸处 ev_open_total − ev_fold 的加权均值(1 条鱼):场景A 30/50/20 · 胜率30 +7.5BB、场景A 30/50/20 · 胜率40 +11.1BB、场景B 30/60/10 · 胜率30 +9.7BB、场景B 30/60/10 · 胜率40 +14.0BB。同参数下 5 条鱼那档是 +65.4BB。
来源:open_summary.json → margin_at_best_by_my;分组:场景 × 胜率 × 我的鱼数
10. 撞边界必须明示,不能当成结论最优 open 100% 落在网格下界 20BB —— 真实最优很可能比 20BB 更小(EV 在整段单调递减,下界只是人为截断)。网格上界 150BB 一次都没被选中。报告不对边界外的取值做任何外推。
来源:open_summary.json → edge_hits_weight / edge_hits_fingerprints

图9 · Open 总EV vs 尺寸(场景A 30/50/20 · 胜率30)

-5005020304050607080901001101201301401500 条鱼1 条鱼2 条鱼3 条鱼4 条鱼5 条鱼6+ 条鱼总EV(BB)我的 open 尺寸(BB)

七条线全部单调下行——尺寸弹性锁死为 0,加大尺寸换不来更多弃牌,只是把自己的投入放大。最优点因此永远落在网格下界。

数据来源:open_summary.json → ev_curve(场景A / 被跟注胜率30) · 图文件 data_v2/figs/study2_ev_curve_by_my.svg

图10 · 四种参数组合下的 EV 曲线(我 0 条鱼)

-60-40-202030405060708090100110120130140150场景A 30/50/20 · 胜率30场景A 30/50/20 · 胜率40场景B 30/60/10 · 胜率30场景B 30/60/10 · 胜率40弃牌基准(0 条鱼)总EV(BB)我的 open 尺寸(BB)

对手画像和被跟注胜率只改变曲线的高度和斜率,不改变最优点位置;它们真正改变的是这条线什么时候跌破灰色弃牌基准(=盈亏临界尺寸)。

数据来源:open_summary.json → ev_curve / evfold_by_my · 图文件 data_v2/figs/study2_ev_curve_scenarios.svg

图11 · 每多开 1BB 的 EV 代价

-0.40-0.30-0.20-0.10-0.00-0.40场景A 30/50/20 胜率30-0.30场景A 30/50/20 胜率40-0.34场景B 30/60/10 胜率30-0.22场景B 30/60/10 胜率40ΔEV / Δ尺寸(BB per BB)BB / BB

曲线是直线,斜率与鱼局面无关(Δ 和 q×Pen 只平移不改斜率)。被跟注胜率越高、对手 3B 越少,加码的代价越小,但始终为负。

数据来源:open_summary.json → slope_bb_per_bb · 图文件 data_v2/figs/study2_slope.svg

图12 · 最优 open 尺寸(四组参数)

025507510020100场景A 30/50/20 胜率3020100场景A 30/50/20 胜率4020100场景B 30/60/10 胜率3020100场景B 30/60/10 胜率40加权最优 open(BB)撞网格下界的局面占比(%)BB / %

23,112 格全部撞网格下界 20BB,分布直方图退化成一根柱子,四个面板完全一样。这是弹性=0 的直接后果,不是数据出错——详见附录「撞边界说明」。

数据来源:open_summary.json → best_by_my / edge_hits_weight · 图文件 data_v2/figs/study2_best_hist.svg

图13 · 盈亏临界 open(中位数,BB)

场景A 30/50/20 · 胜率30场景A 30/50/20 · 胜率40场景B 30/60/10 · 胜率30场景B 30/60/10 · 胜率400 条鱼476155771 条鱼415245522 条鱼698673773 条鱼921191011024 条鱼103861291265 条鱼98102876+ 条鱼126144122参数组合

总EV 曲线跌破弃牌基准的那个尺寸——open 超过它就不如直接弃牌。灰格=该档没有交点(整段 20~150BB 都优于弃牌)。1 条鱼那行数字最小:最没有余地的一档。

数据来源:open_summary.json → crossing_by_my(线性插值口径,同 find_ev_crossings) · 图文件 data_v2/figs/study2_crossing_by_my.svg

图14 · 盈亏临界 open vs Δ 五分位(中位数,BB)

场景A 30/50/20 · 胜率30场景A 30/50/20 · 胜率40场景B 30/60/10 · 胜率30场景B 30/60/10 · 胜率40Δ1 5~10BB38463965Δ2 15~20BB36524577Δ3 25~50BB58867389Δ4 60~100BB103136122Δ5 120~450BB148参数组合

Δ 越大,能承受的 open 越大;高 Δ 组直接没有交点(灰格),意味着赢下本手的边际价值足够高时,怎么开都比弃牌强

数据来源:open_summary.json → crossing_by_dq · 图文件 data_v2/figs/study2_crossing_by_dq.svg

图15 · 有没有盈亏临界点(局面占比)

02040608075187场景A 30/50/20 胜率3067330场景A 30/50/20 胜率4073270场景B 30/60/10 胜率3046540场景B 30/60/10 胜率40有交点全程优于弃牌全程劣于弃牌局面占比(%)

参数越软(对手更常跟、我胜率更高),越多局面变成「全程优于弃牌」——不是尺寸变好了,是弃牌变得更差

数据来源:open_summary.json → crossing_by_my / no_crossing_weight · 图文件 data_v2/figs/study2_nocross.svg

附录 · 口径、权重与边界

A1 · 合法局面约束与 718 / 214 的关系

8 人局、鱼池 11 条。枚举「别人持鱼分布 × 我的鱼数 × 额外鱼」 的全部组合,保留同时满足以下条件的局面:

718 个合法局面。整个鱼局势只通过两个标量进入所有 EV 公式:赢下本手的边际价值 Δ,与成为输家的风险 q×Penalty。两个局面只要这 两个数相同,后续每一条 EV 都逐位相同,可以合并计算一次 —— 于是 718 个局面压成 214 个指纹 (压缩 3.4×,无损)。

映射表:data_v2/states_n8.csv.gz, 每个局面一行,带 fid、Δ、q×Pen、Δ 五分位。

A2 · 加权方式

所有聚合不按指纹等权,而是按每个指纹覆盖的合法局面数加权, 把结果还原到 718 个局面的总体;按「我的鱼数」分组时, 权重是该指纹里属于这一档的局面数(同一指纹可能横跨多个鱼数)。 每张图的权重总和都等于 718。

Δ 五分位同样按局面数加权五等分:Δ1 5~10BB / Δ2 15~20BB / Δ3 25~50BB / Δ4 60~100BB / Δ5 120~450BB。

A3 · 撞边界计数

参数组合最优在下界 20BB 最优在内点最优在上界 150BB指纹数(下界)
场景A 30/50/20 · 胜率3071800214
场景A 30/50/20 · 胜率4071800214
场景B 30/60/10 · 胜率3071800214
场景B 30/60/10 · 胜率4071800214

单位=局面数(总体 718)。 四组参数全部 100% 撞下界:真实最优可能小于 20BB, 本报告不做网格外外推。研究一的「可跟 open 上限」同样会撞 100BB 上界,因此另用二分求了不受网格限制的连续解(图7)。

A4 · 校验与复现

  1. squid_engine.selftest():闭式解 vs 桌面版 calc_ev (240 组)、Open 总EV vs 独立参照实现(200 组)、3B 所需弃牌率自洽(589 组), 容差 1e-9,全绿才允许出数。
  2. verify_v2.py:3 个格子做手算 × 桌面版引擎 × 落盘 CSV 三方对账,记录在 data_v2/对账日志.md
  3. 复现:python squid_study_v2.py(先 --quick 冒烟), 再 python make_report_v2.py

图表格式说明:方案里写的是 .png,但本机 matplotlib 与 NumPy 2.x 不兼容(import 即崩),因此改用项目自带的手写 SVG 图表模块 svgchart.py,图文件落 data_v2/figs/*.svg, 同时内嵌进本页,离线可看、放大不糊。

A5 · 数据文件

文件内容行/格数
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/对账日志.md3 格人工对账记录 3