跳到正文

锄大地 · 大老二 · Big Two

和一个会算给你看的机器人玩锄大地。

大多数纸牌游戏只会赢你,这一个还会告诉你为什么。打开顾问面板,手里每一个合法出牌都会标出胜率、值多少分、以及还有什么能压过它 —— 输掉的一局也能学到东西。

免费 · 2、3 或 4 人 · 多局累计到 100 分

机器人的思考时间
3 ms

浏览器内实测中位数,95 百分位为 14 毫秒

每个对手的自我对弈局数
3000 万+

4 人网络 3270 万局,3 人网络 3550 万局

合法出牌都会排序
全部

胜率、期望分数,以及背后的理由

3 人局最佳单副胜率
61.3%

对手是概率机器人,均势下应为 33.3%

你会得到什么

一个值得一战的对手,和一位随时在旁的参谋

完整的一局

支持 2、3、4 人的完整锄大地,多局累计到 100 分为止。麻烦的规则一个不少:A-2-3-4-5 是最小的顺子、花色决定同点大小、首局由方块 3 开牌、2 人局过牌要摸一张、3 人局明置一张废牌。

开始一局

会讲道理的顾问

对局中打开面板,你能出的每一手牌都会列出胜率、期望分数,以及出完之后还剩几手。它会点名哪些牌还能压过你 —— 如果没有任何牌能压,它会直接说,而不是含糊其辞。

分析一个局面

规则说了算

把两组牌摆在一起,它会告诉你哪一手更大,以及是哪一条规则决定的 —— 正是大家会吵起来的那几条:A-2-3-4-5 到底是最大的顺子还是最小的、同花打平时该由哪个花色赢。

比较两手牌

内部构造

两个会互相唱反调的引擎,这才是有意思的地方

对手由你来选。一个靠推算,一个靠感觉。它们选的牌经常不一样,看它们争起来本身就挺好玩。

概率机器人

推算

它先推出还有哪些牌没露面,再问这些牌能对你做什么。对单张来说答案是精确的 —— 在剩余牌堆上的闭式概率,而不是估计 —— 有时还能证明某一手根本压不过,或者证明你可以一路走完整手牌而不丢庄。其余情况就靠把局面模拟上千次来决定。

顾问面板背后就是这个引擎,所以它给的是概率,而不是意见。

神经网络机器人

3000 万+ 局自我对弈

训练方式和 DouZero 学斗地主一样:自己跟自己打上千万局,记住每个局面最后值多少分,再学着预测它。上桌时它什么都不算 —— 一次看完所有合法出牌,挑出感觉最好的那个,大约 3 毫秒。

它公布的胜率来自和一个刻意调弱的概率机器人对战,所以那是训练进度,不是说它稳赢。

为什么 2 人局不一样

2 人桌上神经网络选项是关掉的,你面对的是概率机器人。网络是按 3–4 人训练的,而单挑锄大地是另一个游戏:剩下的 26 张成为摸牌堆、过牌要付出一张牌、输家也不会扣分。现有的 2 人网络打不过概率机器人,所以干脆不发布 —— 这个选项会灰掉并写明原因,而不是在你背后悄悄换掉。

它是怎么学会的

没有人教过它锄大地,它自己跟自己打了 30 million 副。

锄大地没有一本「好棋谱」可以抄,所以这个网络从来没被人教过一步。它被丢去自己跟自己打,只被告知谁赢了、赢多少,剩下的自己想明白 —— 和 DouZero 学斗地主用的是同一套办法,叫做深度蒙特卡洛。一共两次训练,3 人桌和 4 人桌各一次,单机各跑 6 小时。

  1. 01

    先打几百副

    每一轮它会发 512 副新牌打完。对手是它自己早先的版本 —— 一个 6 个旧版本的池子 —— 所以它没法靠钻某一个固定对手的空子取胜。每 10 步里有一步是随机下的,正是这一点让它不会一头钻进死胡同、再也不肯试别的。

  2. 02

    等这一副打完再算账

    牌局进行中它不作任何评判。等一副结束,这副里的每一步都会被标上这局对出牌的那个人到底值多少分 —— 剩下的牌,按规则该翻倍翻三倍的照算。不用一个估计去猜另一个估计:标签就是真实结果。

  3. 03

    学着提前看出来

    这些带标签的出牌进入一个只保留最近 500,000 条的缓冲区,网络要学的就是只看局面和这一手牌,预测最后那个分数。整个把戏就在这里 —— 上桌之后它不做任何模拟,一次给所有合法出牌打分,出分最高的那一手。

它真的变强了吗?

每训练 10,000 轮就停下来,坐 1 号位对一个调弱的概率机器人打 800 副。在虚线以上,就说明它赢得比这桌该有的份额多。

  • 3 人训练
  • 4 人训练
  • 均势线

训练轮数

用表格看这些数字
轮数3 人训练4 人训练
10,00051.9%38.2%
20,00056.6%42.8%
30,00056%43%
40,00056.9%39.6%
50,00057.1%43.9%
60,00059%43.5%
70,00057%44.6%
80,00061.3%47.1%
90,00058.1%43.6%
100,00058.2%44.8%
110,00058.1%44.4%

误差在往上走,这是正常的

每 700 轮的训练误差中位数,色带是这一段里的最低和最高值。所有点都来自 3 人训练自己的逐轮日志。

训练轮数

为什么往上走不代表坏了。 它不是在拟合一份固定的标准答案。它变强的同时对手也跟着变强、牌局也打得更凶,所以它要预测的那个东西一直在变难。误差从 0.047 升到 0.155 而胜率同时也在涨,正是这类训练健康时该有的样子;真正该担心的是误差在降、胜率却不动。

机器上跑的是什么

两次训练用的是同一个网络和同一套设置,只有桌上的人数不同。

网络结构
mlp (512, 512, 256)
参数量
544,769
网络的输入
288 个数 —— 局面 225 个,出牌 63 个
训练目标
与这一副真实得分的均方误差
每轮对弈副数
512
对手
6 个它自己的旧版本
随机出牌
10% 的时候
回放缓冲区
500,000
每次评测副数
800 副,坐 1 号位对概率机器人

两次训练

指标3 人4 人
打过的副数35.5 M32.7 M
实际耗时6 小时6 小时
每秒副数1,7561,611
最佳单副胜率61.3%47.1%
均势应为33.3%25%
结束时的误差0.15480.2135

有一点如实说明,不藏着:只有 3 人训练的逐轮日志保存了下来,所以误差图只有那一次训练。4 人的数字来自它控制台日志里打印的十一次评测。两次训练的日志都在仓库里,想看可以自己翻。

这些数字为什么可信

浏览器里的引擎是逐步对着原版核对过的

顾问只有算对了才有用。这一切最初是个 Python 项目,而那些代码没办法搬进浏览器 —— 于是它被重写成 TypeScript 和 WebAssembly,再拿去对着原版核对:Python 那边把自己实际的行为导出成记录,浏览器引擎必须一模一样地复现。

12 局对局,逐步复现

录下的 2、3、4 人对局 —— 其中一局打满 102 副直到 100 分 —— 在浏览器里走出完全相同的过程。

143 万个回合没有出错

300 局完整对局,每一个回合都检查:牌数守恒、出牌合法、计分正确,从未出现过非法状态。

该精确的地方就精确

单张被压过的概率用精确整数运算,和原版对到小数点后十二位。

同样的规则,验证过

154 项测试覆盖规则引擎,包括大家常争的边角 —— A-2-3-4-5 顺子、同花的比法,以及只能同张数相压。

同一个网络

每一个权重都逐位往返一致,浏览器选的牌就是 PyTorch 选的牌。

同一个 C 引擎

模拟内核就是原来的 C 源码编译成的 WebAssembly,所以你标签页里跑的是被基准测试过的那份代码,不是重新解读的版本。

全部开源 —— 阅读引擎、训练流程和测试套件

常见问题

简短的回答

锄大地是什么?
锄大地(也叫大老二、Big Two、Dai Di)是 2–4 人的甩牌游戏。可以出单张、对子、三条或五张的牌型,每一手都要压过上一手,先出完手牌的人赢这一副。点数从 3 最小到 2 最大,同点时按方块、梅花、红桃、黑桃的顺序比花色。
免费吗?
免费。没有任何要买的东西,不用下载,也没有广告,打开网页就能开局。
几个人能用同一台设备一起玩吗?
可以。把任意多个座位设成真人,牌桌就会变成轮流传递的模式:每个人的手牌默认盖着,轮到谁谁点一下才亮出来,出完牌又会自动盖回去。
顾问是怎么给出建议的?
概率引擎先从你的手牌和已出的牌推出还没露面的牌,算出每个候选出牌被压过的可能性,再对着假想的对手手牌把局面模拟上千次。对单张来说这个概率是精确的闭式计算而不是采样,有时它还能直接证明某一手根本压不过。
神经网络对手有多强?
它是 DouZero 风格的价值网络,4 人桌训练了 3270 万副,3 人桌 3550 万副。公布的胜率来自和一个刻意调弱的概率机器人对战,所以应当看作训练进度,而不是说它能碾压对手。
为什么 2 人局不能选神经网络?
网络是按 3–4 人训练的,而 2 人锄大地是另一个游戏:剩下的 26 张成为摸牌堆、过牌要摸一张、输家也不扣分。现有的 2 人模型打不过概率引擎,所以没有发布,这个选项会直接关闭,而不是悄悄换成别的。
手机上能玩吗?
可以。牌桌、顾问面板和选牌器都适配到手机宽度,触屏和键盘都能完整操作。

入座开牌

选好人数和对手,大约十秒就能开始,顾问面板可以一直开着。

立即开局