news 2026/8/16 16:23:42

DouZero部署实战:一条从零跑通斗地主AI的完整路线图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DouZero部署实战:一条从零跑通斗地主AI的完整路线图

DouZero部署实战:一条从零跑通斗地主AI的完整路线图

【免费下载链接】DouZero[ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning | 斗地主AI项目地址: https://gitcode.com/gh_mirrors/do/DouZero

想不想让一台电脑学会斗地主?DouZero 是快手开源的斗地主 AI 框架,它靠自我博弈的深度强化学习,从零开始训练出能战胜大多数人类玩家的智能体,论文发表于 ICML 2021。这篇文章会带你走一遍 DouZero 部署实战的完整流程:装环境、加载模型、评估对局、自己训练,最后把 AI 用起来。

斗地主凭什么难倒 AI

先讲个背景故事,方便你理解这套工具的价值。斗地主看起来只是"出牌",但它同时具备四大难题:三方博弈中两个农民要暗中配合、你只能看到自己的手牌(信息不完整)、状态空间巨大、而合法动作组合约有 10⁴ 种且每手都在变。传统强化学习算法面对这种超大的动态动作空间,几乎都会"迷路"。

DouZero 的思路非常朴素:把经典蒙特卡洛方法用神经网络增强,配合动作编码和多进程并行演员,用一套极简的 Deep Monte Carlo 算法硬生生把难题啃了下来。它在一台四卡服务器上训练几天,就超越了当时所有斗地主 AI,在 Botzone 排行榜 344 个智能体中排名第一。这份"以简驭繁"的思路,值得每个 RL 爱好者亲自跑一遍。

先看清手中的工具箱

克隆仓库后,整个项目的骨架其实很清爽,主要就三块:

  • douzero/dmc/:核心算法区,dmc.py是深度蒙特卡洛训练主逻辑,models.py定义神经网络结构,arguments.py是全部训练参数
  • douzero/evaluation/:评估区,simulation.py负责对局模拟,random_agent.pyrlcard_agent.pydeep_agent.py分别代表随机、规则和深度三种智能体
  • 根目录的train.pyevaluate.pygenerate_eval_data.py则是你日常要敲的三个入口脚本

记住这个结构,后面每一步都是往这三个位置"添砖加瓦"。

三步搞定环境配置

DouZero 部署实战的第一步是环境准备,三步就够:

  1. 克隆仓库:git clone https://gitcode.com/gh_mirrors/do/DouZero
  2. 安装依赖:pip3 install -r requirements.txt,需要 Python 3.6 以上
  3. 安装包本体,推荐安装稳定版:
pip3 install douzero

国内网络下载慢的话,可以换清华镜像源,一条命令的事。这里有个关键提示:训练需要 CUDA 显卡,但评估可以纯 CPU 跑。所以哪怕你没有 GPU,也能把下面的评估流程完整走一遍,只是稍慢而已。

不训练也能玩:先加载预训练模型

很多新手一上来就急着训练,其实更聪明的顺序是先用别人训好的模型把流程跑通。项目作者提供了几款现成模型:

  • baselines/douzero_ADP/:以平均分差(ADP)为目标训练的版本
  • baselines/douzero_WP/:以胜率(WP)为目标训练的版本
  • baselines/sl/:在人类对局数据上预训练的深度智能体

下载后把权重放进baselines/目录即可。注意:这三份模型文件在源码仓库里是占位符,你需要从官方渠道获取权重再放入。

第一次评估:让 AI 跟自己打

拿到模型后,最解气的操作就是看它大杀四方。评估分两步,第一步先生成对局数据:

python3 generate_eval_data.py --num_games 10000

这条命令会随机生成 1 万副牌局并存成eval_data.pkl,相当于给 AI 出一套固定的"考题"。第二步用evaluate.py让它上场:

python3 evaluate.py --landlord baselines/douzero_ADP/landlord.ckpt --landlord_up random --landlord_down random

命令的意思是:地主位放 DouZero-ADP 模型,两个农民位放随机策略。跑完你会在终端看到一屏结果,核心就两个数字:WP(胜率)和 ADP(平均分差)

  • WP:地主赢了几局、农民赢了几局,最直观的强弱指标
  • ADP:地主得分的平均值,反映赢牌时的"碾压程度"

通常地主位能打出 60% 以上的胜率,就说明模型已经相当能打了。想调整对手的话,--landlord_up--landlord_down可以换成rlcard(规则 AI)或任意.ckpt模型路径,玩出各种花式 PK。

评估结果怎么看才不踩坑

我见过不少新手对着评估输出一头雾水,这里帮你提炼三个判断要点:

  • 看总量:评估默认基于 1 万局,局数太少(比如几百局)胜率波动会很大,别急着下结论
  • 换对手再测:单打随机对手只能说明"AI 不傻",换上rlcard规则 AI 再测一次,才能看出真实水平
  • 多进程提速:纯 CPU 评估较慢,可加--num_workers 4并行加速,GPU 机器再加--gpu_device 0

自己训练一个 AI:参数这样调最省心

跑通评估后,就可以试着自己训一个 AI 了。单卡机器直接跑:

python3 train.py

默认每 30 分钟保存一次检查点。多卡机器可以按"模拟多、训练少"的原则分配资源,比如四卡机器让前三张卡各跑 15 个演员进程用于自我对弈,第四张卡专门训练:

python3 train.py --gpu_devices 0,1,2,3 --num_actor_devices 3 --num_actors 15 --training_device 3

几个关键参数的含义帮你理清:--gpu_devices指定可见的显卡,--num_actor_devices决定几张卡用于模拟对局,--num_actors是每张模拟卡上的演员进程数,--training_device指定训练卡。此外--objective可以切换奖励目标(默认 adp,可换 wp),--learning_rate--batch_size等超参都在douzero/dmc/arguments.py里可查。

新手建议:先用默认参数把流程跑通,再逐步加大--num_actors,观察胜率曲线变化,比一上来就猛调超参更有效率。

训练中途,如何找回最新模型

训练是个长跑,途中崩溃或想中途评估都很常见。好在检查点默认存在douzero_checkpoints/douzero/下,项目还贴心地提供了找回最新模型的小脚本:

sh get_most_recent.sh douzero_checkpoints/douzero/

它会自动挑选三个位置(地主、上家农民、下家农民)最新的权重,统一复制到most_recent_model/目录,方便你直接喂给evaluate.py做中途评估。这个小动作能让训练过程形成"训练-评估-再训练"的正向循环。

只有 CPU 怎么办

没有 GPU 也不用劝退。DouZero 支持纯 CPU 训练,代价是速度慢一些:

python3 train.py --actor_device_cpu --training_device cpu

--actor_device_cpu让模拟演员跑在 CPU 上,--training_device cpu让训练也走 CPU。Windows 用户需要注意一个历史限制:由于 CUDA 张量多进程在 Windows 上不受支持,只能用 CPU 做演员,用 GPU 训练会报operation not supported。先用 CPU 把流程跑通,有条件再上显卡,这是最务实的路径。

常见报错排雷

  • operation not supported:Windows 下 GPU 演员报错,改用--actor_device_cpu
  • 评估找不到模型:确认.ckpt路径写对,并已放入baselines/目录
  • eval_data.pkl不存在:先跑generate_eval_data.py生成数据,再执行评估
  • 下载依赖太慢:换清华镜像源,或使用仓库提供的requirements.txt逐项安装

把 AI 接进你的应用

模型在手,应用场景就很丰富了:可以做游戏里的智能陪玩、把DeepAgentact接口封装成在线出牌服务,甚至作为强化学习课程的教学案例。douzero/evaluation/deep_agent.py里的模型加载与动作选择逻辑,就是最好的集成样板——它把"读状态、算价值、选最优动作"三步封装得清清楚楚,你只需要把输入换成自己的牌局数据即可。

现在,就动手部署吧

从环境配置、加载预训练模型、跑通评估,到亲手训练并调参,DouZero 部署实战的每一步其实都不复杂,难的是迈出第一步。建议你今天晚上就用一张 CPU 把generate_eval_data.py+evaluate.py跑通,亲眼看一次 AI 胜率刷屏,那份成就感会推着你继续玩下去。祝你在斗地主 AI 的世界里玩得开心,期待你训练出超越人类的模型!

【免费下载链接】DouZero[ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning | 斗地主AI项目地址: https://gitcode.com/gh_mirrors/do/DouZero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 16:21:57

一台旧iPhone的第二次生命:palera1n越狱从零到上手全流程

一台旧iPhone的第二次生命:palera1n越狱从零到上手全流程 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 如果你的抽…

作者头像 李华
网站建设 2026/8/16 16:16:24

2021年CSP-J初赛真题及答案解析(完善程序2)

2021年CSP-J初赛真题及答案解析(完善程序2) 第 2 题 矩形计数:平面上有 (n) 个关键点,求有多少个四条边都和 (x) 轴或者 (y) 轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复,但完全重合的矩形只计一次。 试补全枚举算法。 #include <iostream> us…

作者头像 李华
网站建设 2026/8/16 16:08:38

# 工业陶瓷(氧化铝/氧化锆)的加工难点与刀具选择

做了几年工程陶瓷的机加工&#xff0c;经常被问&#xff1a;氧化铝和氧化锆看着都是"白瓷"&#xff0c;能不能用同一套工艺打&#xff1f;答案是基本不行。这两种材料硬度高、脆性大&#xff0c;但力学行为差得远&#xff0c;刀具和参数的选择思路也不同。这篇文章把…

作者头像 李华
网站建设 2026/8/16 16:07:22

英文文献读起来头疼?Zotero PDF翻译插件3分钟让整本PDF变中文

英文文献读起来头疼&#xff1f;Zotero PDF翻译插件3分钟让整本PDF变中文 【免费下载链接】zotero-pdf2zh PDF2zh for Zotero | Zotero PDF中文翻译插件 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf2zh Zotero PDF2zh&#xff08;Zotero PDF中文翻译插件&a…

作者头像 李华
网站建设 2026/8/16 16:06:54

OpenKore 完整实战指南:新手快速上手的开源游戏自动化工具

OpenKore 完整实战指南&#xff1a;新手快速上手的开源游戏自动化工具 【免费下载链接】openkore A free/open source client and automation tool for Ragnarok Online 项目地址: https://gitcode.com/gh_mirrors/op/openkore 如果你玩过 Ragnarok Online&#xff08;R…

作者头像 李华