完整嘅一局
2、3、4 人都玩得嘅完整锄大地,一副接一副打到 100 分。麻烦嘅规则一样都冇少:A-2-3-4-5 系最细嘅顺、同点睇花色、第一副由階砖 3 开牌、2 人局 pass 咗要摸一张、3 人局会摊开一张唔要嘅牌。
开一局喺浏览器度实测中位数,95 百分位系 14 毫秒
4 人网络 3270 万局,3 人网络 3550 万局
胜率、期望分,同埋点解
对手系概率机械人,均势应该系 33.3%
你会得到啲乜
入面点整
对手由你拣。一个靠计,一个靠感觉。佢哋拣嘅牌好多时都唔同,睇住佢哋拗都几过瘾。
佢先推出仲有边啲牌未现身,再问呢啲牌可以点对付你。单张嘅答案系精确嘅 —— 喺剩低牌堆上面嘅闭式概率,唔系估 —— 有时仲证明到某一手根本冇得压,或者证明你可以一路行晒成手牌都唔会甩庄。其余情况就将局面模拟几千次先决定。
顾问面板背后就系呢个引擎,所以佢畀到你嘅系概率,唔系意见。
训练方法同 DouZero 学斗地主一样:自己同自己打几千万局,记住每个局面最后值几多分,再学识预测佢。上到枱佢乜都唔计 —— 一次过睇晒所有合法出牌,拣个感觉最好嘅,大约 3 毫秒。
佢公布嘅胜率系同一个刻意整弱咗嘅概率机械人打返嚟嘅,所以嗰个系训练进度,唔系话佢实赢。
点解 2 人局唔同
2 人枱度神经网络嗰个选项系熄咗嘅,你对住嘅系概率机械人。个网络系按 3–4 人训练嘅,而单挑锄大地根本系另一个游戏:剩低 26 张变咗摸牌堆、pass 要畀一张牌、输嗰个亦都唔会扣分。而家嘅 2 人网络打唔赢概率机械人,所以索性唔出 —— 呢个选项会灰咗兼写明原因,唔会喺你背后偷偷换咗佢。
佢点样学识嘅
锄大地冇一本「好棋谱」可以抄,所以呢个网络由头到尾都冇畀人教过一步。净系掉咗佢自己同自己打,只系话畀佢知边个赢、赢几多,其余自己谂 —— 同 DouZero 学斗地主用嘅系同一套方法,叫做深度蒙特卡洛。一共训练咗两次,3 人枱同 4 人枱各一次,一部机各行 6 个钟。
01
每一轮佢会发 512 副新牌打晒。对手系佢自己早期嘅版本 —— 一个 6 个旧版本嘅池 —— 所以佢冇得靠捉住某一个固定对手嘅弱点嚟赢。每 10 步就有一步系随机行嘅,正正系呢样嘢令佢唔会一头扎入死胡同、之后乜都唔肯试。
02
打紧嗰阵佢乜都唔评。等一副完咗,呢副入面每一步都会标上呢局对出嗰个人究竟值几多分 —— 剩低嘅牌,规则话要翻倍翻三倍就照计。唔使攞一个估计去猜另一个估计:个标签就系真实结果。
03
呢啲标咗分嘅出牌会入一个净系留最近 500,000 条嘅缓冲区,网络要学嘅就系净睇局面同呢一手牌,预测到最后嗰个分数。成个花臣就喺呢度 —— 上到枱佢乜模拟都唔做,一次过畀所有合法出牌打分,出分最高嗰一手。
每训练 10,000 轮就停低,坐 1 号位对一个整弱咗嘅概率机械人打 800 副。喺虚线以上,就即系佢赢得多过呢枱应有嘅份额。
训练轮数
| 轮数 | 3 人训练 | 4 人训练 |
|---|---|---|
| 10,000 | 51.9% | 38.2% |
| 20,000 | 56.6% | 42.8% |
| 30,000 | 56% | 43% |
| 40,000 | 56.9% | 39.6% |
| 50,000 | 57.1% | 43.9% |
| 60,000 | 59% | 43.5% |
| 70,000 | 57% | 44.6% |
| 80,000 | 61.3% | 47.1% |
| 90,000 | 58.1% | 43.6% |
| 100,000 | 58.2% | 44.8% |
| 110,000 | 58.1% | 44.4% |
每 700 轮嘅训练误差中位数,条色带系呢一段入面嘅最低同最高值。所有点都嚟自 3 人训练自己嘅逐轮纪录。
训练轮数
点解向上行唔代表坏咗。 佢唔係喺度砌一份固定嘅标准答案。佢变强嘅同时对手都一齐变强、牌局亦都打得更狠,所以佢要预测嗰样嘢一直变紧难。误差由 0.047 升到 0.155 而胜率同时都升紧,正正系呢类训练健康嗰阵应有嘅样;真正要担心嘅系误差跌紧、胜率却唔郁。
两次训练用嘅系同一个网络同同一套设定,净系枱上人数唔同。
| 指标 | 3 人 | 4 人 |
|---|---|---|
| 打过嘅副数 | 35.5 M | 32.7 M |
| 实际用咗 | 6 个钟 | 6 个钟 |
| 每秒副数 | 1,756 | 1,611 |
| 最好嘅单副胜率 | 61.3% | 47.1% |
| 均势应该系 | 33.3% | 25% |
| 完场时嘅误差 | 0.1548 | 0.2135 |
有一样嘢照直讲,唔匿埋:净系 3 人训练嘅逐轮纪录留低咗,所以误差图净系得嗰次训练。4 人嘅数字系佢 console 纪录度印出嚟嘅十一次评测。两次训练嘅纪录都喺个 repo 度,想睇可以自己揭。
点解呢啲数字信得过
顾问计啱咗先有用。呢样嘢一开始系个 Python 项目,而嗰啲代码搬唔入浏览器 —— 所以佢畀人重写成 TypeScript 同 WebAssembly,再攞去对住原版核对:Python 嗰边将自己实际做咗乜导出成记录,浏览器引擎要一模一样咁复现出嚟。
录低咗嘅 2、3、4 人对局 —— 其中一局打足 102 副打到 100 分 —— 喺浏览器度行出完全一样嘅过程。
300 局完整对局,每一个回合都检查:牌数守恒、出牌合法、计分啱,从来冇出现过非法状态。
单张畀人压过嘅概率用精确整数运算,同原版对到小数点后十二位。
154 项测试覆盖规则引擎,包括大家成日拗嘅位 —— A-2-3-4-5 顺、同花点比、同埋净系可以同张数相压。
每一个权重都逐位对得返,浏览器拣嘅牌就系 PyTorch 拣嘅牌。
模拟核心就系原本嗰份 C 源码编译成嘅 WebAssembly,所以你标签页度行紧嗰份就系做过基准测试嗰份,唔系重新解读嘅版本。
全部开源 —— 睇下引擎、训练流程同测试套件
常见问题
拣好人数同对手,大约十秒就开到局,顾问面板可以一直开住。