From AlphaGo Zero to 2048论文分享

0 摘要

近年来,游戏 2048 获得了巨大的人气 [6]。游戏允许玩家移动屏幕上的数字(2 的幂,例如 2、4、8、16 等),总和至少为 2048。因为它只有 4 个动作,所以很容易上手: 上、下、左、右。但是,很难获得大于或等于 2048 的数字,因为您在当前状态下所做的每个操作都会导致数百个不可预知的结果。在本文中,我们提出了一种用于 AlphaGo Zero 和 2048 游戏的类似算法,具有独特的奖励和惩罚系统,以提高人工智能 (AI) 的自学速度并为 AI的自动播放模式获得更高的分数。此外,基于具有 Alpha-Beta 修剪的 Minimax 算法、Expectiminimax 算法和蒙特卡洛树搜索 (MCTS) 的结果,我们得出结论,蒙特卡洛树搜索在应用于 2048 游戏时优于其他算法。最后,我们表明具有强化学习的人工智能 [9] 可以击败人类在 2048 年游戏中取得的最高分。

1 引言

AlphaGo [10] 是一个玩棋盘游戏 Go [12] 的计算机程序。而且,它是第一个击败职业人类围棋选手的计算机程序,也是第一个击败世界围棋冠军的程序。 AlphaGo 是由 Alphabet Inc. 在伦敦的 Google DeepMind 开发的。它有三个更强大的继任者,称为 AlphaGo Master、AlphaGo Zero 和 AlphaZero [12]。最早的版本 AlphaGo 需要成千上万的人类业余和专业游戏来学习和掌握围棋游戏,而 AlphaGo Zero 是第一个从完全随机的游戏开始,通过与自己玩围棋游戏来学习的版本。已经证明 AlphaGo Zero 比之前的版本 [11] 更好。自从 AlphaGo Zero 广受好评后,人们就开始尝试研究 AlphaGo Zero 的算法/方法,以便将其应用到其他游戏中。在本文中,我们将展示一个可以自动玩游戏 2048 并在合理的运行时间内最大化游戏分数的 AI。
Game 2048 是一款单人益智游戏。 Gabriele Cirulli 是一位意大利用户界面设计师和 Web 开发人员,他创建了这款游戏并于 2014 年 3 月发布了它 [13]。游戏 2048 很简单:给玩家一个 4 × 4 的棋盘,其中每个牌可能包含一个 2 的幂的数字。开始时,只有两个编号的牌,编号为 2 或 4。玩家控制并通过按箭头键更改棋盘,棋盘中的图块会根据玩家移动。例如,如果你按向上键,所有的图块都会向上。如果相邻单元格上的数字匹配,它们将合并;否则,它们将保持在原来的位置(见图 1)。此外,每次移动后,一个新的数字,2 或 4,将均匀地出现在一个空单元格上,配给可以设置。在本文中,我们将 2 和 4 之间的出现比率设置为 9:1。玩家的目标是在 4 × 4 网格上滑动编号的图块,以合并并创建一个编号为 2048 或更大的图块(参见图 1)。当没有空单元格且没有更多有效动作时,游戏结束。如果在游戏结束前棋盘上出现了编号为 2048 的棋子,则玩家获胜。
在这里插入图片描述
图 1:游戏 2048 中的移动示例。左图显示当前状态,右图显示“向上”移动后的下一个状态。 左边有两个 8。 向上移动瓷砖后,底部的 8 将向上移动并与上面相同的数字 8 合并,组合成一个 16。

我们认为以下三种方法是最流行和最有效的策略:带有 alpha-beta 剪枝的 Minimax 算法、Expectimax 算法和 Monte Carlo Tree Search (MCTS)。 然后我们根据我们在训练 AI 时为游戏设置的规则设置奖励和惩罚。 这样一来,2048就可以从单人益智游戏衍生到自动AI游戏,这意味着在整个自学过程中不再需要人机交互。 在没有来自人类专家的数据集的情况下训练人工智能对于开发具有超人技能的人工智能具有重要意义,因为专家数据通常很昂贵、不可靠或根本不可用。

论文主要分为三个部分:

  1. 两种奖惩制度
  2. 三种树搜索算法:
    a) 带有 alpha-beta-pruning 的 Minimax 算法
    b) Expectimax 算法
    c) 蒙特卡洛树搜索 (MCTS)
  3. 上述三种算法的结果比较。

2 两种奖惩制度

我们设置了两种奖惩系统:一种使用权重矩阵α,另一种使用权重矩阵β。 权重矩阵 α 是一个在右上角具有最高值且其值沿对角线递减的矩阵(见图 2)。 权重矩阵 β 看起来像一个贪食蛇形状,玩家沿着路径滑动图块并将它们合并到同一个右上角(参见图 3)。
在这里插入图片描述
Figure 2: Weight Matrix α
在这里插入图片描述
图 3:左:横向贪食蛇形状的权重矩阵 β; 右图:水平-垂直贪食蛇形状的权重矩阵 β

根据我们的实验,将具有接近值的图块放在一起通常会导致更多可能的合并。 显然,单次滑动可以合并两个相同编号的图块,同时按升序或降序管理不同的图块,这可以帮助图块以后连续合并。 从直觉上可以看出,将具有接近值的图块放置在彼此附近通常会导致更多可能的合并。 对于相同编号的图块,单次滑动即可合并; 对于不同编号的图块,按升序或降序排列是合理的,这样它们就可以连续合并。 因此,它似乎试图使用在一个角上具有最高权重并沿对角线递减的矩阵 α。
由于矩阵 α 并没有在很大程度上区分图块:两个图块的不同权重可能会因它们承载的数量差异而减弱,因此创建权重矩阵 β 以扩大权重范围。 权重矩阵 β 是贪食蛇形的(见图 3)。 启发式是我们期望沿着贪食蛇的滑动和合并将更大的数字放在角落里。 在尝试了具有各种权重值的对称和贪食蛇形权重矩阵后,我们发现贪食蛇形权重矩阵的性能最好。

3 三种树搜索算法

游戏2048可以被视为两人游戏,人类玩家与计算机对战。 轮到人类通过选择四个基本方向之一来移动棋盘:上、下、左或右; 然后,计算机扮演在其中一个空单元格中随机放置一个数字 2 或 4 的角色。 因此,Minimax 算法首先引起了我们的注意,因为它是一种在包含两个玩家的游戏中广泛使用的决策规则。
将 Minimax 算法应用于 2048 游戏时,计算机扮演对手角色,只需以 9:1 的概率比放置 2 或 4 的新图块。 首先,我们解释算法中的符号:
(1) players:agent,opponent 代理人,对手
(2) s: the grid board that reflects the current state 反映当前状态的网格板
(3) a: the action taken 采取的行动
(4) actions(s): possible actions at state s 状态 s 的可能动作
(5) result(s, a): resulting state if action a is chosen at state s 如果在状态 s 选择动作 a,则结果状态
(6) isEnd(s): whether s is an end state (the game is over) s是否为结束状态(游戏结束)
(7) eval(s): evaluation at state s 状态 s 的评估
(8) player(s) ∈ players: the player that controls state s 控制状态 s 的玩家
(9) totalScore(s): the score at the end of the game 比赛结束时的比分
(10) d: the current depth of the search tree 搜索树的当前深度
Minimax算法的数学公式如下:
在这里插入图片描述
玩家可以从每一轮中的四个动作中选择一个,即,动作a∈{上,下,左,右}。 动作a随机将2或4放入当前棋盘的空格子中。 当达到最大深度或导致游戏结束时,每轮评估函数将重新调整每个turn作为当前分数。
接下来,我们从上面的Mini-Max算法派生了Expectimax算法。 不同之处在于我们在代理节点和对手节点之间添加了机会节点。 因此,当我们将启发式和域知识添加到我们的评估功能时,当AI到达最后一个深度级别时,或者游戏结束时,算法的伪代码如下:
在这里插入图片描述
在这里插入图片描述
Expectimax算法具有一些缺点,例如要分析的移动次数快速增加深度,并且计算功率限制了算法可以走的深度。 因此,我们尝试了第三种方法:蒙特卡罗树搜索。 蒙特卡罗树搜索的基本思想是基于强盗(Bandit-based)的方法。 一名球员需要选择K个动作中的某个动作,并通过不断选择最佳移动来最大化累积奖励。 一旦玩家选择,此动作的真正奖励将取决于随后可能的移动。
蒙特卡罗树搜索算法列举了将游戏2048的状态S作为输入的神经网络作为输入,并输出移动概率和值(P,V)。 标量值V表示状态s的“善良”。 在AZG,v代表了从这个状态获胜的概率,但由于我们只有一个玩家,它也是使用当前网络的预期当前游戏结果和平均结果之间的比率。 这样,大于1的值为良好,低于1的值不是那么好(见图4 [1])。
在这里插入图片描述
Figure 4: MCTS
在每个状态下,执行 MCTS,并构建一棵树,根节点为初始状态 s0s_0s0。 对于树中的每个状态 sss,有四个边(s,a)(s, a)(s,a) 对应于可能的移动,每个边包含统计信息:

  • (1) N(s,a)N(s, a)N(s,a) - number of times action has been taken from state s 从状态
    s 采取行动的次数
  • (2) W(s,a)W (s, a)W(s,a) - total value of move a from state s 从状态 s 移动
    a 的总值
  • (3) Q(s,a)Q(s, a)Q(s,a) - mean value of move a from state s 从状态 s 移动 a 的平均值
  • (4) P(s,a)P(s, a)P(s,a) - prior probability of selection move a 选择移动a的先验概率

该算法迭代三个阶段(最初 1600 次):

  • (1) 选择:每次迭代从 s0s_0s0 开始,并在模拟到达叶节点 sLs_LsL 时结束。 在每个时间 ttt,根据搜索树中的统计信息选择一个移动。
    U(s,a)=P(s,a)∑bN(s,b)1+N(s,a)(1)U(s, a)=P(s, a) \frac{\sqrt{\sum_{b} N(s, b)}}{1+N(s, a)} \tag1U(s,a)=P(s,a)1+N(s,a)bN(s,b)(1)

此搜索控制策略最初更喜欢高概率和低访问计数的操作,但渐近地更喜欢具有高动作值的动作。

  • (2) 扩展和评估:使用当前神经网络进行评估叶节点sLs_LsL 。 叶节点被扩展,每个边缘(sLs_LsLaaa)初始化为N=0,W=0,Q=0,P=paN = 0,W = 0,Q = 0,P = paN=0W=0Q=0P=pa。 然后备份值vvv

-(3) 反向传播:边缘统计信息在反向传播中更新。

N(s,a)=N(s,a)+1,W(s,a)=W(s,a)+v,Q(s,a)=W(s,a)/N(s,a).N(s, a) = N(s, a) + 1, \\W (s, a) = W (s, a) +v, \\Q(s, a) = W (s, a)/N(s, a).N(s,a)=N(s,a)+1,W(s,a)=W(s,a)+v,Q(s,a)=W(s,a)/N(s,a).

一旦迭代完成,计算概率。 下一步移动只是最大选择。 在其训练阶段,AGZ按分布进行抽样。 我们使用了一个确定性的选择,因为2048游戏存在如此多的随机性。

我们注意到,更深入的深度导致搜索树的维度爆炸。 此外,整个树搜索算法探讨了树的一些不必要的部分。 因此,我们在所有三种树搜索算法中实现了Alpha-Beta修剪,以防止这些问题。Alpha-Beta修剪估计两个值:Alpha(增益的较低限制)和Beta(增益的上限)。 在任何情况下,在Beta小于Alpha的情况下,将修剪其余的子树。

在利用蛇形权重矩阵βββ的人启发式时,我们只考虑一些最重要的空图块,它们对它们具有更高的权重。 经过具有最小值(深度,空图块的数目,4)或(深度,空图块的数目,6)的几个图块后,这些界限通常更靠近在一起。 只要α和β的范围内存在一些重叠,这种会聚不是问题。 在评估节点时,我们可能会发现它已经移动了其中一个界限,使得α和β之间不再存在任何重叠。此时,我们知道此节点永远不会导致我们将考虑的解决方案路径,因此我们可能会停止处理此节点。 换句话说,我们停止生成其子节点,然后返回其父节点并完成这个子树修剪。

在这里插入图片描述

4 具有Alpha-Beta修剪的Minimax算法

2048游戏具有离散状态空间,其包含完美的信息。它也是棋盘和跳棋等转向的游戏。因此,我们可以使用alpha-beta修剪应用于Minimax Search,这已被证明在这种类型的游戏上工作。单调性启发式试图确保图块的值沿左/右和上/下方向呈增加或减小。这个启发式唯一表明了许多其他人提到的直觉,那么高价值的图块应该被聚集在一个角落里。它通常会阻止孤立的较小值图块,并将游戏板组织得非常好,较小的图块级联并填充较大的图块。独自启发式倾向于创建一个结构,其中相邻的图块的值下降。然而,为了合并,相邻的图块需要显然是相同的价值。因此,平滑性启发式只是测量相邻图块之间的值差异,以便最小化这一计数。最后,免费图块太少有惩罚,因为当游戏板变得过于狭窄时,选择可以快速耗尽。
表1说明了具有alpha-beta修剪的Minimax算法的结果。
在这里插入图片描述

4.1 Expectimax Optimization预期优化

AI需要10ms到200ms以执行移动,具体取决于游戏板位置的复杂性。 此期望算法有四种启发式方法:

  • (1)为开放方块授予“奖金”
  • (2)在边缘上有大值的授予“奖金”
  • (3)在级别增加时对增加的非单调行和列进行惩罚,因为大量的非单调行大幅影响了得分。
  • (4)除了打开空间之外,第二启发式计算潜在合并的数量(相邻的等值)。

通过远程控制运行100次后,预期算法的结果如表2所示。
在这里插入图片描述
基于表2中的结果,观察到深度2, 3和4的平均分数分别为11279,16766和59436,并且每个深度的实现最大得分为31924,33940和59436。 AI永远不会获得至少一次2048图块。 这场比赛花费了27830次移动,超过96分钟,平均每秒4.8次移动。 最初,存在两个启发式方法:为开放方块授予“奖金”,并且在边缘上具有大值。

4.2 Monte Carlo Tree Search蒙特卡洛树搜索

如果我们从随机初始化的神经网络开始,所实现的模拟器的分数在500到4000的范围内。这些分数类似于随机播放的结果。 训练进行了10个小时。 当我们在蒙特卡罗树中使用100种模拟时,总共进行66个训练周期。 所有16个模拟器组合的都能每秒执行大约7个移动。 在所有66个周期中,新的训练模型能够用旧的权重击败神经网络四次。 最好的得分为2638。
在Monte Carlo树中使用50模拟时,32个游戏模拟器能够每秒执行大约40个移动。 在10小时的游戏和训练期间,完成了334个训练周期,并且新版本的初始模型实现了一个更好的中位数得分两倍。
在开发和测试过程中,中性网络的参数大多保持不变,同时仅尝试不同的学习率和残留层的量。 其他参数,如网络所在的样本数量在每个训练周期上训练,也试图播放评估模型的游戏量以实现更好的结果。 遗憾的是,尝试的组合都无法在游戏玩法的10小时内从自行播放中改进模型,并且在训练过程中的结果与随机初始化网络所实现的结果类似。 蒙特卡罗树搜索的结果已显示在表3。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算的概念_近500亿资金汹涌出逃!云计算概念龙头抛压沉重,科技股资金出逃名单出炉...

数据是个宝数据宝炒股少烦恼两市主力资金全天净流出492.93亿元。科技股今日资金集中流出,云计算概念浪潮信息流出资金超9亿元。受假日外围市场不振影响,A股三大指数低开后弱势震荡,最终集体小幅收跌。截至收盘,沪指下跌0.61%&…

iphone8plus屏幕尺寸_百思买在苹果发布会前列出了一款“iPhone SE Plus”屏幕保护保护膜...

百思买旗下品牌Insignia在苹果“时光飞逝”发布会活动前几个小时,在其网站上开始销售一款名叫“iPhone SE Plus”的屏幕保护贴,尽管预计苹果不会活动上发布任何iPhone。更大的iPhone SE过去一直被各路泄露好手提到,不过普遍认为它会在2021年初…

英文写作句子积累

0 摘要 In this paper, another strategy to learn from multi-label data is studied, where label-specific features are exploited to benefit the discrimination of different class labels. Accordingly, an intuitive yet effective algorithm named LIFT, i.e. multi…

springboot全局常量_Spring-Boot配置属性和环境变量的加载顺序

Spring-Boot使用很方便,创建系统时,您绝对需要将“设置”和“程序”分开,在Java中,有一个名为application.property/yaml的属性文件,但是你想在哪里找到该文件?不,你必须自己创建它。Spring Boo…

手机qq和电脑qq怎么同步消息_手机QQ接入华为HMS!停止运行也能接收消息

腾讯昨日发布了安卓手机QQ 8.4.10正式版,带来了视频包厢、图片提取文字即时翻译、同时扫描多个二维码等新玩法、新功能。据网友@皮蛋棒棒糖发现,新版手机QQ已经悄然接入了华为HMS移动服务框架,基于华为提供…

Mathematical Analysis of 2048, The Game论文分享

0 摘要 游戏 2048 席卷了互联网,产生了无数的盗版。 世界各地的人们倾注了数百万小时试图创造 2048 棋子。 除了令人上瘾的游戏外,该游戏还提供了探索数学的有趣机会。 本文试图通过数学归纳法、数论、模糊论和拓扑学对博弈进行数学分析,在此…

maven 公共模块依赖_idea 创建多模块依赖Maven项目

本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自己写一份的好,虽然可能自己也不会真的用得着。1. 创建一个新maven项目2.3. 输入groupid和artifactid,后面步骤直接next,最后finish4.创建好后5. 在主项目名…

安卓手机软件开发_无代码手机app软件开发,让人人都是专业开发工程师

点击上方蓝色字关注我们~近期,谷歌发布了自己的无代码在线app开发平台,这款全新工具旨在让任何一个人都可以轻松进行手机app软件开发。这样的动作无疑指引着安卓软件开发的未来。🙊1无代码开发手机app其实由来已久,业内反复讨论了…

Mastering 2048 With Delayed Temporal Coherence Learning, Multistage Weight Promotion论文分享

0 摘要 2048 是一款引人入胜的单人非确定性视频益智游戏,由于简单的规则和难以掌握的游戏玩法,近年来广受欢迎。由于 2048 可以方便地嵌入到离散状态马尔可夫决策过程框架中,我们将其视为评估强化学习中现有和新方法的测试平台。为了开发一个…

python扫描字符串文本时下线_python:SyntaxError:扫描字符串li时的EOL

python:SyntaxError:扫描字符串li时的EOL我在s1"some very long string............"中有上述错误有谁知道我做错了什么?11个解决方案165 votes你没有在行结束前放置"""。如果要执行此操作,请使用"…

AD19 add pins to nets错误_《英雄联盟手游》错误代码问题大全 LOL的错误代码都是什么意思...

英雄联盟手游上线引起广泛的关注,但是有些玩家在进入游戏的时候出现了代码报错的问题,那么针对这些不同的错误代码要如何解决呢?100036 请求超时,网络不好或者加速器速度不够,换个好点的网络或者加速器 10075 100036 账号没有在p…

Linux编程基础 1:初识Linux

0 学分、课时、成绩组成 本课程3学分(包含上机项目) 理论课时24,上机课时24 考核方式介绍及各项所占比重 1 知识准备 计算机网络基础:OSI模型,TCP/IP协议相关知识 C语言与数据结构相关的知识:指针&…

ssh重装ubuntu_Ubuntu环境下SSH的安装及使用详解

SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 。SSH的简介和工作机制SSH简介传统的网络服务程序,如:ftp、POP和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据&#xff0…

飞秋本机如何与虚拟机传送文件_某度扩容之虚拟机

本文不推荐大家扩容,这个是一个交流帖子,禁止用于商用本文不适合小白看,需要一定基础5月份之前的虚拟机扩容:需要3个虚拟机:1个保存虚拟机2个删除虚拟机启动顺序:保存虚拟机—>删除虚拟机1——>删除虚…

Linux编程基础 2.1:Linux文件系统与操作

1 文件I/O open() read() write() lseek() close() 1.1 open函数 #include <fcntl.h> int open(const char *pathname, int flags[, mode_t mode);open函数参数说明&#xff1a; pathname&#xff1a;待打开文件的文件路径名&#xff1b;flags&#xff1a;访问模式&a…

64位java_树莓派3B+安装64位ubuntu系统和docker工具

想在树莓派3B上安装一些64位应用(例如64位JDK)&#xff0c;因此首先要安装64位的操作系统&#xff0c;今天咱们就一起来实战&#xff1b;

echars显示折点数据_Echarts 折线图一个点显示多个实时数据tooltip

在项目开发需要中。有个需求就是在折线图的每一个折点上悬浮窗要显示几条不同的数据而且是跟x轴一样每个点不一样。。研究了一下。。有点坑。其实很简单&#xff0c;正常的思路来想 要想在悬浮窗显示数据 一般都会有线 才会有实时数据。。这里提一下series&#xff1a;data这个…

主成分分析法_探索主成分分析法

主成分分析法 (Principal Component Analysis, PCA) 是一种数据压缩法&#xff0c;可以从数据中提取重要的部分并排除不重要的部分&#xff0c;是奇异值分解 (Singular Value Decomposition, SVD) 的重要应用。SVD 是线性代数的一个亮点。 是一个 的列阵&#xff0c;矩阵秩 &am…

android 插入耳机 使用自身mic录音_这样选用麦克风,耳机降噪效果会更好

降噪耳机已经越来越普及&#xff0c;降噪耳机要想实现好的降噪效果面临很多挑战&#xff0c;其中如何正确选用麦克风又是一项具有重要影响的基础工作。本文目的旨在帮助读者正确选用麦克风以实现更好的耳机降噪性能&#xff0c;当然也可以帮助您更好地了解降噪耳机原理与实现方…

Linux编程基础 2.2:文件操作

3 文件操作 stat() access() chmod() truncate() link() 3.1 stat函数 #include <sys/stat.h> int stat(const char *path, struct stat *buf);功能&#xff1a;用于获取文件的属性&#xff1b; 参数说明&#xff1a; path&#xff1a;文件路径&#xff1b;buf&#…