Skip to content

About

吹牛骰子(Liar's Dice / 大话骰)的概率模型、贝叶斯推断与最优决策。含论文、闭式概率代码与仿真数据。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

吹牛骰子:概率模型、贝叶斯推断与最优决策

用条件二项分布回答一件酒桌上天天发生、却很少被算清楚的事:
已知人数、自己的骰子和叫法历史,现在该跟、该加,还是该开?

这是一份独立数学研究(v2.0,2026 年 8 月),不是游戏 App。仓库里有论文、闭式概率代码、仿真数据和论文图。

论文 代码 数据 图
PDF · Word liars_dice/prob.py data/ figures/

这个项目在研究什么

吹牛骰子(Liar's Dice / 大话骰)是多人不完全信息博弈:每人 5 颗六面骰,只能看自己的,轮流叫「至少有 (q) 个面 (f)」,或者开上家。飞模式里 1 是万能牌,斋模式里不是。

民间口诀很多(「人多敢叫大」「有对才敢叫」),但一次跟叫会泄露手牌,一次开牌又像做假设检验。本研究把这件事拆成四层:

  1. 概率:叫法成立的精确概率(闭式二项分布,不是蒙的)
  2. 信息:自己手里有几颗有效骰,会怎样改写这个概率
  3. 信念:对手一路叫什么,能推断他手里大概有货还是在诈
  4. 决策:成立概率、立刻开的胜率、最终活下来的概率,是三个不同的数,不能混着用

理论部分用 scipy 二项分布右尾逐点校验;实证部分跑了 89,600 局 蒙特卡洛自博弈(7 种策略 × 双人轮换 × 飞/斋)和 440 桌 五人大逃杀,置信区间用 Clopper–Pearson,多对比较做了 Bonferroni 校正。


核心结论(先看这个)

1. 自己的骰子不是装饰,漏算会开错牌。

5 人飞局、被叫「8 个 5」:如果你手里其实有 4 颗有效支持,真实成立概率是 0.940;如果你假装自己没贡献,会算出 0.339,差了将近 3 倍。按后者会考虑开,按前者绝对不该开。

2. 人越多,同一句叫法越安全;斋局比飞局紧一档。

「6 个某点」在飞局里:3 人桌只有 7.7%,5 人桌已经 70.3%,10 人桌接近 100%。斋局整体左移,5 人桌同一句只剩 10.2%。

飞模式下叫法成立概率随人数与数量变化

3. 纯策略会被打穿,均衡必须带随机。

仿真里,固定阈值、固定风格的启发式代理,会被不可预测的打法显著剥削。双人飞局里随机型胜率 83.8%(95% CI: 82.8%–84.7%)。这支持「不存在纯策略均衡」的理论结论——但不等于「乱叫就是最优」。随机型数字偏高,也和当前启发式代理的实现局限有关,正文第 9.5 节有诚实讨论。

4. 开牌不要用一条死线。

经验校准的分层区(随人数、位置、对手风格浮动,不是普适常数):

上家叫法成立概率 (p) 建议
(p \le 0.15) 果断开
(0.15)–(0.30) 比较跟下去还值不值
(0.30)–(0.70) 通常跟
(0.70)–(0.90) 谨慎跟
(p \ge 0.90) 绝不开

开牌阈值决策分区


今晚就能用的 12 条

这些是正文表 18 的压缩版,每条后面都有对应公式或表格。

  1. 首叫优先叫自己有支持的点数。
  2. 手里不成对,就用万能面 1 起步(飞局里最模糊,真 1 和伪装分不清)。
  3. 成立概率 ≥ 0.6、又没远超期望,就跟。
  4. (p\le 0.15) 果断开,(p\ge 0.90) 绝不开。
  5. 5 人桌正常节奏大约 3→4→5→6→7;过了 8、9 必须手里有货。
  6. 有人出局后收一收——场上骰子少了,每颗权重变大。
  7. 对手一路抬同一面、不换面:大概率有货,别轻易开。
  8. 对手突然换面或突然加速:警惕诈唬,找他撑不住的面开。
  9. 后手可以观望一轮;先手把起步价压低一点施压。
  10. 自己只剩 2 颗骰时极度保守;4–5 颗还能扛一次失败。
  11. 斋局把叫量整体收紧一档。
  12. 被连续逼到高价、自己又没支持,及时止损。

5 人飞局安全区速查(期望有效骰 (\approx 8.3) 颗/面):常见安全叫量 (\le 7),危险区 (\ge 10)。


仓库里有什么

吹牛骰子数学研究/
├── README.md                                      ← 你正在看的这份
├── 吹牛骰子概率博弈最优决策研究.pdf                 ← 主论文(32 页)
├── 吹牛骰子概率博弈最优决策研究.docx                ← 可编辑源
├── Final Report.md                                ← 终检记录(深化点、表格修复、诚实标注)
├── liars_dice/
│   ├── prob.py                                    ← 闭式概率引擎(可独立使用)
│   └── scripts/
│       ├── plot_figures.py                        ← 生成 fig1–fig6
│       └── gen_formulas.py                        ← 渲染论文公式图
├── data/                                          ← 仿真原始结果与检验表
├── figures/                                       ← 论文图 1–6
└── formulas/                                      ← 公式图 eq01、def03、thm04 等

论文附录 D 还描述了一套更完整的源码(游戏引擎、7 类代理、排行榜脚本、1,200,004 项校验)。当前这个目录里,上述引擎和代理尚未收录,但概率模块、论文图、原始数据和主论文都在。已发表的数值都可以对照 data/ 核对;概率表可以用 prob.py 当场重算。


环境

  • Python 3
  • 只算概率:标准库就够(prob.py 在没有 scipy 时会走纯 Python 求和)
  • 画论文图:numpy、scipy、matplotlib
python3 -m pip install numpy scipy matplotlib

中文图需要本机有 CJK 字体(脚本默认 Noto Sans CJK SC)。没有的话,图能出,标题可能缺字。


快速上手:算一局该不该开

在项目根目录打开 Python:

import sys
sys.path.insert(0, ".")
from liars_dice import prob

# 5 人飞局,上家叫「8 个 5」,我手里是 [1, 1, 3, 5, 5]
p, k = prob.cond_claim_probability(
    q=8, n_players=5, my_hand=[1, 1, 3, 5, 5], face=5, mode="fly"
)
print(f"我有 {k} 颗有效骰,成立概率 {p:.3f}")
# 我有 4 颗有效骰,成立概率 0.940  → 绝不开

换几个常用问题:

# 完全不看自己的牌,「6 个某点」在不同人数下有多真?
for n in [3, 5, 8, 10]:
    p_fly = prob.uncond_claim_probability(6, n, 5, "fly")
    p_zhai = prob.uncond_claim_probability(6, n, 5, "chase")
    print(f"{n} 人  飞 {p_fly:.3f}  斋 {p_zhai:.3f}")

# 首叫:希望成立概率至少 60%,最多能叫几颗?
q = prob.safe_call_quantity(
    0.60, n_players=5, my_hand=[1, 2, 3, 5, 5], face=5, mode="fly"
)
print("安全首叫量", q)

没有 scipy 也能算。若已安装 scipy,可跑模块自检(会和二项分布右尾逐点对一下):

python3 liars_dice/prob.py

mode 只认两个值:"fly"(飞,1 万能)和 "chase"(斋,1 不万能)。


三个概率,别混

这是正文第 5 节最重要的澄清。记 (M=(N-1)\times 5) 为对手未知骰数,(k) 为自己手里对该面的有效骰数:

符号 含义 什么时候用
(P_0(q)) 假装自己 0 贡献时的下界 只做最保守估计
(P_k(q)) 已知自己有 (k) 颗支持 决策时该用这个
(P_{\mathrm{tot}}(q)) 谁的牌都不知道 开局前的先验,不是你坐下之后该用的数

定理(2,793 个格点逐点验证,无一违反):

  • 自己每多一颗有效骰,(P_k) 只升不降
  • 存在交叉点 (k^*):支持不够时 (P_k) 低于完全先验,支持够了则高于它
  • 用 (P_0) 代替 (P_k),永远低估成立概率

对应公式图:formulas/par00.png(基本参数)、formulas/eq01.png(无条件)、formulas/thm04.png(单调性与交叉点)。


论文图

图 文件 在说什么
1 fig1_probability_surface.png 人数 × 叫量的成立概率曲面
2 fig2_fly_chase_comparison.png 同一句「6 个某点」,飞 vs 斋
3 fig3_conditional_vs_unconditional.png 不同盅型把概率拉高多少
4 fig4_threshold_decision_zones.png 开牌阈值分区
5 fig5_dice_pattern_heatmap.png 盅型战略评分(启发式,不是均衡解)
6 fig6_leaderboard_bar_ci.png 五人桌策略排行榜 + 95% CI

图已经生成好了,直接看 figures/ 即可。若要重画,需要先把脚本里的输出路径从原来的 /outputs/... 改成本仓库的 figures/ 和 data/;plot_figures.py 还引用了论文完整工程里的 liars_dice.agents.base(当前目录没有这个模块),图 5 的评分矩阵目前是脚本内写死的。


数据说明

data/ 是仿真落盘,不是需要再爬的外部数据集。随机种子在论文附录 B 中固定为 SEED = 20260826。

文件 内容
leaderboard_pairwise_fly.csv / _chase.csv 双人轮换交锋排行榜
leaderboard_tabletop_fly.csv 五人飞局大逃杀排行榜(每策略 220 局)
summary_pairwise_fly_2.json / _chase_2.json 双人赛汇总(总局数、各策略胜率)
raw_pairwise_fly_2.jsonl / _chase_2.jsonl 双人赛逐局原始记录
z_tests_pairwise_fly.csv / _chase.csv 成对 Z 检验(Bonferroni 校正)
expA_population_sensitivity.json 实验 A:人数敏感性
expB_threshold_ablation.json 实验 B:开牌阈值消融
expC_shape_value.csv 实验 C:盅型价值(安全首叫量)

五人飞局排行榜(与正文表 11 一致):

排名 策略 胜率 95% CI
1 random 0.659 [0.592, 0.722]
2 aggressive 0.164 [0.117, 0.219]
3 rational 0.123 [0.083, 0.174]
4 bluff 0.027 [0.010, 0.058]
5 conservative 0.027 [0.010, 0.058]

双人飞局 44,800 局汇总:random 0.838,aggressive 0.610,bluff 0.579,rational 0.571,adaptive 0.479,follow 0.477,conservative 0.447。


论文结构

  1. 引言:要回答的决策问题
  2. 相关工作:Ferguson 二人解析、MCTS、CFR、黄信翰毕业论文
  3. 规则与形式化:状态 (S=(N,H,B,R,P,\mathrm{mode}))
  4. 无条件成立概率(表 3a/3b、图 1、图 2)
  5. 条件概率与压缩效应定理(表 5–6、图 3)
  6. 贝叶斯信念更新(信任权重 (\tau \approx 0.3)–(0.5))
  7. 行动价值:成立概率 ≠ 立刻开胜率 ≠ 最终存活率
  8. 博弈论:纯策略均衡不存在;二人动态规划框架
  9. Monte Carlo 实证与诚实讨论
  10. 策略表与 12 条实战法则
  11. 结论与展望

附录 A 推荐算法伪代码 · 附录 B 复现命令 · 附录 C 文献 · 附录 D 目录索引


局限(正文里写明的)

  • 阈值 0.15 / 0.30 / 0.90 由模拟校准,会随人数、位置、对手风格变,不是放之四海都准的常数。
  • 「随机型领先」有两层解释:理论层(纯策略可被剥削)和工程层(启发式代理的延续价值评估有偏)。本文不声称随机叫法本身是最优策略。
  • 「完全不诈唬会被剥削」是均衡直觉,具体诈唬频率还没有从均衡计算里给出。
  • 8 人以上计算量上升,10 人以上外推要谨慎。
  • 严格贝叶斯纳什均衡未求(5 人联合类型空间约 (9\times 10^{18}))。CFR / 自我对弈强化学习列为未来工作。
  • 独立研究,未经外部同行评审。

参考文献

  1. T. S. Ferguson. Who Solved the Liar's Dice Game?(作者主页;UCLA 原 PDF 已下线,此为互联网档案馆。二人解析框架,本文动态规划的直接来源)
  2. J. Platt, L. Guo. Liar's Dice and Monte Carlo Tree Search(2018;公开可核的相关工作见 Brown 等 ReBeL,用搜索求解吹牛骰子)
  3. M. Bowling, N. Burch, M. Johanson, O. Tammelin. Heads-up Limit Hold'em Poker is Solved. Science, 2015. 另见 Burch, Johanson, Bowling. Solving Imperfect Information Games Using Decomposition. AAAI, 2014.(CFR)
  4. 黄信翰. 吹牛骰子之博弈分析. 国立台湾大学统计学研究所硕士论文.(馆藏也可在台湾博硕士论文知识加值系统检索)

引用

数学研究组. 吹牛骰子(Liar's Dice / 大话骰):概率模型、贝叶斯推断与最优决策策略.
独立研究 v2.0, 2026.

声明:本研究为独立数学工作,未经外部同行评审;概率表、仿真数据和论文图均可在本仓库内核对。

About

吹牛骰子(Liar's Dice / 大话骰)的概率模型、贝叶斯推断与最优决策。含论文、闭式概率代码与仿真数据。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages