跳去正文

锄大地 · 大老二 · 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 人局 pass 咗要摸一张、3 人局会摊开一张唔要嘅牌。

开一局

识讲道理嘅顾问

打紧牌嗰阵开个面板,你可以出嘅每一手都会列出胜率、期望分,同埋出完仲剩几手。佢会点名边啲牌仲压得过你 —— 如果乜都压唔到,佢会直接讲,唔会含糊。

分析一个局面

规则讲晒

将两组牌摆埋一齐,佢会话你知边一手大啲,仲有系边一条规则话事 —— 即系大家会拗嗰几条:A-2-3-4-5 究竟系最大嘅顺定最细嘅顺、同花打和嗰阵边个花色赢。

比两手牌

入面点整

两个成日唱反调嘅引擎,呢样先至系好玩嘅地方

对手由你拣。一个靠计,一个靠感觉。佢哋拣嘅牌好多时都唔同,睇住佢哋拗都几过瘾。

概率机械人

计得出

佢先推出仲有边啲牌未现身,再问呢啲牌可以点对付你。单张嘅答案系精确嘅 —— 喺剩低牌堆上面嘅闭式概率,唔系估 —— 有时仲证明到某一手根本冇得压,或者证明你可以一路行晒成手牌都唔会甩庄。其余情况就将局面模拟几千次先决定。

顾问面板背后就系呢个引擎,所以佢畀到你嘅系概率,唔系意见。

神经网络机械人

3000 万+ 局自己同自己打

训练方法同 DouZero 学斗地主一样:自己同自己打几千万局,记住每个局面最后值几多分,再学识预测佢。上到枱佢乜都唔计 —— 一次过睇晒所有合法出牌,拣个感觉最好嘅,大约 3 毫秒。

佢公布嘅胜率系同一个刻意整弱咗嘅概率机械人打返嚟嘅,所以嗰个系训练进度,唔系话佢实赢。

点解 2 人局唔同

2 人枱度神经网络嗰个选项系熄咗嘅,你对住嘅系概率机械人。个网络系按 3–4 人训练嘅,而单挑锄大地根本系另一个游戏:剩低 26 张变咗摸牌堆、pass 要畀一张牌、输嗰个亦都唔会扣分。而家嘅 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 人嘅数字系佢 console 纪录度印出嚟嘅十一次评测。两次训练嘅纪录都喺个 repo 度,想睇可以自己揭。

点解呢啲数字信得过

浏览器入面嘅引擎系逐步对住原版核对过

顾问计啱咗先有用。呢样嘢一开始系个 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 张变咗摸牌堆、pass 要摸一张、输嗰个亦都唔扣分。而家嘅 2 人模型打唔赢概率引擎,所以冇出,呢个选项会直接熄咗,唔会偷偷换做第二个。
手机玩唔玩得?
玩得。牌枱、顾问面板同拣牌器都适配到手机阔度,掂萤幕同键盘都用得晒。

入座开牌

拣好人数同对手,大约十秒就开到局,顾问面板可以一直开住。

即刻开局