【DouZero】 强化学习+self play达到人类玩家斗地主水平。

简介: 【DouZero】 强化学习+self play达到人类玩家斗地主水平。

所解决的问题?


解决斗地主游戏,斗地主中与围棋游戏很大的不同在于非完美信息、多玩家卡牌游戏、既带有合作又带有竞争。合法动作空间巨大(1 0 4 ),与他同等级的有无限注德州扑克


背景

所采用的方法?

作者总体采用的方式还是比较简单,可能是期望在单机上能够跑起来做的牺牲。但是效果还可以。论文中描述的三个步骤如下:

首先就是基于策略π \piπ去采样,得到的采样样本用来估计Q值,对,这里没有什么花里胡哨的做法,直接就是基于采样的数据估计Q ( s , a ) 。细节可以描述为:对状态s (自己的手牌,底牌,历史出牌序列)进行编码。计算合法出牌动作。根据训练好的模型Q(s, a)对合法动作进行打分,选择得分最高的动作进行出牌a=argmaxalegalQ(s,a)。整体的训练流程就是:AI对弈产生对局数据,将数据发送到训练器。使用训练数据通过梯度下降更新模型。

第一步采样的时候采用的epsilon-greedy方法采样,也是有优化空间。

剩下的就是看看作者如何编码状态和合法动作空间了:


状态编码


状态及动作编码:

状态和动作都编码为上图所示的4 × 15 的矩阵。

之后作者将4 × 15 的矩阵展平,也就是1 × 60 , 由于只有一张大小王,因此会有6个位置始终为0,也就是每个矩阵可以转换成一个54维的向量。对于历史信息,我们考虑最近15步的历史信息,然后经过一个LSTM,不够的补0。具体特征表示如下:

作者在这里不考虑花色,虽然说花色基本不带有额外信息,但是有时候地主出牌需要考虑三张底牌花色。

当前手牌矩阵,地主牌矩阵,历史出牌序列矩阵,其他玩家出过的牌的矩阵,每位玩家剩余牌的数量,炸弹数量等等。历史出牌序列是只取了最近15轮的数据。

动作是出牌矩阵。

动作空间如下:

神经网络采用简单的六层全连接网络。斗地主中,地主上家,地主下家会存在不同的出牌风格。因此DouZero中采用三个模型。地主、地主上家、地主下家。

对于叫牌阶段,采用人类数据训练一个监督网络。叫牌阶段需要考虑的是自己的手牌和其它玩家的决策。叫牌阶段的特征如下:

叫牌阶段作者的准确率可以达到83%。

取得的效果?

评估两个算法的时候,同一套牌,会评估两次,算法A 玩农民,算法B BB玩地主和算法B玩农民,算法A玩地主。实验结果如下:

这里采用了两种衡量指标,一种是WP、另一种是ADP。

作者在实验中,最多采用了45个进程采样,并且作者发现,训练效率和模拟器几乎成线性正比的。

在4张卡的1080Ti上,48个CPU核,两天打败人类监督数据学习得到的模型。

这个监督的模型是采用,快手的斗地主上较好的人类玩家数据,训练二分类得到的。负样本是合法的动作,但是并未被采纳的。batch size为8096,决策的时候选择分数最高的那个合法动作。

斗地主这个游戏本身是存在非常的的运气成分的,所以高几个百分点就代表了水平的很大的提高了。

所出版信息?作者信息?

ICML2021上的一篇文章。一作是莱斯大学的在读博士生查道琛。共同一作谢静如,美国密歇根大学物理学博士。

参考链接

相关文章
|
人工智能 算法 PyTorch
AI 全自动玩斗地主,靠谱吗?Douzero算法教程
你觉得,AI 全自动玩斗地主,胜率能有多高? 真就有100%胜率,实现欢乐豆自由? 我让这个 AI 自己玩了一小时,结果出乎意料。
4992 0
AI 全自动玩斗地主,靠谱吗?Douzero算法教程
|
11月前
|
人工智能
实训Agent创客:一键生成电商场景Agent
在阿里云百炼一键生成电商场景Agent,轻松帮您搞定商品展示图片、视频。快来参与活动任务吧!
1137 2
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
1264 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
SQL 安全 数据库
已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。
用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。  说明: 执行当前 Web 请求期间,出现未处理的异常。
5091 0
|
存储 网络安全 文件存储
NAS与云存储哪个更适合家庭使用?
【6月更文挑战第30天】NAS与云存储哪个更适合家庭使用?
1533 58
|
人工智能 自然语言处理 安全
微软phi-4来啦!小模型之光,14B科学、代码等能力超70B模型效果!
微软研究院的最新成果——Phi-4来啦!近日,微软公布了Phi家族的最新一代模型Phi-4的技术报告,模型同步开源,Phi-4建立在合成数据集、过滤后的公共领域网站数据以及获得的学术书籍和问答数据集的基础上,训练数据量为9.8 T tokens, 目标是确保小模型使用专注于高质量和高级推理的数据进行训练。
1202 1
|
数据可视化 Python
Python在医疗领域中的数据可视化实践案例
Python在医疗领域中的数据可视化实践案例
|
传感器 机器学习/深度学习 算法
Isaac Sim教程01 Isaac Sim介绍
这篇文章是Isaac Sim的入门教程,介绍了NVIDIA Omniverse平台上的Isaac Sim机器人仿真工具包。内容包括Isaac Sim的背景、特点、应用场景、架构和工作流程,以及近期的更新情况。Isaac Sim支持物理精确的仿真和合成数据集的创建,与ROS/ROS2兼容,并能模拟多种传感器数据,适用于机器人导航、操作应用、计算机视觉研究和数据集生成等多种场景。
3671 2
Isaac Sim教程01 Isaac Sim介绍
|
C# Python
C#如何用最简单方法调用Python?
本文介绍了如何在C#中通过命令行调用Python脚本,以解决Python.NET的版本兼容性和配置难题。方法是利用`System.Diagnostics.Process`类启动Python解释器并传递脚本路径。首先确保安装Python 3.0+,创建.NET控制台程序和Python测试脚本。然后,C#代码通过指定Python路径和脚本位置启动进程,重定向输出并读取结果。这种方法简单、依赖少,适合初学者,但可能牺牲性能,不适合频繁交互和处理大量数据。
946 1
|
搜索推荐 C语言 C++
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
776 1