坎张1番日庄:统计学麻将的数学解释
作者:科学麻将死路一条
一个可解释的立直麻将攻防决策期望值模型
摘要
牌谱统计和麻将 AI 已经能回答许多实战问题,例如某类局面中进攻比弃和高多少期望值,或某张牌危险到什么程度时应当转守,但他们并没有给出对这些决策的模型解释。本文在这些结果之下加一层简单的机制模型,把攻防结论拆成可以检查的组成部分。
听牌后的攻防是一组发生在有限牌山中的竞争事件。自摸、荣和、放铳、旁家和牌和流局只要发生一个,余下机会便消失。数学建模用超几何分布计算两名或三名主动玩家的胜牌有多少进入未来摸牌,再按期望胜牌数估计哪家的胜牌先出现。模拟建模抽取未知实体牌、暗手和牌山顺序,逐次模拟各家的行动。扩展到一向听后,模型会区分各类有效牌形成的待牌,并在每次摸牌后重新比较进攻与弃和。荣和、自摸、门清自摸、一发、里宝牌、立直棒和流局结算分别记账。
简化算例只调用三类外部数据:弃牌危险度、按荣和和自摸及庄闲拆分的计分数据、对手好形率。三张与四张未见嵌张追庄家立直的对照,以及两家一发立直下打宝牌的例子,使用超几何胜牌计数;三个一向听例使用无放回牌山与旁家行动模拟。和牌率由模型产生,不直接抄用现成统计。
模型不追求精确复刻统计表。假设模型算出 \(+380\) 点,而大样本结果是 \(+351\) 点,只要它能说明好形听牌、自摸与里宝牌、弃和时的庄家自摸损失、当前危险牌和旁家截和各贡献了多少,这个误差仍可接受。现实麻将中有非常多影响因素,对其建模将使得模型复杂度过高,且和玩家行为有关的因素(如副露)尤其难以建模。
统计告诉我们发生了什么;模型尝试解释为什么。
关键词:立直麻将;攻防;期望值;竞争风险;有限牌山;一向听;顺位效用;动态规划;可解释模型
1. 问题、范围与记账口径
1.1 统计结果的解释层
本文设想的工作流是
牌谱统计回答同类局面通常怎样;机制模型解释这个结论由什么组成,以及某个输入改变后会怎样。统计数据用于校准输入和检验输出,模型则把统计阈值还原成牌效率、危险度、打点、时序与其他玩家行为。
本文试图通过可解释的模型对已有的统计学麻将材料进行补充。
1.2 四类数字必须分开
为免公式掩盖未经测量的假设,全文把数字分成四类:
| 标签 | 含义 | 例子 |
|---|---|---|
| E:经验输入 | 由牌谱、已发表统计或校准样本估计 | 某巡无筋 \(4\) 的放铳率 |
| M:模型假设 | 为简化状态空间作出的结构选择 | 旁家只分为 \(T,H,F\) 三态 |
| I:演示数值 | 只为说明算法而指定,不是策略结论 | “当前放铳率为 \(6\%\)” |
| D:推导结果 | 由输入和公式算出 | 第 8.3 节两面+嵌张在固定 \(15\%\) 代表门槛下,具体 \(3p\) 安全通过后的盈亏平衡放铳率约 \(6.95\%\) |
1.3 EV 的单位
本文默认用我方一局内的点棒变化计 EV。记终局事件 \(e\) 对我方的点棒变化为 \(u(e)\),则
研究整场顺位时,应把 \(u(e)\) 换成局后四家点棒经顺位效用函数 \(U(\cdot)\) 映射后的变化,且其他玩家之间发生点数交换时,\(u(e)=0\),却可能会影响自家的最终顺位期望。本文先计算点棒 EV,顺位价值作为可选的外层处理。
2. 第一部分:听牌后的有限牌山追立
2.1 七类终止事件
从我方已听牌、面对一名立直对手的最简情形出发,把本局结局划分为互斥事件:
- 我方自摸;
- 我方荣和;
- 我方向立直对手放铳;
- 立直对手自摸;
- 旁家自摸或荣和;
- 其他玩家之间结束本局,例如立直对手荣和另一名旁家;
- 荒牌流局。
实际实现中,这类“其他玩家之间和牌”的结果还可按付款者拆分。例如旁家荣和立直对手会改变我方与他们的点差,却不直接改变我方点棒;若采用纯点棒 EV,它是零收益终止事件;若采用顺位效用,它通常不是零。
两家立直时,把第三、第四类扩为对手集合 \(R\)。当前弃牌的风险
必须是联合概率;条件损失 \(L(d)\) 则应按照采用头跳、双响或三响规则处理同时荣和,不能简单相加单家危险度。
2.2 为什么这些概率不能分别计算后再相加
令 \(\lambda_{j,t}\) 表示在第 \(t\) 个后续动作发生前本局仍未结束的条件下,事件 \(j\) 在该动作发生的概率。则事件 \(j\) 最终发生的概率为
这就是竞争风险。上家先自摸后,我方没有之后的摸牌机会;旁家先放铳后,牌山里原本可能到达我方手中的胜牌也失去意义。因此,不能把下列概率分别算完再相加:
- 独立计算“我方在剩余九次摸牌内自摸”的概率;
- 再独立计算“立直对手在剩余九次摸牌内自摸”的概率;
- 再加一个固定的“其他玩家结束本局”概率。
这些事件共享同一条时间线,也共享同一副有限牌山。
2.3 两种建模方式:数学建模,模拟建模
本文采取两种建模方式:
| 层次 | 核心随机对象 | 计算方法 | 对旁家的处理 | 主要用途 |
|---|---|---|---|---|
| 数学建模:胜牌计数模型 | 各家有多少胜牌进入主动玩家的未来摸牌、哪家的胜牌最可能先出现 | 多元超几何分布与期望胜牌数加权;不做蒙特卡洛 | 弃和玩家只消费牌;可纳入两名或三名主动玩家 | 手算机制、比较待牌枚数与未知位置分母、快速扫描危险度 |
| 模拟建模:实体牌山与玩家模拟 | 全部未知实体牌、各家完整暗手、王牌区与活牌山顺序 | 条件抽样与蒙特卡洛 | 从暗手和策略产生摸牌、弃牌、鸣牌、和牌与攻防选择 | 处理真实牌形、旁家策略、弃牌相关性与复杂规则 |
数学建模回答多少胜牌进入主动摸牌,以及哪家的胜牌先出现。模拟建模还要决定具体牌张、出现顺序和摸牌后的行动。胜牌计数无法决定旁家怎样出牌;旁家策略如果脱离实体牌山,也保留不了牌张之间的相关性。
数学建模的输入状态可写成
其中 \(\mathcal A\) 是主动玩家集合,\(m\) 是每名主动玩家的未来摸牌数,\(U_j\) 与 \(K_j\) 分别是玩家 \(j\) 的胜牌分布位置数和胜牌枚数,\(I\) 是一发状态,\(B\) 是立直棒与本场数。它不保存完整手牌,也不保存普通巡目的具体摸牌顺序。
模拟建模的状态则扩展为
其中 \(W_t\) 是剩余实体牌山,\(\tau_t\) 是下一位行动者,\(H_t\) 是我方完整手牌与防守状态,\(O_t\) 是对手暗手及策略状态。每一步依次检查摸牌、自摸、弃牌或鸣牌、荣和,再删除实际消费的实体牌。
数学层把第九巡写成“约 36 张活牌山、约 88 个我方未见位置”,这是便于手算的整数量级近似。模拟层则固定到更具体的座次和动作:我方为南家,庄家打出第九张立直宣言牌后,我方尚有八张河牌并持十四张;我方完成当前第九次弃牌后,四家河牌数为 \(9/9/8/8\),活牌山仍有 36 张。我方未见位置恰为
两层这里碰巧都写成 \(36/88\),含义却不同:前者是解释用近似,后者来自南家这一精确时点。当前牌安全通过后,西家、北家依次摸打,庄家才进行仍在一发窗口内的下一摸。
换句话说,数学层近似使用约 36 张活牌山和约 88 个未见位置;实体模拟的南家精确时点使用 36 张活牌山和 88 个未见位置。
2.4 数学建模:超几何胜牌计数模型
数学建模忽略不同玩家胜牌之间的重叠,也不排列每一张未来摸牌的具体先后。它只回答两个问题:
- 每一家的胜牌有多少张落在主动玩家的未来摸牌中;
- 若至少有一张会被主动玩家摸到,哪一家的胜牌最可能最先出现。
把仍参与和牌竞赛的玩家集合记为 \(\mathcal A\),人数为 \(s\)。数学模型假设每名主动玩家未来都摸 \(m\) 张牌,并把摸到的他家胜牌视为打出;这适合双方已经立直、以后自动摸切的竞赛。其余玩家已经弃和:他们仍会从牌山摸牌并消耗胜牌,但不会自摸、荣和或打出主动玩家的胜牌。
两种未知位置口径
对我方 \(H\),已知未见胜牌在我方尚未看见的位置中均匀分布。令
例如第九巡可取
这里的未知王牌区不含已经翻开的宝牌指示牌。若我方有 \(K_H\) 张已知未见胜牌,则每一张都在这 \(U_H\) 个位置中均匀分布。
对未知对手 \(j\),数学建模使用更粗的全牌先验:其 \(K_j\) 张胜牌均匀分布在全部
个实体牌位置中。这个不对称口径有意保留“我方已知未见”比“对手未知四张或八张待牌”信息更强的效果。
胜牌落入谁的未来摸牌
令 \(X_{j,a}\) 表示玩家 \(j\) 的胜牌中,有多少张落在主动玩家 \(a\) 的未来 \(m\) 个摸牌位置。其余 \(U_j-sm\) 个位置包括弃和玩家的未来摸牌、暗手、王牌区及其他不会触发主动玩家终局的位置。对固定的玩家 \(j\),
落在全部主动玩家未来摸牌中的胜牌总数为
所以
并且
没有任何一张玩家 \(j\) 的胜牌进入主动玩家未来摸牌的概率为
数学建模把各家的胜牌位置分布视为独立。因此,所有主动玩家都摸不到任何主动手牌的胜牌、最终荒牌流局的概率为
这项独立性是结构近似。它忽略不同待牌使用同一实体位置的竞争,也忽略两家待牌恰好包含同一种牌;这些相关性属于模拟建模实体牌山模拟。
用期望胜牌数决定谁先出现
若至少有一张胜牌会进入主动玩家的未来摸牌,数学建模忽略胜牌的具体排列,按各家在这些摸牌中的期望胜牌数加权。玩家 \(j\) 的首张胜牌权重为
由于每名主动玩家未来摸牌数同为 \(m\),胜牌落到各主动玩家摸牌位的分布对称。因此,条件于最先出现的是玩家 \(j\) 的胜牌,由任一主动玩家 \(a\) 摸到的概率都取 \(1/s\):
两名主动玩家 \(H\) 与 \(O\) 都已立直时,对应关系为:
| 最先出现的胜牌 | 摸牌者 | 终局 |
|---|---|---|
| \(H\) 的胜牌 | \(H\) | 我方自摸 |
| \(H\) 的胜牌 | \(O\) | 我方荣和 |
| \(O\) 的胜牌 | \(O\) | 对手自摸 |
| \(O\) 的胜牌 | \(H\) | 我方放铳 |
因此
终局 EV 为
这里各个 \(V\) 已含相应分支的正负号。三名主动玩家时使用同一公式:先按 \(\omega_j\) 决定哪家的胜牌最先出现,再以 \(1/3\) 分配给三名可能的摸牌者,并按自摸、荣和或放铳映射到终局。
“期望胜牌数之比”是为了可读性作出的近似。若希望保留超几何计数的不确定性、但仍忽略摸牌顺序,可以使用有限和
在 \(U_H=88\)、\(U_O=136\)、\(m=9\),且双方胜牌数分别取 4 或 8 的四种组合中,期望数加权与这项有限和对“哪家胜牌先出现”的无条件概率相差约 \(0.48\) 至 \(0.77\) 个百分点。
数值例
令我方与对手各有四张胜牌,我方使用 \(U_H=88\),对手使用 \(U_O=136\),双方未来各摸九张。则
超几何零命中概率给出
所以
| 终局 | 概率 |
|---|---|
| 我方自摸 | \(23.64\%\) |
| 我方荣和 | \(23.64\%\) |
| 对手自摸 | \(15.30\%\) |
| 我方放铳 | \(15.30\%\) |
| 荒牌流局 | \(22.13\%\) |
同为四张待牌,我方仍获得更大的首张胜牌权重,因为四张已知未见只分布在 88 个未见位置,而对手的未知四张待牌按 136 个位置分布。
忽略行动顺序的误差
上述对称式忽略“谁在每轮先摸”。为单独测量这一误差,可将相同的超几何位置模型分别按前述有限和的“无顺序计数”和“对手先摸、我方后摸”的逐位置计算求值。取 \(U_H=88\)、\(U_O=136\)、\(m=9\),并用我方荣和/自摸 8000、向庄家放铳 7500、庄家自摸付款 3400 计分,得到:
| 我方胜牌 / 对手胜牌 | 单一终局概率的最大移动 | 有序 EV 减无序计数 EV |
|---|---|---|
| 4 / 4 | \(0.93\) 个百分点 | \(+39\) |
| 4 / 8 | \(1.97\) 个百分点 | \(+63\) |
| 8 / 4 | \(1.64\) 个百分点 | \(+68\) |
| 8 / 8 | \(2.37\) 个百分点 | \(+101\) |
在这组第九巡校准中,行动顺序的影响小于待牌枚数、未知位置分母和打点本身,但不是严格为零。若进攻与弃和只差一两百点,应把这部分列入敏感性区间;若结论离临界点较远,无序模型通常足以解释主要机制。
一发巡是明确例外。一发只存在于有限行动窗口内,而且“对手先摸并打出我方胜牌”与“我方第一次立直后摸牌自摸”对应不同计分分支。数学建模应对一发窗口单独列出有序事件树;窗口结束后,再使用本节的无序超几何模型。
一向听分支先用同类超几何分布计算每种有效牌进入我方未来摸牌的概率;我方摸到有效牌后,转入相应待牌并调用上述听牌模型。旁家或对手摸到有效牌只会消费该牌。未进张分支仍回到下一次进攻/弃和决策。
随文脚本 winning_tile_distribution.py 实现了期望胜牌数近似、保留计数随机性的有限和,以及用于检查普通行动顺序误差的两人有序对照。
2.5 “四张已知未见听牌”为什么可能强于“未知四张听牌”
假设我方明确知道自己的胜牌有四张尚未出现,而从我方视角约有 88 个未知位置,活牌山占其中 36 个位置。若在这些未知位置间作均匀条件分配,则活牌山中胜牌的期望枚数为
作为对照,若对手的未知待牌只用一个很粗的、尚未结合可见牌信息的全牌先验来表示,则四张待牌与八张待牌的活牌山期望枚数分别约为
相应地,在均匀无放回模型里,“活牌山至少含一张该类牌”的概率为
代入 \((N,K_0)=(88,4),(136,4),(136,8)\) 后约为 \(88.4\%,71.2\%,92.1\%\)。
这些数不是最终和牌率。旁家可能先摸走胜牌,对手也可能先和;荣和还取决于谁会打出什么牌。我方的“七张已知未见”已经由手牌与可见牌条件化,而“对手大概是四张待牌”通常只是先验。二者即使都写成四张,信息强度也不同。
此外,分母 88 与 136 只是演示口径。正式实现必须根据确切可见牌、王牌区、各家手牌张数与抽样模型重新计算,不能把这两个数字当成通用常数。
2.6 纯两人模型何时会产生偏差
“只建模我方与立直对手”有两种不同含义。
如果仍把旁家暗手、王牌区和旁家未来摸牌位计入 \(U\),只是将它们计算成不活动位置,那么双方胜牌落入这些位置的概率并没有消失。此时两人胜牌计数模型不会因为“没画出旁家”就凭空多造胜牌;这正是第 2.4 节把弃和玩家归入非主动位置的含义。
两人模型产生明显乐观偏差时,通常还包含以下假设:
- 把所有已知未见胜牌只分配在双方未来摸牌位中;
- 假设旁家永远不会抢先自摸或荣和;
- 忽略旁家向任何一方放铳;
- 假设对手摸到我方胜牌必定摸切,却没有同样处理旁家的保留与弃牌;
- 忽略鸣牌改变摸牌顺序和取消一发。
这些简化会延长双方竞赛,但对我方 EV 的方向不保证一致:旁家抢先和牌通常压低我方和牌率;旁家打出我方胜牌却会增加我方荣和;庄家荣和旁家又可能保护我方免于之后被自摸。数学建模可以把第三名玩家加入主动集合,比较两人与三人竞赛;模拟建模则让旁家的听牌、出牌和终局从完整手牌与策略中产生。
2.7 模拟建模:条件实体牌山与玩家策略模拟
模拟建模能够产生待牌的完整牌局状态,而不是只抽“某家有四张还是八张胜牌”。一条模拟分支按以下顺序建立:
- 从 136 张实体牌中扣除我方手牌、牌河、副露、宝牌指示牌及其他已知牌;
- 条件于立直巡目、此前弃牌、副露和已经观察到的行为,联合抽取三家完整暗手;立直者必须是合法听牌,待牌由暗手自动计算;
- 把剩余实体牌一次性、无放回分配到未知王牌区和每一个未来活牌山位置;
- 按真实座次摸牌,先检查自摸,再由当前玩家的策略选择暗杠、加杠、副露后的操作或弃牌,最后依规则检查荣和;
- 每次公开新牌后更新各家的安全牌、振听、一发、剩余牌计数和攻防决策;
- 活牌山耗尽时,根据实际听牌家数结算未听罚符与立直棒结转。
对手暗手不能简单地“均匀抽一副听牌”后就当成后验分布。较稳妥的实现可以使用拒绝抽样、重要性加权或从牌谱训练的条件生成模型,使抽到的手牌与其牌河、立直巡目和副露相容。旁家策略则可以是透明规则、牌谱行为概率,或压缩后的进攻/弃和递归;无论采用哪一种,都应与牌山抽样分开报告。
两层的正式职责如下:
| 项目 | 数学建模:胜牌计数模型 | 模拟建模:实体牌山与玩家模拟 |
|---|---|---|
| 随机对象 | 胜牌或有效牌类别的位置 | 条件于全部可见信息的完整剩余实体牌 |
| 对手待牌 | 外部给定四张或八张;忽略待牌重叠 | 从合法完整暗手自动计算 |
| 旁家手牌 | 不存在;弃和者只消费牌 | 向听数、有效牌、待牌和安全牌均由暗手决定 |
| 出牌 | 主动玩家摸到他家胜牌时视为打出 | 条件策略从实际候选牌中选择 |
| 数值误差 | 无蒙特卡洛误差,但结构近似强 | 有抽样误差,并受隐手后验与行为策略模型影响 |
第 8.3 节为控制输入数量,采用局部实体牌形:两面、嵌张、边张、双碰和单骑都由合法模板生成,并从对应玩家暗手中实际预留搭子或对子;我方和 \(H\) 态旁家的有效牌、改善后待牌与入听弃牌由同一个一向听模板绑定。其余填充牌不要求共同组成一副可完整解析的合法手牌,偶然形成的附加待牌也不计入。旁家的 \(T/H/F\) 是演示状态,鸣牌不进入模型。
模拟建模更细,是因为它保存了更多状态。若只是把数学建模的四张或八张待牌反复随机抽样,所得结果只比原公式多了抽样误差。
3. 计分不能压成一个平均值
3.1 对不同终局分别计分
令 \(g_{\rm ron}(h,f,z)\) 为给定番数 \(h\)、符数 \(f\)、庄闲与规则 \(z\) 下的荣和点数;令 \(g_{\rm tsumo}(h,f,z)\) 为我方从三家合计收到的自摸点数。模型至少应区分:
| 事件 | 我方点棒收益的基本形式 |
|---|---|
| 我方荣和 | \(g_{\rm ron}+\text{本场棒收入}+\text{立直棒池}\) |
| 我方自摸 | \(g_{\rm tsumo}+\text{本场棒收入}+\text{立直棒池}\) |
| 向对手放铳 | \(-g_{\rm ron}^{O}-\text{本场棒付款}\) |
| 对手自摸 | \(-\text{我方应付的庄/闲自摸份额}\) |
| 流局 | \(\text{听牌/未听牌点数结算} +\text{立直棒的结转效果}\) |
荣和与自摸要分开计算。例如,某个门清手荣和为 1 番 40 符、闲家 1300 点;自摸时多出门清自摸一番,符数也可能变化,成为 2 番 30 符、合计 2000 点。若先压成“平均 1650”,模型便看不见自摸概率变化带来的非线性价值。
同样的规则也适用于对手。若 \(R_D\) 是庄家立直荣和的平均点数,庄家自摸时我方的付款不能写成 \(R_D/3\)。自摸分支多出门清自摸一番,符数和打点档位也可能改变。接口至少要分成
以及
对于闲家立直者,这分别是荣和均值、庄家付款和另一名闲家付款三个接口。若只有番符分布,就逐个分支增加门清自摸一番后重新查点数表;若只有一个混合平均打点,则信息不足,不能靠除以 3 或 4 恢复这些量。
3.2 里宝牌是一个条件分布
若我方和牌后可能翻里宝牌,令 \(U\) 为里宝牌增加的番数,则
荣和、自摸和一发分支的基础番符不同,所以要分别计算这个期望。满贯、跳满等档位也使“多一番的价值”不是常数。有杠时,里宝牌指示牌数量还会变化。把里宝牌写成“和牌点数统一乘 1.08”,无法处理跨档。
没有完整手牌时,可以采用一个简单的牌种模型。假设和牌后的 14 张牌包含 12 种单张和一个对子;一枚里宝牌对应的宝牌种类在 34 种牌中等概率。则:
并且
其中 21 种牌不在手中,12 种各命中一张,另有 1 种命中对子并增加两番。14 张实体牌不能视为 14 次独立的 \(1/34\) 试验,因为同一种里宝牌会同时命中对子中的两张。这个牌种均匀假设不是普遍常数。顺子重复、刻子、可见牌和剩余指示牌都会改变分布。正式模型应从剩余实体指示牌中无放回抽样,再映射到里宝牌种类。
3.3 一发是时序事件
一发不应作为所有未来和牌的固定加成。一发标志 \(I_t=1\) 只在规定窗口内保留,并会因吃、碰、杠而消失。
考虑一个具体时序:我方的立直宣言牌是对手已经打过的现物;对手在我方第一次立直后摸牌之前行动。此时至少有两条我方一发路线:
- 对手先摸牌,未自摸,并打出我方胜牌,我方一发荣和;
- 对手先摸牌,未结束本局,我方随后第一次摸牌自摸胜牌,我方一发自摸。
对手若先自摸,两条路线都消失;期间发生副露也会取消一发。因此,一发 EV 应来自有序分支,不能对最终和牌率统一乘一个比例。
3.4 立直棒与“沉没成本”
设桌面已有 \(m\) 根尚未被收取的立直棒,则下一位和牌者通常获得 \(1000m\) 点。我方尚未立直时,未来宣言还要先支付自己的 1000 点;已经宣言后,这 1000 点对当前决策是沉没成本,但立直棒池仍是我方和牌时可回收的奖池。
因此“两家立直带来两根棒”不能被写成无条件 \(+2000\):只有我方先和牌的分支得到它;若对手或旁家先和,奖池归对方;流局时,场上剩余的立直棒也会留到下一局,直到有人和牌为止。可以认为我方为下一个和牌的玩家的概率为 \(\frac14\),因此场上有\(m\)根立直棒时发生流局可以认为带来 \(250m\) 点期望收入。
3.5 流局时的听牌/未听牌结算
标准四人麻将中,流局的 3000 点在听牌者与未听牌者之间转移。对我方而言,结果取决于全桌听牌人数:
| 我方状态与全桌听牌数 | 我方流局收支 |
|---|---|
| 我方唯一听牌 | \(+3000\) |
| 我方听牌,共两家听牌 | \(+1500\) |
| 我方听牌,共三家听牌 | \(+1000\) |
| 四家全听或全未听 | \(0\) |
| 我方未听,只有一家听牌 | \(-1000\) |
| 我方未听,共两家听牌 | \(-1500\) |
| 我方是唯一未听 | \(-3000\) |
所以“听牌流局价值”也不能由一个固定 \(+1500\) 代替;旁家的听牌状态同时影响和牌竞争和流局结算。
4. 弃和 EV 不是零
令 \(F_x\) 表示第 \(x\) 巡开始采取防守策略的 EV。即便后续每张牌都绝对安全,我方仍可能因对手自摸或流局未听而失点。一般地,
其中 \(\pi_{\rm fold}\) 是实际防守策略,结局 \(o\) 至少包括:
最后一项有时可近似为零,但只有在现物足够时才成立。若安全牌耗尽后要打筋牌、壁牌或其他低风险牌,防守也有残余放铳率。
这会改变一些接近临界的判断。进攻本身可以是负 EV,只要它比弃和少亏即可。例如,进攻 EV 为 \(-1561\)、弃和 EV 为 \(-1600\) 时,进攻仍高 \(39\) 点,但两种选择都在失点。
5. 旁家:粗粒度,但在模拟中不能消失
5.1 三状态近似
对两名隐手旁家,不必像我方一样精确枚举牌形。可以令每一名旁家的隐状态为
第九巡算例采用以下演示基线:
这些数属于 I/M,不是普遍常数。现有公开资料没有按上述 \(T/H/F\) 定义给出可核验样本,“副露率”或“听牌率”也不能直接代替。实战校准时,应按巡目、门清或副露、立直人数、点棒状况、可见牌和玩家群体重新估计。
5.2 每个状态需要哪些行为
| 状态 | 最小行为模型 | 由此产生的终局或牌山效应 |
|---|---|---|
| \(T\) | 待牌分布、进攻弃牌分布、和牌打点 | 自摸、荣和、向我方或立直对手放铳、消费双方胜牌 |
| \(H\) | 有效牌率、部分进攻率、改善后的待牌分布 | 转入 \(T\)、中途放铳、抢先和牌、逐步转守 |
| \(F\) | 现物数量与低风险弃牌策略 | 大幅降低但不必归零的放铳率、消费活牌、增加流局概率 |
旁家的摸牌与弃牌会产生自摸、荣和、向我方或立直对手放铳,也会消耗双方胜牌并改变流局率。
“每轮有 \(12\%\) 概率由其他玩家结束本局”可以作为消融实验。正式模型则让终局从旁家行为中产生,才能追踪谁结束了牌局、消耗了什么牌,以及立直棒归谁。
5.3 显式牌山之后,关键近似是旁家的攻防策略
每条模拟分支给旁家抽出具体暗手并固定未来牌山后,旁家和牌与放铳会从实际摸牌、弃牌中产生,无须另设“其他玩家结束本局”的固定比例。这里仍要指定旁家的行动策略:摸牌后继续维持牌形,还是打安全牌弃和。
旁家不必求解到与我方相同的精度。为第 \(j\) 名旁家定义行为策略
其中特征 \(X_j\) 包括巡目、向听数、预期打点、待牌质量、候选牌对各立直者的危险度、安全牌库存、庄闲和立直人数。可以采用三种实现:
- 规则策略:\(T\) 态默认进攻,\(F\) 态默认弃和;\(H\) 态只在候选牌危险度低于阈值时继续。
- 牌谱行为模型:从牌谱估计同类状态下继续进攻的概率,以及进攻和弃和时的弃牌分布。
- 简化递归:对旁家也计算 \(\max(V_{\mathrm{push}},F)\),但压缩其未来牌形和计分状态。
本文的模拟采用第二种思路:我方使用显式递归,旁家使用可校准的经验策略。旁家的行动决定它是否打出我方胜牌、向立直者放铳、保留自己的和牌路线,或提前消耗某张胜牌。
\(T/H/F\) 是策略先验或压缩标签,不是整局固定的身份。旁家可以从 \(H\) 进张到 \(T\),也会因新立直、危险牌或安全牌耗尽而转入 \(F\)。新出现的现物还会改变其下一次选择。
6. 第二部分:一向听进攻的递归
6.1 当前危险与未来价值分开
令
并令 \(V_x(S,d)\) 为我方在状态 \(S\) 下第 \(x\) 巡打出 \(d\) 并继续依最优策略行动的 EV。定义
先把当前弃牌的危险与安全通过后的价值分开:
严格地说,存活后的状态可能依赖弃牌 \(d\),所以写作 \(C_x(S,d)\) 更完整;在不致混淆时可简写为 \(C_x(S)\)。
6.2 还没有轮到我方摸牌,本局就可能结束
当前弃牌通过后,其他三家先后行动。本局可能在我方下次摸牌前结束。令
并令 \(E_x^O\) 为条件于该类对手侧终止的我方平均收益。于是
其中 \(D_x\) 是成功轮到我方下一次摸牌时的价值。合并得
我方每一巡重新选择:
因此,模型允许“这一巡先进攻,摸到危险牌再弃和”,不会把一次进攻选择理解为必须一直打到听牌。
6.3 把一向听写成转换集合
用
表示我方的一向听形。其中 \(n_i\) 是第 \(i\) 类有效牌的实际剩余枚数,\(W_i\) 是摸到该类后形成的听牌。若 \(N_x\) 是下一次我方摸牌分布的分母,则
其中 \(T_{x+1}(W_i,d_i)\) 是摸到有效牌后,为进入待牌 \(W_i\) 而打出 \(d_i\) 的听牌分支价值;\(S'\) 是没有摸到有效牌并弃牌后的新一向听状态。
实际计算还要处理以下问题:
- 表中的 \(8,4,16\) 等通常是名义有效牌数;正式计算必须扣除手牌、牌河、副露和宝牌指示牌中的已见枚数。
- 若不同有效牌类别重叠,必须去重;不能把简写直接相加。
- \(N_x\) 是所采用的条件摸牌模型分母。它可以由精确牌山抽样得出,不必等于桌面显示的活牌山总数。
6.4 听牌本身可能还要再过一张危险牌
若摸到第 \(i\) 类有效牌后必须打出 \(d_i\),则
其中 \(A_{x+1}(W_i)\) 是听牌弃牌安全通过后的进攻 EV。有效牌多不一定代表未来价值高。改善后的待牌、听牌弃牌的危险度和听牌打点都可能改变排序。
7. 显式牌形转换:只看有效牌数还不够
以下均为结构简写。箭头左侧是名义有效枚数,右侧是由该类有效牌留下的名义待牌枚数。
7.1 常见复合搭子
| 一向听形 | 转换集合 | 解释 |
|---|---|---|
| 两面 + 两面 | \(\{8\to8,8\to8\}\) | 16 枚名义有效牌,全部形成两面 |
| 两面 + 嵌张 | \(\{8\to4,4\to8\}\) | 完成两面会留下嵌张;完成嵌张会留下两面 |
| 两面 + 两面 + 对子路线 | \(\{8\to8,8\to8,4\to8\}\) | 20 枚有效牌,新增速度而不降低终局待牌质量 |
| 两面 + 嵌张 + 对子路线 | \(\{8\to4,4\to8,4\to8\}\) | 16 枚有效牌,其中一半路线留下好形 |
| 两面 + 两嵌(246 型) | \(\{8\to4,4\to8,4\to8\}\) | 完成两面留下嵌张;完成任一嵌张类留下两面 |
对“两面 + 嵌张”,条件于摸到有效牌,形成嵌张听牌的比例为
单写“有效牌共有 12 枚”会漏掉这个差别。
7.2 无固定搭子、七对子与无对子
在三个完成面子、一个对子、两个彼此适当分离的中张孤张所组成的“黏着型”一向听中,可用
近似表示:约 22 枚形成四枚待牌,包括嵌张与双碰路线;16 枚形成两面;2 枚把原有对子碰成暗刻并留下单骑。总名义有效牌数为 40。这个分解只适用于所述孤张位置足够分离的理想结构;邻接、端牌、已见牌会改变类别及重叠。
七对子一向听可写成
表示三个孤张各有三张名义配对牌,改善后通常留下三张单骑待牌。
三个完成面子、两组两面但没有对子的无对子一向听可写成
完成任一两面会留下单骑;把两面中的某张配成对子,则可保留另一组两面。因此
这手牌有 28 枚名义有效牌,但超过一半的改善路线形成愚形。只输入有效牌数,会把它和“28 枚全部形成好形”的假想手牌放在同一类。
8. 只用少量统计数据的简化算法
教学、快速估算或检查 AI 结论时,可以先用少量外部数据。这里采用三类:
- 候选弃牌的放铳危险度 \(r(d)\);
- 对手立直手按荣和/自摸及庄闲拆分的计分向量 \((R_D,R_N,T_D^{(C)},T_N^{(D)},T_N^{(C)})\);
- 对手听牌为好形的比例 \(q\)。
其余输入从当前牌面读取:
- 巡目与剩余摸牌次数;
- 我方胜牌或有效牌的已知未见枚数;
- 行动顺序;
- 我方荣和、自摸、一发与里宝牌点数;
- 立直棒数量;
- 宣言牌是否绝对安全;
- 流局时我方是听牌还是未听牌。
手算部分直接使用第 2.4 节的超几何胜牌计数;一发窗口另列行动顺序。旁家完整暗手、鸣牌取消一发,以及对手待牌与弃牌危险度的相关性由模拟建模实体牌山模拟处理。
8.1 数据来源、统计口径与本节采用值
下表列出外部统计的样本、定义和局限。同一个数字换了口径,含义也会变化。
| 输入 | 本节采用值 | 样本与来源 | 口径限制 |
|---|---|---|---|
| 对手立直好形率 \(q\) | \(72.8\%\),仅作独立对照 | 一项天凤凤凰桌东南战分析称从 363,311 份牌谱中抽取了 2,695,637 次立直;其总体好形率为 \(72.8\%\),原文与定义见此 | 不控制实体待牌抽样。“好形”还包含三面及延单骑等复合待牌,而本节生成器只含五种基础待牌;把它再作为先验会重复使用同一类信息 |
| 非一发立直荣和平均点数 \(R_D,R_N\) | 庄家 \(7500\);闲家 \(5300\) | みーにん《「統計学」のマージャン戦術》第 2 章专题13表 13.1、13.2;全书数据来自天凤凤凰桌东南战牌谱,中文版书 | 表内已把“一发立直”和“非一发立直”分开;不含本场棒和立直棒。它比 M 联赛职业样本更贴近本文使用的天凤危险度数据 |
| 庄家非一发自摸时一名闲家平均付款 \(T_D^{(C)}\) | \(3400\) | 表 13.2 给出庄家非一发立直自摸平均总得点 \(10000\);原书随后直接换算为一名闲家平均支付 \(3400\),同章换算 | 自摸栏已经包含门清自摸带来的番数变化,不能由荣和均值 \(R_D/3\) 代替 |
| 闲家非一发自摸付款 \(T_N^{(C)},T_N^{(D)}\) | 另一名闲家约 \(1800\);庄家约 \(3500\) | 表 13.1 给出闲家非一发立直自摸平均总得点 \(7000\);原书换算为闲家支付 \(1800\)、庄家支付 \(3500\) | 总得点和换算值都已取整;正式实现宜直接统计各座位实际付款 |
| 庄家一发立直荣和与自摸 | 荣和 \(10900\);一名闲家自摸付款约 \(4600\) | 表 13.2 直接给出一发立直荣和 \(10900\)、自摸总得点 \(13700\);本文仿照原书普通自摸的取整方式,把一名闲家付款取为约 \(4600\) | 一发已在样本中分层,无须再对普通平均“人为增加一番”;\(4600\) 仍是由已取整总得点换算的近似 |
| 闲家副露手示例打点 | 荣和 \(4345\);另一名闲家的自摸付款 \(4767/4=1191.75\) | 同一非官方账号的2019 赛季亲番汇总只给庄闲总体值,不能单独识别副露手;后续汇总按庄闲、立直/副露/默听和荣和/自摸分成 12 类,覆盖 2018—2023 赛季 1,308 个半庄、15,952 局、12,589 次和牌,定义与分类表 | 后一张表的闲家副露荣和均值为 \(4345\),自摸总得点均值为 \(4767\)。M 联赛与本文其余天凤输入并非同一样本环境,因此这里只把它当作副露旁家的说明性口径 |
| 逐巡弃牌危险度 | 第 1 至 19 巡按数牌筋关系及字牌可见枚数取值 | みーにん《「統計学」のマージャン戦術》第 3 章专题20表 20.1、20.2;作者后来也直接引用这两表说明危险度随巡目变化,中文版书、书籍资料、作者的表格说明 | 书籍出版资料称全书分析约 3100 万局,但截图和公开说明没有给出这两张表各格的样本量与置信区间;不能把全书宣传样本数当成每一格的分母 |
| 候选牌按待牌形式分解的命中率 | 校准五种基础待牌的形式与镜像位置权重 | 2019 年天凤凤凰桌东南战 171,650 个半庄、1,300,316 次立直,待牌形式分解、原始统计与排除条件 | 条件是立直宣言牌打出后,并排除振听立直与国士立直。表格给的是某类候选牌成为胜张的概率按待牌形式分解,不是每手待牌形式比例,不能直接按行当作抽样分布 |
作为样本敏感性参照,一份非官方 M 联赛汇总给出的庄家、闲家立直荣和均值为 \(10450\)、\(7099\),庄家立直自摸总得点为 \(11646\)。M 联赛分类汇总 这张表把一发与非一发混在“立直”一栏;天凤表则把两者分开。因此,M 联赛庄家 \(10450\) 高于天凤非一发的 \(7500\),却低于天凤一发的 \(10900\),不能把差额全解释成赛事打点差。两组数据都排除本场棒和场上立直棒,剩余差异还可能来自一发占比、规则、年代、赤牌、选手组成和样本量。本文把分层后的天凤凤凰桌数据作为主分析,因为危险度与行为输入也主要来自天凤;M 联赛混合均值只用于改变普通后续打点的敏感性检查。凤凰桌本身仍是高段玩家样本,不能直接称作所有线上或线下玩家的“普通打点”。这里选择它是为了统一样本环境,不是断言它代表总体人群。
本章所有数值算例和模拟的放铳率统一使用《「統計学」のマージャン戦術》书中逐巡表。第九巡算例会经过第 10 至 18 巡,因此列出两档实际门槛,并附上无筋 4/5/6 和 4/5/6 单边筋作为参照。“无筋 2/3/7/8”取无筋 2/8 与无筋 3/7 中较高者;“无筋 4/5/6”取无筋 5 与无筋 4/6 中较高者:
| 巡目 | 3、7 筋 | 无筋 2/3/7/8 上限 | 无筋 4/5/6 上限 | 4/5/6 单边筋中位数 |
|---|---|---|---|---|
| 9 | \(5.5\%\) | \(9.5\%\) | \(13.1\%\) | \(7.4\%\) |
| 10 | \(5.6\%\) | \(10.1\%\) | \(14.1\%\) | \(8.0\%\) |
| 11 | \(5.7\%\) | \(10.8\%\) | \(15.1\%\) | \(8.7\%\) |
| 12 | \(6.0\%\) | \(11.6\%\) | \(16.3\%\) | \(9.4\%\) |
| 13 | \(6.2\%\) | \(12.4\%\) | \(17.5\%\) | \(10.2\%\) |
| 14 | \(6.6\%\) | \(13.3\%\) | \(18.8\%\) | \(11.0\%\) |
| 15 | \(7.0\%\) | \(14.3\%\) | \(20.1\%\) | \(11.9\%\) |
| 16 | \(7.4\%\) | \(15.4\%\) | \(21.7\%\) | \(12.9\%\) |
| 17 | \(8.0\%\) | \(16.6\%\) | \(23.2\%\) | \(14.0\%\) |
| 18 | \(8.5\%\) | \(17.9\%\) | \(24.9\%\) | \(15.2\%\) |
手算时若不逐巡查表,可用第 14 巡这一中位行:筋 3/7 为 \(6.6\%\),无筋 2/3/7/8 为 \(13.3\%\)。\(18.8\%\) 只作为无筋 4/5/6 的风险参照,不另设续攻策略。模拟仍逐巡取值。作者另一篇文章把第九巡筋 3/7 写成 \(5.4\%\),书表则为 \(5.5\%\),其他少数数字也相差 \(0.1\) 个百分点。这可能是舍入或数据版本所致。本文统一按书表截图转录。作者的巡目危险度例
这些数字是给定巡目与牌类的平均危险度,不是具体牌张的精确危险度。宝牌 4 可能同时影响待牌构成和放铳点数,两家立直的待牌也未必独立。算例会单独标出这些假设。
好形按八张、愚形按四张表示,未知位置数 \(U_H\)、未来摸牌数 \(m\) 和“12 种单张加一个对子”的里宝牌模型也不是统计事实。它们属于结构近似或演示假设。
8.2 两个听牌算例
下面两个算例都使用第 2.4 节的超几何胜牌计数。普通巡目由胜牌计数处理,只有一发窗口单列行动顺序。所需统计输入较少,也与全文的两层架构一致。
第九巡,四张全未见一番嵌张追庄家立直
设我方为闲家,第九巡面对庄家立直。宣言牌是现物。我方立直后的基础荣和值为 1300 点,尚未计门清自摸、一发和里宝牌。这里的 1300 已经包含立直,并非后文旁家副露手的付款口径;副露手不能立直,也没有门清自摸。
输入如下:
| 类型 | 输入 | 采用值 |
|---|---|---|
| E | 对手立直好形率 \(q\) | \(72.8\%\) |
| E | 庄家非一发立直荣和平均点数 \(R_D\) | 7500 |
| E | 庄家非一发自摸时一名闲家平均付款 \(T_D^{(C)}\) | 3400 |
| 牌面 | 我方胜牌 | 4 张全未见 |
| M | 我方未知位置 \(U_H\) | 88 |
| M | 双方未来摸牌数 \(m\) | 各 9 张 |
| 牌面 | 当前宣言牌危险度 | \(0\) |
| 牌面 | 已有立直棒 | 1 根 |
把对手的愚形和好形分别近似为四张、八张待牌。对手胜牌的期望枚数为
双方共有 18 个主动摸牌位置。两家都没有胜牌进入这些位置的概率为
因此
期望胜牌数为
按期望数加权后,我方胜牌先出现的权重为 \(47.21\%\),庄家为 \(52.79\%\)。双方未来摸牌数相同,所以数学建模给出:
| 终局 | 概率 |
|---|---|
| 我方荣和 | \(20.08\%\) |
| 我方自摸 | \(20.08\%\) |
| 庄家自摸 | \(22.46\%\) |
| 我方摸切放铳 | \(22.46\%\) |
| 荒牌流局 | \(14.92\%\) |
里宝牌采用第 3.2 节的牌种近似:
各和牌分支的条件平均点数为:
| 我方和牌方式 | \(U=0\) | \(U=1\) | \(U=2\) | 条件平均点数 |
|---|---|---|---|---|
| 非一发荣和 | 1300 | 2600 | 5200 | 1873.53 |
| 非一发自摸 | 2000 | 3900 | 7700 | 2838.24 |
| 一发荣和 | 2600 | 5200 | 8000 | 3676.47 |
| 一发自摸 | 3900 | 7700 | 8000 | 5361.76 |
庄家先行动。只对第一轮列有序事件树,一发荣和与一发自摸概率分别为 \(4.31\%\) 和 \(4.12\%\)。其余终局沿用超几何计数结果。宣言时支付 1000 点;和牌时取得庄家的立直棒和自己的立直棒。若流局时只有双方听牌,我方收入 1500 点,则
如果现在弃和,庄家在自己的九个摸牌位置中至少摸到一张胜牌的概率为 \(37.92\%\)。其余分支进入流局。假设我方之后没有放铳,流局时只有庄家听牌,则
所以
按天凤凤凰桌打点,这手牌在简化两人模型里明显高于弃和。优势来自已知未见胜牌、门清自摸、一发、里宝牌和立直棒;庄家较宽的未知待牌与打点抵消其中一部分。旁家暗手与未来摸牌已经包含在非主动位置中,会吸收胜牌,但旁家不会自行和牌或按时间提前结束本局。因此这仍不是完整四人 EV,不能把 \(+617.47\) 写成“第九巡四张嵌张应当追立直”的规则。
顺位状况与平台计分还会把点棒 EV 映射成不同的顺位分 EV,不能只凭这个正值断言实战一定进攻。
同一嵌张只有三张未见
现在只改一个输入:四张嵌张胜牌中已经看见一张,因此我方只有三张已知未见胜牌。巡目、宣言牌、手牌点数、里宝牌模型、庄家待牌和弃和 EV 全部不变。此时
所以
我方进入双方主动摸牌位置的期望胜牌数降为
庄家的 \(\mu_D=0.9148\) 不变。按期望胜牌数加权,我方胜牌先出现的权重从 \(47.21\%\) 降至
终局分布变为:
| 终局 | 四张全未见 | 三张未见 |
|---|---|---|
| 我方荣和 | \(20.08\%\) | \(16.27\%\) |
| 我方自摸 | \(20.08\%\) | \(16.27\%\) |
| 庄家自摸 | \(22.46\%\) | \(24.26\%\) |
| 我方摸切放铳 | \(22.46\%\) | \(24.26\%\) |
| 荒牌流局 | \(14.92\%\) | \(18.93\%\) |
第一轮的一发路线也随胜牌枚数减少。一发荣和概率从 \(4.31\%\) 降至 \(3.24\%\),一发自摸从 \(4.12\%\) 降至 \(3.13\%\)。沿用前面的条件平均点数和立直棒结算,得到
立即弃和分支没有使用我方胜牌枚数,所以仍为
于是
| 已知未见胜牌 | 进攻 EV | 弃和 EV | 进攻减弃和 |
|---|---|---|---|
| 4 张 | \(-1292.61\) | \(-1910.08\) | \(+617.47\) |
| 3 张 | \(-1805.72\) | \(-1910.08\) | \(+104.36\) |
少一张胜牌使进攻 EV 下降约 513 点。损失不只来自我方和牌率降低:庄家先和的权重和流局概率也同时上升。若把未分一发的 M 联赛庄家立直混合均值当作较高后续打点做敏感性检查,同一两人近似会得到四张约 \(+30\)、三张约 \(-546\)。这不是同口径复算,却说明打点样本的选择足以改变临界牌例的符号。
坎张一番直接日
两家一发立直下打危险宝牌
牌例发生在第六巡。我方打出宝牌 4,对庄家是 4/6 单边筋,对闲家无筋。逐巡表给出的庄家危险度为 \(5.6\%\) 或 \(6.4\%\),未知具体方向时取中点 \(6.0\%\);对闲家的危险度为 \(10.5\%\)。暂时把两家待牌视为独立,联合危险度为
普通立直荣和均值给出的当前无条件放铳损失为
这会低估宝牌一发巡的条件损失。表 2.1、2.2 已直接把一发分层:庄家由 \(7500\) 升至 \(10900\),闲家由 \(5300\) 升至 \(7600\)。同书表 3.9 又按和牌张是否为宝牌分层。对庄家 4/6 单边筋,宝牌荣和相对非宝牌荣和高 \(11600-8500=3100\) 点;对闲家无筋 4/5/6,高 \(7800-5800=2000\) 点。第 2 章表 13.1、13.2 与第 3 章表 29.1
表 3.9 本身混合了一发与非一发,所以不能直接读出“一发且和牌张为宝牌”的交叉均值。这里把一发增值与宝牌和牌张增值相加,得到一个透明的交叉近似:
| 当前放铳计分口径 | 庄家条件荣和值 | 闲家条件荣和值 | 当前无条件放铳损失 |
|---|---|---|---|
| 非一发、非宝牌基准 | 7500 | 5300 | 1006.50 |
| 非一发、和牌张为宝牌 | 10600 | 7300 | 1402.50 |
| 一发、非宝牌 | 10900 | 7600 | 1452.00 |
| 一发且和牌张为宝牌 | 14000 | 9600 | 1848.00 |
最后一行并非直接观测值。它假设两项增值近似可加,忽略一发、宝牌和基础打点之间的相关性与满贯封顶。优点是无需从混合均值反推番符,而且一发主效应和宝牌主效应都来自同一套天凤数据。但是由于满贯上限的存在,简单相加往往会高估点数。
安全通过后,三名立直玩家都参与胜牌竞赛。设每人未来摸 12 张,我方 5/8 索有七张已知未见,取 \(U_H=100\);两名对手的待牌继续按 \(q=72.8\%\) 混合四张与八张。第 2.4 节的计数模型给出:
于是:
| 终局 | 概率 |
|---|---|
| 我方荣和 | \(27.17\%\) |
| 我方自摸 | \(13.58\%\) |
| 庄家自摸 | \(9.86\%\) |
| 闲家自摸 | \(9.86\%\) |
| 我方向庄家放铳 | \(9.86\%\) |
| 我方向闲家放铳 | \(9.86\%\) |
| 两名对手之间和牌 | \(19.73\%\) |
| 荒牌流局 | \(0.0716\%\) |
按 \(D\to N\to H\) 的第一轮行动顺序,一发荣和与一发自摸概率分别为 \(12.21\%\) 和 \(4.91\%\)。我方基础荣和值为 6400 点,尚未计门清自摸、一发和里宝牌。使用同一里宝牌分布后:
| 我方和牌方式 | 条件平均点数 |
|---|---|
| 非一发荣和 | 7011.76 |
| 非一发自摸 | 8117.65 |
| 一发荣和 | 8117.65 |
| 一发自摸 | 9529.41 |
我方先支付 1000 点立直,和牌时取得三根立直棒。庄家非一发自摸时我方支付 3400 点,闲家非一发自摸时支付 1800 点;以后摸切放铳分别按 7500 与 5300 计。由此得到安全通过后的继续价值
若现在弃和,只让两名立直对手继续参与和牌竞赛,数学建模得到
把当前宝牌的三种条件计分口径接回
结果为:
| 当前放铳计分口径 | \(V\) | \(V-F\) | 盈亏平衡联合危险度 |
|---|---|---|---|
| 非一发、非宝牌基准 | \(+390.13\) | \(+1704.82\) | \(37.17\%\) |
| 非一发、和牌张为宝牌 | \(-5.87\) | \(+1308.82\) | \(28.34\%\) |
| 一发、非宝牌 | \(-55.37\) | \(+1259.32\) | \(27.52\%\) |
| 一发且和牌张为宝牌 | \(-451.37\) | \(+863.32\) | \(22.36\%\) |
当前使用的 \(15.87\%\) 来自普通逐巡牌类表,没有按“两家立直、一发巡、宝牌 4”三项交叉分层。同书第九巡宝牌表显示,宝牌危险度通常比同类普通牌高约 \(2\%\),却没有给出第六巡的交叉数据。可以认为,宝牌的危险度增加由玩家更倾向保留宝牌以及其附近牌的决策导致,第六巡经历的玩家决策次数更少,这个增量很可能低于 \(2\%\),但现有资料不足以定量确认。按“一发且和牌张为宝牌”的打点近似,联合危险度要超过约 \(22.4\%\) 才会翻转结论。这个打点近似可能偏高,危险度近似则可能偏低;两项误差方向相反。真正缺少的是两家立直、具体牌河、宝牌和巡目的联合危险度,以及一发荣和宝牌的平均打点。
数学建模仍把未立直旁家当作只消耗牌的玩家,也忽略普通巡目的先后。它适合说明七张两面、立直棒、计分增值和昂贵弃和如何抵消当前风险。要估计具体牌例,应改用模拟建模实体牌山,并从两家立直且宝牌条件相近的牌谱校准联合危险度。
8.3 三种一向听:合法局部牌形与实体牌河模拟
本节比较三种局部一向听:两面+两面、两面+两嵌、两面+嵌张。这里的“局部”有明确含义。改善所依赖的搭子、实际有效牌、改善后的待牌和入听弃牌彼此兼容,并占用真实实体牌;其余填充牌只负责补足暗手,不要求共同组成一副可完整解析的一向听手。填充牌偶然形成的附加待牌不计入。
合法待牌与一向听模板
待牌生成器只含五种基础模板:
- 两面从三门花色的 \(14,25,36,47,58,69\) 六种胜张组合中抽取。例如 \(1m/4m\) 两面在暗手中预留 \(2m,3m\)。
- 嵌张等 \(r\) 时预留 \(r-1,r+1\),其中 \(r=2,\ldots,8\)。
- 边张等 \(3\) 时预留 \(1,2\),等 \(7\) 时预留 \(8,9\)。
- 双碰选择两个不同牌种,各预留两张,所以每种胜张在手外至多剩两张。
- 单骑选择一个牌种,只预留一张,手外至多剩三张。
不加入延单骑、三面听等复合待牌。庄家和初始 \(T\) 态旁家先抽待牌模板,再从各自十三张暗手中占用所需构件。\(H\) 态旁家和我方使用局部 IishantenTemplate:每张有效牌绑定唯一的改善后待牌和一张确实存在于原手牌中的入听弃牌。玩家弃和后清除待牌和改善路线,但其暗手与牌河仍占用实体牌。
南家第九次弃牌的精确时点
我方固定为南家。初始状态位于庄家打出第九张立直宣言牌之后、南家处理当前摸牌之前:庄家河牌 9 张,南家、西家、北家各为 8 张;南家持十四张,其他三家各持十三张;活牌山有 36 张。
当前弃牌安全通过后,河牌数变成
活牌山仍有 36 张,我方未见位置恰为
之后的动作顺序是西家摸打、北家摸打、庄家下一摸。西家或北家的牌只有实际安全通过庄家后,才成为庄家的现物;它们也可能在庄家摸牌前被庄家一发荣和,此时本局结束,但我方点棒变化为 0。若两张牌都通过,庄家下一摸仍保留一发自摸;庄家完成下一次弃牌后,一发窗口结束。把我方放在末家会凭空多出两张已经对庄家安全的旁家弃牌,因此不采用那一时点。
每条路线按以下顺序建立:
- 建立 136 张实体牌的四枚计数器。
- 生成南家十四张当前手牌的局部一向听模板,并把候选弃牌作为第十四张显式放入。
- 抽取庄家和两名旁家的 \(T/H/F\) 状态、待牌或一向听模板,再从暗手份额中预留构件。
- 生成庄家 9 张、南家 8 张、西家 8 张、北家 8 张的既往牌河和一张明示宝牌指示牌。
- 排除待牌与本人牌河相交的振听状态,并检查当前牌类别。
- 将剩余牌无放回分配到三家其余暗手、13 张隐藏王牌和 36 张活牌山。
- 先检查南家的当前弃牌是否被实际待牌荣和,再按西、北、东、南的顺序推进。
任何牌种超过四张、模板构件不足、待牌与本人牌河冲突或当前类别不成立时,整条初始状态重抽,不在局部补牌。
现物、筋和实际荣和
四类当前候选牌使用可复现的代表牌:前三类为 \(3p\),无筋 \(4/5/6\) 为 \(4p\)。
当前候选牌的现物或筋类别只由庄家自己的 9 张既往牌河构造,不读取西家、北家的河牌,也不把一家立直者的现物转移给另一家。
| 类别 | 庄家初始牌河的条件 |
|---|---|
| 现物 | 候选牌本身已经出现 |
| 筋 \(3/7\) | 候选牌不是现物,但对应筋牌已经出现 |
| 无筋 \(2/3/7/8\) | 候选牌和对应筋牌都没有出现 |
| 无筋 \(4/5/6\) | 候选牌不是现物,相关两侧筋牌也没有出现 |
实际荣和只检查 WaitTemplate.winners。筋关系仍用于玩家的攻守门槛,但不替代待牌。例如 \(4m\) 若已对某名立直者安全通过,包含 \(4m\) 的 \(1m/4m\) 两面分支已经荣和或被排除;存活路线中不能再让 \(1m\) 通过同一两面分支放铳。每名立直者分别维护自己的现物集合,一家的现物不会自动保护另一家。后来立直的旁家以自己的完整既往牌河作为安全信息。
少量统计输入下的待牌校准
koba 的表给出“某类候选牌成为胜张的概率按待牌形式分解”,不是“每手牌有多大概率是某种待牌”。生成器因此先枚举全部 640 个合法基础模板,以均匀合法模板为先验,再拟合五种形式的总权重和少量镜像位置组。三个花色共用权重,没有逐牌参数。
这里不能把表内百分比直接当作模板权重。若 \(c\) 表示候选牌类、\(k\) 表示待牌形式,表格单元记录的是
而不是 \(P(\text{待牌形式为 }k)\)。例如 \(1m/4m\) 两面同时通过 \(1m\) 计入“\(1/9\times\) 两面”,又通过 \(4m\) 计入“\(4/5/6\times\) 两面”;一组跨牌类双碰也会同时影响两个单元格。一个完整待牌因此没有唯一对应的表格百分比。
模板数量也相差很大:两面 18 个、嵌张 21 个、边张 6 个、双碰 561 个、单骑 34 个。若把某种待牌的表格百分比赋给该形式下的每个模板,双碰会因 \(\binom{34}{2}=561\) 种组合而被重复放大;若只给五种形式各设一个表格比例,又会忽略同一待牌含有几个胜张、胜张落在哪些牌类,以及牌河、振听和牌数限制淘汰了哪些模板。
所以校准是一个反推问题。设合法模板 \(\tau\) 的相对权重为
程序先按这些权重生成完整合法状态,再从生成结果计算 \(\widehat p_{c,k}(\theta)\),最后寻找一组简单的 \(\theta\),使它接近 koba 的 \(p_{c,k}\)。正则项限制权重不要为了追平个别单元格而变得极端。这个“拟合”只是在完成
这一逆向转换,并不拟合 EV 或策略结论。若直接把表格总危险度用作一次独立荣和概率,虽然不需要反推,却会再次把放铳事件与暗手构件、实际胜张、振听、壁和后来形成的现物拆开,正好失去实体待牌模型要保留的关系。
校准样本同样生成完整实体状态,包含既往牌河、振听排除、可见牌、暗手、王牌和活牌山。拟合使用三轮各 20,000 个状态的提议分布更新,另以不同种子的 20,000 个状态独立检查。简单模型没有强行追平每格,牌类总危险度残差如下:
| 候选牌类 | 原表 | 拟合值 | 差值 | 蒙特卡洛标准误 |
|---|---|---|---|---|
| 字牌 | \(1.760\%\) | \(1.758\%\) | \(-0.002\) 个百分点 | \(0.043\) 个百分点 |
| \(1/9\) | \(6.090\%\) | \(5.639\%\) | \(-0.451\) 个百分点 | \(0.074\) 个百分点 |
| \(2/8\) | \(7.200\%\) | \(6.681\%\) | \(-0.519\) 个百分点 | \(0.080\) 个百分点 |
| \(3/7\) | \(7.940\%\) | \(7.342\%\) | \(-0.598\) 个百分点 | \(0.084\) 个百分点 |
| \(4/5/6\) | \(9.560\%\) | \(10.053\%\) | \(+0.493\) 个百分点 | \(0.062\) 个百分点 |
18 个基础“牌类×待牌形式”格的等权 RMSE 为 \(0.260\) 个百分点。主要牌类总误差目标是 \(0.5\) 个百分点;\(72.8\%\) 好形率只作独立对照,不参与抽样。
玩家策略与计分
我方仍比较六档未来策略:打到筋 \(3/7\)、打到无筋 \(2/3/7/8\)、全攻,以及固定 \(5\%\)、\(10\%\)、\(15\%\)危险度,按照巡目和牌类型查表低于危险度时进攻。多家立直时,行为门槛使用
这只是攻守策略的风险估计;是否荣和仍由实体待牌决定。\(T\) 态旁家打到无筋 \(2/3/7/8\),\(H\) 态打到筋 \(3/7\),\(F\) 态有 \(98\%\) 概率选择风险最低牌、\(2\%\) 概率不完美摸切。\(H\) 进张后按模板切出绑定的入听牌,并以 \(50\%\) 的演示概率立直(未立直时对应已经副露的情况)。初始先验保持为
听牌且未立直旁家按副露手处理:我方向其放铳损失 4345 点,闲家自摸时我方支付 \(4767/4=1191.75\) 点。数据取自 M 联赛分类表。\(H\) 态进张并立直后,改用闲家立直手的 5300 点荣和损失和 1800 点自摸付款。两组数值有意不同,因为立直门清手可以计门清自摸,副露手不能,样本来源也不同。庄家普通立直荣和损失为 7500 点,自摸时我方支付 3400 点;一发荣和与一发自摸付款分别为 10900 点和 4600 点。我方基础为立直后的 4 番 40 符满贯,门清自摸、一发与里宝牌另加。里宝牌仍采用
立即弃和时在同一副十四张手牌中立即选择对现有立直者联合风险最低的牌,并保留 \(2\%\) 不完美摸切;安全通过后清除我方的待牌与改善路线。
表中的弃和 EV 会随当前候选牌类别变化,因为四类结果分别条件于不同的庄家牌河和实体牌分配,并不是在同一批无条件牌局上更换一个标签。立即弃和选择的是该状态下十四张牌中最安全的一张;可用安全牌、庄家待牌、旁家副露和剩余牌山的条件分布都会随类别改变。另有 \(2\%\) 的不完美摸切会直接打出当前候选牌,使类别产生一项较小的直接影响。因此,弃和 EV 应在每个条件样本内重新计算,不能跨四类共用一个常数。
C++ 正式模拟结果
C++ 主引擎以种子 20260809 对 \(3\times6\times4\) 个单元格各运行 200,000 次。六档策略共享初始牌局种子,并直接计算相对立即弃和的配对差标准误。完整矩阵见随文结果文件。配对比较给出以下代表策略,其分别为每种情况下模拟得出的最佳策略:
| 牌形 | 代表未来策略 | 配对证据 |
|---|---|---|
| 两面+两面 | 全攻 | 相对固定 \(15\%\) 高 \(24.92\) 至 \(37.62\) 点,配对标准误 \(7.05\) 至 \(7.82\) 点 |
| 两面+两嵌 | 固定 \(10\%\) | 相对固定 \(5\%\) 高 \(6.99\) 至 \(16.57\) 点,配对标准误 \(2.60\) 至 \(2.82\) 点 |
| 两面+嵌张 | 固定 \(10\%\) 作为统一代表 | 与固定 \(5\%\) 的差为 \(-2.15\) 至 \(+5.88\) 点,配对标准误 \(2.54\) 至 \(2.71\) 点;多数格不能稳定区分 |
固定 \(5\%\) 与筋 \(3/7\) 在这组离散危险度下几乎给出同一行动,差值不到 \(0.1\) 点。代表策略只用于组织后面的分解,不是最优控制定理。
下表直接模拟当前弃牌是否命中庄家或初始副露旁家。\(C\) 是候选牌对所有可荣和者安全通过后的条件继续价值,\(F\) 是当前立即弃和 EV;\(\Delta\) 为进攻 EV 减弃和 EV,括号中为配对标准误。
| 牌形与策略 | 一发巡打出牌类别 | 进攻 EV | \(F\) | \(\Delta\) | 庄家命中 | 初始旁家命中 | \(C\) | 盈亏平衡庄家危险度 |
|---|---|---|---|---|---|---|---|---|
| 两面+两面,全攻 | 现物 | \(-1180\) | \(-1950\) | \(+770\ (12)\) | \(0.00\%\) | \(1.29\%\) | \(-1138\) | \(8.3\%\) |
| 筋 \(3/7\) | \(-1509\) | \(-1986\) | \(+478\ (12)\) | \(3.11\%\) | \(1.37\%\) | \(-1161\) | \(8.5\%\) | |
| 无筋 \(2/3/7/8\) | \(-2015\) | \(-2049\) | \(+34\ (13)\) | \(8.37\%\) | \(1.38\%\) | \(-1153\) | \(9.2\%\) | |
| 无筋 \(4/5/6\) | \(-2440\) | \(-2060\) | \(-381\ (14)\) | \(12.76\%\) | \(1.92\%\) | \(-1129\) | \(9.5\%\) | |
| 两面+两嵌,固定 \(10\%\) | 现物 | \(-1577\) | \(-1955\) | \(+378\ (7)\) | \(0.00\%\) | \(1.30\%\) | \(-1540\) | \(4.4\%\) |
| 筋 \(3/7\) | \(-1867\) | \(-2003\) | \(+136\ (8)\) | \(3.11\%\) | \(1.38\%\) | \(-1536\) | \(5.0\%\) | |
| 无筋 \(2/3/7/8\) | \(-2378\) | \(-2075\) | \(-303\ (9)\) | \(8.45\%\) | \(1.34\%\) | \(-1548\) | \(5.6\%\) | |
| 无筋 \(4/5/6\) | \(-2767\) | \(-2080\) | \(-687\ (10)\) | \(12.89\%\) | \(1.93\%\) | \(-1496\) | \(6.2\%\) | |
| 两面+嵌张,固定 \(10\%\) | 现物 | \(-1636\) | \(-1946\) | \(+309\ (7)\) | \(0.00\%\) | \(1.29\%\) | \(-1600\) | \(3.7\%\) |
| 筋 \(3/7\) | \(-1926\) | \(-1992\) | \(+66\ (8)\) | \(3.12\%\) | \(1.37\%\) | \(-1597\) | \(4.2\%\) | |
| 无筋 \(2/3/7/8\) | \(-2415\) | \(-2046\) | \(-368\ (9)\) | \(8.35\%\) | \(1.38\%\) | \(-1598\) | \(4.8\%\) | |
| 无筋 \(4/5/6\) | \(-2815\) | \(-2064\) | \(-751\ (10)\) | \(12.79\%\) | \(1.90\%\) | \(-1563\) | \(5.4\%\) |
“现物”只保证候选牌对庄家安全,所以仍有约 \(1.3\%\) 的初始旁家命中。实际庄家命中率也由牌河和合法待牌共同产生:筋 \(3/7\) 约为 \(3.1\%\),无筋 \(3p\) 约为 \(8.4\%\),无筋 \(4p\) 约为 \(12.8\%\)。逐巡表仍用于行为门槛,但不再外接一个与待牌无关的当前荣和概率。注意到弃和收益随着当前牌的危险度增加而减少,部分原因是当前牌的危险度决定了弃和的难度,如果手牌中有一张现物,手牌的整体安全度要高于有一张无筋456时。
两面+两面在无筋 \(3p\) 上只高出弃和约 \(34\pm13\) 点,属于边界;无筋 \(4p\) 已低于弃和。两种愚形对筋 \(3p\) 仍略高于立即弃和,但无筋 \(3p\) 已明显转负。这里的几十点只适用于这些说明性参数和局部牌形,不应改写成一般统计事实。
旁家进攻路线的消融
消融模型把西家、北家设为全程弃和:保留既往河牌和十三张暗手,之后仍按座次摸打并消耗活牌山,但清除其听牌和改善路线。两家不会进张、立直、荣和或自摸;其弃牌仍可能被庄家或南家荣和,安全通过后也照常形成对应立直者的现物。这样只关闭旁家的进攻与自身和牌路线,不会把本应由西、北摸走的牌转交给庄家和南家。以同一代表策略比较完整模型与消融模型:
| 牌形 | 完整模型减旁家全弃和 EV | 完整模型中的旁家相关终局率 | 解释 |
|---|---|---|---|
| 两面+两面 | \(-87\) 至 \(-74\) | \(8.3\%\) 至 \(9.7\%\) | 完整模型略低;四格差值约为合并标准误的 \(3.9\) 至 \(4.5\) 倍 |
| 两面+两嵌 | \(-38\) 至 \(-7\) | \(10.1\%\) 至 \(12.2\%\) | 差值较小,只有无筋 \(4/5/6\) 一格接近合并标准误的 \(2.6\) 倍 |
| 两面+嵌张 | \(-25\) 至 \(+9\) | \(10.2\%\) 至 \(12.4\%\) | 四格都不足合并标准误的两倍,不能稳定判断方向 |
两面+两面的负差可解释为旁家进攻路线截走一部分我方和牌机会;两种较慢牌形的差值大多落在抽样误差附近,不能据此判断旁家进攻究竟提高还是降低我方 EV。
旁家对 EV 的影响大致可以分为:一般情况下为正的影响,即对立直家放铳,荣和立直家或对主玩家放铳;一般情况下为负的影响,即自摸或荣和主玩家。
当前实现仍有几项局部近似:不从十四张填充牌自动解析完整向听数;不计填充牌造成的附加待牌;不模拟鸣牌、杠和途中流局;旁家 \(T/H/F\) 及其策略是演示参数;行为危险度表没有按宝牌、多家立直与具体牌河联合分层。模型的目标是用少量统计输入复现主要数量级和机制,不是逐格贴合牌谱。
好形满贯一向随便日,愚型该蹭也得蹭
8.4 两层模型各自负责什么
本文采用两个计算层次。第 2.4 节和第 8.2 节属于数学建模,第 8.3 节属于模拟建模的简化实现:
| 层次 | 计算方式 | 能自然产生的事件 | 不负责解决的问题 |
|---|---|---|---|
| 数学建模:胜牌计数模型 | 用第 2.4 节的超几何分布计算胜牌数量,再按期望数量近似首张胜牌;一发窗口使用有序事件树 | 胜牌进入主动摸牌的数量、流局、两方或三方的自摸/荣和/放铳近似、一向听路线转换 | 忽略待牌重叠与普通巡目顺序,不知道旁家为何保留或打出某张牌 |
| 模拟建模:实体牌山与玩家模拟 | 条件抽取局部合法暗手构件、填充牌、王牌区与活牌山,再按座次模拟策略 | 数学建模全部事件,以及旁家自身进张、实际弃牌、攻防转换与安全牌变化 | 不自动解析完整手牌,也不模拟鸣牌;蒙特卡洛还带有抽样误差 |
数学建模的输出应是确定值:同一组胜牌枚数、未知位置、主动玩家数量和计分只产生一个终局分布。模拟建模的输出则应同时报告均值和蒙特卡洛标准误。把模拟建模的旁家设为纯消费者、关闭鸣牌、忽略待牌重叠并随机化普通巡目的先后后,其大量模拟结果应接近数学建模计数模型。
第 8.3 节属于模拟建模的局部配置:胜牌不会被重复抽取,待牌构件实际占用暗手,旁家可以结束本局;旁家的 \(T/H/F\) 先验、危险度阈值、进张后立直率和打点仍是演示参数。旁家状态不由填充后的 13 张暗手反算,模型也不含鸣牌、杠或鸣牌造成的摸牌顺序改变。
各项经验输入并非来自同一赛事、时期或筛选口径。更严谨的实现应从同一批牌谱同时估计 \(q\)、\(R_D,R_N\)、\(T_D^{(C)},T_N^{(D)},T_N^{(C)}\)、\(r(d)\) 与旁家行为参数,给出样本量、置信区间和筛选代码,并按巡目、庄闲、宝牌、一发与立直人数分层。
数学建模用于检查胜牌枚数、未知位置分母和计分能解释多少;模拟建模再加入具体牌序、完整暗手、实际弃牌和旁家攻防。个位数或几十点的差值不应写成精确策略结论。
9. 两层计算如何接回通用递归
9.1 两层共享同一个目标函数
第 6 节的递归仍然成立:
数学建模用第 2.4 节的计数概率直接得到确定性的
模拟建模则对完整后续时间线抽样。若第 \(m\) 条模拟分支的最终点棒变化为 \(u_m\),则
两层使用不同的信息量,但计算的是同一个继续价值。当前危险度由危险模型输入,并与后续路线分开记账。不过,候选牌安全通过后会成为现物,也可能改变其他牌的筋状态,因此严格地说继续价值是 \(C_x(S,d)\)。只有在忽略这项牌河反馈时,更换候选牌的 \(r_x(d)\) 才无须重算后续分支。
9.2 当前风险与继续价值在同一实体状态中分解
第 8.3 节不再先从外部取一个当前危险度,再乘上独立生成的继续世界。对每副 136 张实体牌,程序先检查具体候选牌是否命中庄家或初始副露旁家的实际待牌。只有全部安全通过,才进入条件继续价值
若处于一发巡,只把庄家当前荣和率记为 \(r_D(d)\),忽略同时命中旁家的项,便于解释的盈亏平衡式仍为
正式 EV 则由模拟逐条结算庄家、旁家或多家同时荣和,不用这条单风险公式代替。第 8.3 节表中的盈亏平衡值只是把已模拟的 \(C_\pi(S,d)\) 和立即弃和 \(F(S)\) 代回上式,帮助判断数量级。
立即弃和也共享同一初始牌局。它从南家的十四张牌中立即选择联合风险最低的牌,保留 \(2\%\) 不完美摸切;进攻分支则打出指定候选牌。两者使用相同路线种子,直接估计
及其配对标准误。这样可以利用同一牌山造成的正相关,避免用两项均值标准误的简单相加代替差值不确定性。
9.3 第九巡筋 \(3/7\) 的解释
以 \(3p\) 为例,庄家河牌中已有对应筋牌而没有 \(3p\) 本身。合法待牌与振听排除共同把当前庄家命中率压到约 \(3.1\%\),不是直接代入逐巡表的 \(5.5\%\),差值可以由玩家行为解释,即骗筋的愚型听牌相比于不骗筋的愚型更可能立直。逐巡表仍决定玩家将后来摸到的牌视为多危险,但当前是否放铳由 WaitTemplate.winners 决定。
三种代表策略的结果为:
| 牌形 | 代表策略 | 进攻 EV | 立即弃和 EV | 配对差 | 安全通过后的 \(C\) |
|---|---|---|---|---|---|
| 两面+两面 | 全攻 | \(-1509\) | \(-1986\) | \(+478\pm12\) | \(-1161\) |
| 两面+两嵌 | 固定 \(10\%\) | \(-1867\) | \(-2003\) | \(+136\pm8\) | \(-1536\) |
| 两面+嵌张 | 固定 \(10\%\) | \(-1926\) | \(-1992\) | \(+66\pm8\) | \(-1597\) |
三个差值都为正,但来源不同。两面+两面的安全继续价值较高,可以承受较宽的后续摸切;两种愚形的优势主要来自立即弃和本身也要继续承担庄家自摸、残余防守放铳与流局未听成本。这里还包含约 \(1.4\%\) 的初始旁家当前命中,因此不能把总差简单还原为 \(3.1\%\times10900\)。
无筋 \(3p\) 时,庄家实际命中约升到 \(8.4\%\)。两面+两面只剩 \(+34\pm13\) 点,已进入结构误差可以翻转的边界;两面+两嵌和两面+嵌张分别变成约 \(-303\pm9\)、\(-368\pm9\) 点。合法待牌、当前牌河和安全通过后的新现物共同改变了分界。
9.4 门槛策略是递归的一种透明近似
完整最优策略应在每个未进张节点重新计算
门槛策略把这个决策压缩为
牌类策略的 \(\eta_\pi(x)\) 随巡目变化,固定策略保持为 \(5\%\)、\(10\%\) 或 \(15\%\)。现物和筋分别按每名立直者自己的牌河动态更新。门槛没有连续反映手牌价值、安全牌库存与形状变化,所以六档只是可解释的策略网格。
配对结果也说明,不应把样本均值最高的一档都写成唯一最优。两面+两面全攻相对次优策略的优势达到约 3 至 6 个配对标准误;两面+两嵌的固定 \(10\%\) 多数格也可分辨。两面+嵌张的固定 \(5\%\)、筋 \(3/7\) 与固定 \(10\%\) 经常只差数点,属于同一实用区间。
9.5 用总体终局比例做外部检查
2019 年天凤凤凰桌的一项统计可用于检查数量级。玩家面对先制立直后,我方和牌占 \(10.8\%\),放铳 \(11.1\%\),被任意玩家自摸 \(33.6\%\),其他玩家之间结束 \(27.1\%\),流局 \(17.4\%\);平均局收支为 \(-1003\) 点。样本说明与结果表
第 8.3 节三种代表策略跨四类当前牌的我方和牌率为 \(4.19\%\) 至 \(15.65\%\),庄家自摸率为 \(20.46\%\) 至 \(29.24\%\),旁家终局率为 \(8.30\%\) 至 \(12.44\%\),流局率为 \(25.81\%\) 至 \(45.64\%\)。这些比例随当前牌先把多少路线直接截断而变化,因此不能只用安全通过后的和牌率解释。差值可能来源于未建模副露,立直听牌的偏差,旁家的进攻倾向、手牌质量以及听牌占比。副露可以增加我方以及旁家的听牌速度,增加和牌率,但由于旁家有2人,对旁家和牌率提升更为显著。当前对旁家行为的建模固定旁家一向听手牌为“两面+嵌张”,参数设置也可能使得其进攻倾向和初始听牌占比过低,从而导致旁家结束的比例过低。
总体牌谱混合了不同向听数、牌形、打点、巡目、庄闲、鸣牌和玩家策略,本例又只解析局部搭子。外部比例适合检查终局数量级是否荒谬,不适合逐项拟合。更严格的验证应按当前向听数、牌形、巡目、立直人数、候选牌类别与后续策略分层,并同时报告中间事件和不确定性。
10. 防守弹性:安全牌库存也是手牌状态
常见一向听由两个完成面子、一个对子、两个未完成搭子和一张余牌构成。若余牌是所有立直对手都已经打过的现物,可定义安全牌库存
一次没有摸到有效牌后,为保留牌形而打掉这张现物,状态变为
此后即使牌形相同,继续价值也会下降,因为下一次仍没有摸到有效牌时,我方可能被迫切出筋牌或无筋牌。故更完整的我方状态可写成
安全性不会单调下降。立直对手之后打出的牌会成为新的现物;另一名立直者的弃牌也可能只对其中一人安全。实际实现可以把 \(k\) 扩展为按对手区分的安全牌向量,并在每次公开弃牌后更新。
筋牌不能计作 \(k\) 中的现物。若已经没有现物而选择切出筋牌,应为该弃牌赋予非零 \(r_x(d)\);“低风险”与“零风险”在接近临界点时会产生完全不同的决策。
10.1 多家立直时的防守门槛
面对多家立直,不能只问一张牌“对其中一家是否安全”。设立直者集合为 \(R\),牌 \(t\) 对第 \(j\) 家的条件放铳率为 \(r_j(t)\)。在暂时忽略各家待牌相关性时,打出该牌至少向一家放铳的概率可写为
例如,同一张牌对两家各有 \(7\%\) 危险度,独立近似下的联合危险度为
状态门槛策略先计算本巡摸牌 \(t\) 的 \(r_{\rm any}(t)\)。危险度不高于 \(\theta_z(x)\) 时摸切继续;超过门槛时转入弃和,并从 14 张候选牌中选择综合风险最低者。第 8.3 节的旁家采用
它们分别用于尚未立直的听牌旁家和一向听旁家,等于门槛时也继续。第九巡两者为 \(9.5\%\) 与 \(5.5\%\),以后按第 8.1 节逐巡变化。立直旁家强制摸切;\(F\) 态决定弃和后,不会因下一张牌较安全而重新进攻。
若各名立直者打点差异很大,纯粹最小化 \(r_{\rm any}\) 还不够。设同时向集合 \(A\subseteq R\) 放铳时我方总损失为 \(L_A(t)\);若规则允许双响,独立近似下该弃牌的即时条件期望损失为
弃和时应优先选择 \(D(t)\) 最小的牌,不一定选择 \(r_{\rm any}(t)\) 最小的牌。例如,一张牌的联合放铳率较低,但风险主要来自庄家,它仍可能劣于联合放铳率稍高、风险主要来自低打点闲家的牌。若忽略同时命中,可用
作为第一版实现。某张牌只有在对所有立直者均为现物时,联合危险度才为零;一家立直者刚打出的牌,只能把对应的 \(r_j(t)\) 置零,不能自动视为对其余各家安全。
乘积公式假设各家风险独立,实际待牌、筋线与可见牌信息往往相关。若样本足够,应直接统计“两家立直、给定巡目与牌类”的联合放铳率。第 8.3 节按 \(r_{\rm any}\) 排安全牌,完整实现可改按 \(D(t)\) 排序。
11. 近似、误差与适用边界
模型仍有以下近似:
- 均匀分配未知牌会漏掉弃牌选择透露的信息。更细的模型应从牌谱后验抽样。
- \(r(d)\)、\(L(d)\) 与对手是否听牌、待牌和打点相关,未必能够独立估计。
- \(T/H/F\) 压缩了旁家的牌形和安全牌库存。同为 \(H\) 或 \(F\),行为仍可能不同。
- 牌谱中的放铳率受玩家选择影响,不能无条件外推到很少被打出的候选牌。
- 可见牌、类别重叠、振听、役和宝牌保留都会改变名义有效牌的价值。
- 里宝牌、待牌与手牌构成相关;一发、鸣牌与终止时序也相关。
- 头跳或双响、途中流局、杠和切上满贯等规则会改变付款。
- 南场、击飞和四位规避等局面需要非线性顺位效用,点棒 EV 不能代替顺位 EV。
- 对现实中很少被打出的危险牌,模型评估的是分布外反事实。
这些限制决定结论的适用范围,也应进入敏感性分析。
12. 与既有工作的关系
动态规划、概率模拟和学习模型早已用于麻将:
- Mizukami 与 Tsuruoka 从牌谱学习对手的听牌、待牌和打点模型,再把这些分布放入蒙特卡洛模拟。论文页面
- Wagatsuma 等人用支持向量回归估计弃牌危险度。本文可直接把这类结果用作 \(r_x(d)\) 的校准模块。论文页面
- Kurita 与 Hoki 把麻将抽象为多个马尔可夫决策过程并推断原局面价值。动态规划与状态抽象已有明确先例。arXiv
- Gao 等人从牌谱训练卷积网络,预测弃牌、鸣牌和立直行动。arXiv
- Suphx 使用深度强化学习、全局奖励预测、oracle guiding 和运行时策略适应处理多人不完全信息麻将。arXiv
- Mortal 等强化学习系统直接学习策略,并会在具体牌例中给出建议。本文把这些建议当作外部决策,不反推网络内部的权重或优势幅度。项目仓库
本文组合了以下做法:
- 对我方手牌使用显式牌形转换;
- 让每次没有进张后的攻防选择递归发生;
- 对隐藏对手使用可由牌谱校准的粗粒度模型;
- 按终局、时序与路线透明拆解 EV;
- 用现有统计攻防表与 AI 判断校准和验证。
本文的工作是整理一种便于解释的结构近似。
13. 验证方法
13.1 校准输入模块
从大规模牌谱按巡目、庄闲、立直人数、筋关系、宝牌、可见牌、手牌状态和玩家水平分层,分别估计:
- 当前弃牌联合放铳率 \(r_x(d)\);
- 放铳条件损失 \(L_x(d)\);
- 对手立直后的荣和平均点数,以及庄家自摸、闲家自摸时各座位的付款分布;不得由荣和均值除以付款人数代替;
- 对手侧终止率 \(h_x\) 及其结局组成;
- 旁家 \(T/H/F\) 的先验与转移率,以及给定手牌、危险度和安全牌库存时继续进攻的行为概率;
- 各类待牌的自摸、荣和与流局概率;
- 一发、里宝牌和自摸打点的条件分布;
- 防守策略的残余放铳率与流局未听成本。
这些模块应在训练牌谱上估计,在分离的验证牌谱上检查校准曲线。例如,所有被模型赋值为 \(6\%\) 风险的候选弃牌,在合适的反事实校正或可比样本中是否约有 \(6\%\) 放铳。
13.2 验证中间事件
验证时应同时检查下列中间量:
- 活牌山中已知胜牌枚数分布是否正确;
- 我方到达各听牌形的概率是否正确;
- 对手侧在下一次我方摸牌前终止的概率是否正确;
- 旁家和牌、其他玩家之间和牌与流局率是否正确;
- 各终局的平均点棒收支是否正确;
- 最终 \(EV(\text{进攻})-EV(\text{弃和})\) 是否正确。
最终误差很小并不够。如果中间项的偏差恰好互相抵消,模型仍未正确解释局面。
随文测试还直接检查实体不变量:每种牌在全部区域合计恰为四张;四家手牌、\(9/9/8/8\) 牌河、王牌与 36 张活牌山长度正确;两面只可能是同花色 \(14,25,36,47,58,69\);双碰各预留两张,单骑只预留一张;所有待牌与本人既往牌河不相交;一张牌只会成为实际放过它的立直者的现物。固定种子下,Python 与 C++ 的 EV 和主要事件率均需落在合并标准误的三倍以内。
13.3 对照统计攻防表
把统计表中的局面分类映射为模型输入,在每个格子比较:
- 统计样本的进攻与弃和 EV 差;
- 数学建模胜牌计数模型的 EV 差;
- 模拟建模实体牌山模拟的 EV 差及蒙特卡洛标准误;
- 决策符号是否一致;
- 残差随巡目、打点、待牌、庄家与立直人数如何变化。
比较中间事件可以定位误差。若数学建模已接近统计结果,主要机制可能是超几何零命中概率、期望胜牌数权重、未知位置分母和计分。若只有模拟建模接近,差额更可能来自具体行动顺序、完整暗手、旁家出牌、鸣牌或递归防守。
本节实际完成的旁家进攻路线消融把西家、北家设为全程弃和。两家仍按座次摸打、消耗牌山并可能向庄家或南家放铳,只关闭自己的进张、立直与和牌路线。两面+两面的完整模型略低于消融模型,较慢牌形的差值大多与抽样误差同量级;旁家进攻的净影响不能压成一个与牌形无关的固定折扣。合法待牌、暗手实体预留和按各家牌河推导的现物与筋在正式模拟中同时启用;现有结果没有把它们对 EV、放铳率或旁家终局率的变化拆成独立贡献。若要做这种分解,应固定座次、时序、计分和旁家行为,使用共同牌局依次加入机制,并报告配对差;所得数值仍会依赖加入顺序。其他消融也应一次只改一项,例如关闭一发、把改善后的待牌视为同质,或把弃和 EV 设为零;若同时改变座次、待牌合法性、筋和计分,就不能把总差归因于其中一个机制。
13.4 在动机牌例上检验机制
取得完整牌谱后,应按以下顺序复盘:
- 锁定规则、真实座次、行动顺序与当前一发状态;
- 输入精确手牌、所有可见牌、各家牌河、副露、点棒和候选宝牌 4;
- 从匹配牌谱样本估计两家立直下的联合危险度与宝牌放铳条件打点,而不是把单家总体危险度直接相加;
- 分别输出立即弃和、打出宝牌后听牌、以及仍为一向听三种状态的点棒 EV;
- 把联合危险度 \(r(d)\) 在可信区间内扫一遍,给出结论翻转点;
- 依次关闭两根立直棒、一发、里宝牌、门清自摸、庄家身份、旁家进攻路线与愚形转换;
- 记录每次消融使 EV 移动多少,并用牌谱重采样或参数区间给出不确定性。
外部统计表或 AI 建议只用于比较决策方向,看它们是否也把这个牌例放在临界区附近。单个外部推荐概率不足以还原其内部目标,也不能成为调节无来源参数的理由。若模型与外部决策不同,应检查危险度、条件打点、对手终止、牌形转换和计分模块分别造成多少残差。
14. 实现与复现
随文实现分为两个引擎:iishanten_wall_sim.py 是可读的 Python 参考模型,负责模板定义、校准、确定性检查和小样本模拟;iishanten_wall_sim.cpp 使用相同的配置、权重和计分规则完成正式大样本模拟。固定种子时,每个引擎内部可复现;两者不要求逐条使用相同随机数。
实体模拟的输入包括:
- 三种局部一向听牌形之一;
- 六档我方未来策略之一;
- 当前候选牌类别或明确牌种;
- 旁家 \(T/H/F\) 先验、进张后立直率与攻守门槛;
- 庄家、旁家和我方各终局的点数口径;
- 待牌形式校准权重、种子和试验数。
每条路线保存完整四枚牌计数、四家暗手和牌河、明示宝牌、13 张隐藏王牌与 36 张活牌山。程序只要求局部搭子、有效牌、改善后待牌和入听弃牌合法,不声称填充后的整副手牌已经过完整向听解析。
JSON 输出至少包含:
- 引擎版本、种子、试验数、座次、河牌长度、行动顺序和校准权重;
- 牌形、策略、当前牌类别、EV 与标准误;
- 立即弃和 EV、进攻减弃和的配对差及其标准误;
- 当前牌对庄家与初始听牌旁家的实际命中率;
- 当前庄家一发荣和贡献和安全通过后的条件继续价值;
- 终局事件、路线和待牌形式计数;
- koba 各目标格的原值、拟合值、差值与蒙特卡洛标准误;
- 六档策略之间的共同牌局配对比较。
自动检查覆盖四枚守恒、区域长度、五种待牌模板、振听、每家独立现物、南家 \(9/9/8/8\) 河牌时点、36 张活牌山、88 个未见位置、当前一发荣和、庄家下一摸的一发自摸、立即弃和当前选牌、旁家全弃和消融和固定种子复现。Python 与 C++ 的小样本 EV 和主要事件率以合并标准误的三倍为容许范围。
正式结果使用 C++、种子 20260809 和每格 200,000 次试验。完整矩阵、候选策略配对结果、旁家全弃和消融、校准权重和验证脚本均保存在 outputs 目录。运行时间只用于确认 C++ 相对 Python 的数量级加速,不作为模型正确性的替代指标。
未来若加入完整手牌解析、鸣牌、杠、途中流局或顺位效用,应作为新的结构层逐项验证,不能在当前局部模型的数值上静默叠加。
15. 未来工作
该工作的目标为尽可能少地使用现成统计数据,采用简单且易解释的模型近似复现统计学麻将中的局收支计算结果,并用该模型计算其他情况下的局收支,因此未来工作主要围绕用建模代替统计数据展开:
立直平均打点和听牌类型分布可以通过以牌效率和打点策略主导的手牌模拟得到,得到听牌类型分布后也可计算出各牌的危险度。
副露模拟涉及到较为复杂的建模,可以大致分为“路线+决策”两层,路线决定是否副露以及副露的做牌方向(断幺九,混一色,形听等),决策以牌效率主导决定是否进行每次副露。
建模最大的困难在于将玩家行为建模成简单可解释的模型。如前文的模拟中旁家一向听的攻守判断简单建模成“打出筋37以及更安全的牌,摸到更危险的牌则全弃”。更接近玩家真实行为的建模不仅复杂度较高,也需要细粒度的行为数据。
结语
攻防判断同时受当前弃牌危险、未来牌形、听牌时要打出的牌、待牌质量、有限牌山、其他玩家、打点档位和弃和成本影响。这些因素共享一条时间线,其中任何一个事件先发生,都会取消后面的机会。
统计资料把这些因素压缩成稳定的结果,本文模型则把结果拆成可以检查的项目。读者可以看到假设,程序员可以替换输入模块,研究者可以检验中间事件。对实战玩家而言,模型最终要回答的是:
这张危险牌之所以仍能进攻,究竟是因为手牌的哪一条未来路线,又最多能危险到什么程度?
听牌通通日,一向听也能日