【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计
基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计
- 摘要
- 蒙特卡洛树搜索算法
- 五子棋博弈的状态价值函数
- 附1:详细论文说明下载:
- 附2:实现代码下载(2022.10更新后代码):
摘要
随着人工智能领域的发展,深度学习、强化学习等算法被广泛应用于解决各种游戏博弈问题,通过训练神经网络来得到各种游戏的人工智能算法,人工智能来到了一个新的发展水平。在此类游戏博弈问题上,其他的方法要么是类似穷举法的搜索算法,它们在有限计算资源的情况下博弈能力较弱;要么是基于机器学习的方法,它们虽然博弈能力强,但是需要花费大量资源,训练和预测时都十分缓慢。因此,在设计此类游戏博弈的算法中,有必要既兼顾计算的时间问题,也兼顾算法的博弈能力的问题。在本次课程设计中,我们使用蒙特卡洛树搜索与深度神经网络来设计一种基于强化学习的AI五子棋算法,实现了从零开始学习五子棋博弈的人工智能算法。其中神经网络是经过设计的策略价值网络; 蒙特卡洛树搜索可根据多次模拟博弈的结果预测最优的移动方案。将五子棋规则与蒙特卡洛树搜索和策略价值网络相结合,蒙特卡洛树搜索使用策略价值网络评估落子位置和选择移动,增强树的搜索强度,提高落子质量,优化自对弈迭代。通过蒙特卡洛树搜索进行自对弈,训练一个神经网络来预测落子选择以及游戏的赢家。最后,该算法与其他方法进行了对比,测试结果表明我们设计的算法在五子棋的对弈上相对于其他方法有着更好的性能以及要求更低的计算资源。
蒙特卡洛树搜索算法
蒙特卡洛树搜索是由前里尔第三大学助理教授Rémi Coulom首次提出,并应用于围棋博弈程序Crazy Stone,Crazy Stone成为了第一个达到职业围棋五段水平的人工智能算法[16][17],蒙特卡洛树搜索最主要的目的就是要根据当前的游戏状态给出价值最高的博弈方案。在本章节中会解释蒙特卡洛树搜索的原理与过程,并做详细的分析与介绍。
- 蒙特卡洛树搜索的基本过程
蒙特卡洛树搜索算法将采用一种全新的方法去计算最优动作。顾名思义,蒙特卡洛树搜索采用蒙特卡洛方法,以某一状态作为根节点,进行随机模拟,由根节点开始向下扩展博弈树,最后根据模拟结果预测最优的决策方案。蒙特卡洛树搜索的核心是搜索,即沿着博弈树向下模拟并扩展的一组遍历过程。单次遍历从根节点(当前博弈状态)出发,向下选择延伸,直到遇到未完全展开的节点,未完全展开的节点表示其至少有一个未被访问的子节点。遇到未完全展开的节点时,将采用某种策略进行扩展,选择其中一个未被访问过的子节点作为本次模拟的端节点,随后采取反向传播的方法将模拟结果逐级向上更新,直至回到根节点。一旦搜索达到设定的次数上限或时间上限,即停止蒙特卡洛树搜索,根据根节点的子节点所获得的统计量做出最优决策[31]。
下图展示了蒙特卡洛树搜索的基本过程。蒙特卡洛树搜索由选择(Selection)、扩展(Expansion)、模拟(Simulation)、更新(Backpropagation)四个基本过程组成。
第一步是选择(Selection):这一步会从根节点开始,每次都选一个“最值得搜索的子节点”,一般使用最大置信上界(UCT)选择分数最高的节点,直到来到一个“存在未扩展的子节点”的节点,如图中的 3/3 节点。之所以叫做“存在未扩展的子节点”,是因为这个局面存在未走过的后续着法,也就是MCTS中没有后续的动作可以参考了。这时我们进入第二步。
第二步是扩展(Expansion),在这个搜索到的存在未扩展的子节点,加上一个0/0的子节点,表示没有历史记录参考。这时我们进入第三步。
第三步是仿真(Simulation),从上面这个没有试过的着法开始,用一个简单策略比如快速走子策略(Rollout policy)走到底,得到一个胜负结果。快速走子策略一般适合选择走子很快可能不是很精确的策略。因为如果这个策略走得慢,结果虽然会更准确,但由于耗时多了,在单位时间内的模拟次数就少了,所以不一定会棋力更强,有可能会更弱。这也是为什么我们一般只模拟一次,因为如果模拟多次,虽然更准确,但更慢。
第四步是回溯(Backpropagation), 将我们最后得到的胜负结果回溯加到MCTS树结构上。注意除了之前的MCTS树要回溯外,新加入的节点也要加上一次胜负历史记录,如图最右边所示。
- 最大置信上界算法
最大置信上界算法(Upper Confidence Bound Apply to Tree,UCT),是一种博弈树搜索算法,该算法将蒙特卡洛树搜索(Monte-Carlo Tree Search,MCTS)方法与Upper Confidence Bound(UCB)公式结合,极大提高了大规模博弈树在搜索过程中的效率,降低了搜索的空间复杂度。UTC算法可以表示为:
蒙特卡洛树搜索遍历过程中总是优先选择UCT值最大的节点。首先,该函数的对象为节点v及其子节点v(i),它包括两个组件。第一个组件为:
该组件被称为exploitation组件,可以简单理解为博弈获胜的概率,其值为子节点v(i)的总模拟奖励Q(v_i)除以总访问次数N(v_i),即节点v_i的胜率评估结果。我们总是希望优先遍历具有更高胜率的节点,但是一味贪婪最大化胜率评估值会导致偏差。假设仅使用exploitation UCT组件开始蒙特卡洛树搜索。从根节点开始,对子节点进行一次模拟,然后下一步仅访问那些模拟结果至少有一次是赢的节点。第一次模拟结果不幸失败的节点会立刻被舍弃,而那些第一次模拟中获胜的节点会被不断的探索,这导致整个博弈树的展开与首次模拟的位置有着极大的关联,更多潜在的优质策略动作未被足够的探索。因此本文通过某种方式均衡探索和利用,这就是第二个UCT组件exploration:
exploration组件提高了那些未被充分探索的节点被访问到的概率,这些节点被访问到的次数相对较少(N(v_i)较低),exploration随着节点访问量的增加而递减,访问量少的节点有着更高的exploration,从而增大其被选中几率,指引exploration更充分的探索。
最后,本文使用UCT公式中的参数c来控制exploitation和exploration两个组件之间的权衡。通常c的取值为0.5。
- 终止蒙特卡洛树搜索
不难知道,蒙特卡洛树搜索策略的好坏与模拟次数有着直接的关系,模拟的次数越多,搜索的结果越可靠。但是受限于计算资源与时间,模拟不可能一直进行下去。通常情况,算法会设置一个模拟的上限,当从根节点开始模拟到一定盘数时,就停止搜索。随后根据根节点的子节点的访问量N(v_i),选择最佳的动作。
当使用蒙特卡洛树搜索执行完一个动作时,博弈状态往前推进了一步,新的状态为对手的起始状态。当对手也完成落子时,新的状态即为新一轮蒙特卡洛树搜索的根节点(起始状态)。而如果对手的落子选择在上一次模拟的情况之内,可以从上一轮展开的博弈树中截取相应的子树成为新的博弈树,这样就实现了博弈树模拟结果的复用,提高了模拟的效率。当对手的落子选择不在上一次模拟情况内的时候,则需要构建一颗新的博弈树,上一轮的模拟结果均被舍弃。
五子棋博弈的状态价值函数
基于上述分析,本文采用神经网络作为状态价值函数的逼近器,使用蒙特卡洛策略评估方法作为更新方法,神经网络最小化估计值和奖赏的均方误差
由于蒙特卡洛策略评估具有零偏差和高方差,因此本文引入策略函数,以提高决策的正确性及鲁棒性。
附1:详细论文说明下载:
https://download.csdn.net/download/weixin_39589455/15465016
附2:实现代码下载(2022.10更新后代码):
https://download.csdn.net/download/weixin_39589455/86812601
【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计相关推荐
- python实现的基于蒙特卡洛树搜索(MCTS)与UCT RAVE的五子棋游戏
转自: http://www.cnblogs.com/xmwd/p/python_game_based_on_MCTS_and_UCT_RAVE.html 更新 2017.2.23有更新,见文末 ...
- 蒙特卡洛搜索树python_python实现的基于蒙特卡洛树搜索(MCTS)与UCT RAVE的五子棋游戏...
更新 2017.2.23有更新,见文末. MCTS与UCT 下面的内容引用自徐心和与徐长明的论文<计算机博弈原理与方法学概述>: 蒙特卡洛模拟对局就是从某一棋局出发,随机走棋.有人形象地比 ...
- 蒙特卡洛树搜索 MCTS 入门
引言 你如果是第一次听到蒙特卡洛,可能会认为这是一个人名.那么你就大错特错,蒙特卡洛不是一个人名,而是一个地方,还一个赌场名!!!但是这不是我们的重点. 我们今天的主题就是入门蒙特卡洛树搜索, ...
- 面向初学者的蒙特卡洛树搜索MCTS详解及其实现
目录 0. 序言 1. 蒙特卡洛算法的前身今世 2. 蒙特卡洛搜索算法的原理 2.1 Exploration and Exploitation(探索与利用) 2.2 Upper Confidence ...
- MCTS 蒙特卡洛树搜索
<Behavior Tree Learning for Robotic Task Planning through Monte Carlo DAG Search over a Formal Gr ...
- AlphaGo的制胜秘诀:蒙特卡洛树搜索初学者指南
编译 | reason_W 出品 | AI科技大本营(公众号ID:rgznai100) 长久以来,计算机在围棋领域不可能达到人类专家的水平一直是学术界的主流观点.围棋,被认为是人工智能的" ...
- AlphaGo背后的力量:蒙特卡洛树搜索入门指南
我们都知道 DeepMind 的围棋程序 AlphaGo,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念.事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决策的一种通用技术,除游戏之 ...
- 蒙特卡洛搜索树python_蒙特卡洛树搜索最通俗入门指南
关于蒙特卡洛树搜索,国内真的很难找到特别好的入门资料,很多还是错的,本文是前段时间为了实现自己的一个 AI,在阅读了几十篇国内外文章之后根据自己的理解整合写的,主要参照 INT8 的一篇英语博文 Mo ...
- 【AlphaGo】AlphaGo背后的力量:蒙特卡洛树搜索入门指南
选自int8 Blog 机器之心编译 我们都知道 DeepMind 的围棋程序 AlphaGo,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念.事实上,蒙特卡洛树搜索是在完美信息博弈 ...
最新文章
- HTTP Host 头攻击
- 收藏!工作中Git使用实践和常用命令流程合集
- Linux c 基于内存的进程通信—共享内存、共享队列(消息队列)
- 关于ssl免费证书设置
- 活久见啊,WPF工资已经这么高了!
- Qt/C++工作笔记-vector与QVector的拷贝复制(区别与联系)
- 关于Zipkin的几个问题
- redis单机安装并配置服务脚本启动
- 连CEO都不香了?这些互联网大佬接连辞任
- Netty4 websocke实现聊天功能
- c语言pi算法程序,C语言计算圆周率PI
- java 可达性分析算法_垃圾回收:可达性分析算法、生存还是死亡(两次标记)
- H5开发和原生开发的区别
- JS HTML Web端使用MQTT通讯测试
- win10电脑不显示手机连接服务器失败,手机投屏win10电脑失败的解决方案
- 卡方检验值转换为P值
- 离开阿里加盟复旦!大牛纷纷离职回归学界,撕下了国内大厂AI的最后遮羞布!大厂AI名存实亡?...
- Python学习week4
- 浅谈知识付费模式的兴起及意义
- pos系统开发步骤1-创建数据库以及拼音缩写的实现