前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用蒙特卡洛树搜索实现围棋落子算法

使用蒙特卡洛树搜索实现围棋落子算法

作者头像
望月从良
发布于 2019-04-28 02:44:04
发布于 2019-04-28 02:44:04
3.1K0
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

上一节我们完成了最大最小搜索树,加上alhpa-beta剪枝算法实现了围棋落子走法。它存在一个问题是,树搜索的层次不高,尽管如此,围棋机器人下棋时还是要多次扫描棋盘,进行复杂的运算比较后才能做出决定,这个过程异常耗时,以至于好几分钟都无法运算完。

在计算机科学中,当面对一个计算量大的复杂问题时,一种常用的做法就是引入概率和随机性,我们不一定要寻找理论上的最优做法,我们只要以一定的概率寻找到相对优越的做法即可。本节我们引入一种带有随机性的树搜索算法叫蒙特卡洛树搜索,它属于蒙特卡洛随机化算法中的一个分支,这种算法的特性是使用概率和随机化的方法去分析极度复杂和棘手的问题。之所以把这类算法叫做蒙特卡洛,是因为在摩洛哥有一片赌场区就叫蒙特卡洛。

接下来我们看看蒙特卡洛算法步骤。该算法有两个特点,一是对棋盘进行随机模拟,二是根据模拟的结果进行统计。假设当前有一个棋局,其中轮到黑棋落子:

根据上图,我们把当前棋盘状况抽象成一个树节点,它有两个值,’/‘左边的值是获胜的数量,右边的值是模拟次数,比如说给定一个棋盘局面,我让两个围棋机器人在当前局面下随机落子直到分出胜负为止,假设当前棋盘是黑棋落子,我们让机器人下100盘后,黑棋赢了70盘,那么节点中的值就是70/100。

算法第二部是根据当前节点展开,如果当前棋盘是黑棋落子,同时黑棋有3种走法,于是上面节点就可以展开三个子节点,每个子节点对应黑棋采取相应走法后的棋盘状况:

接着我们构造两个机器人,然他们基于三个叶子节点的棋盘状况随机落子,直到分出胜负:

父节点对应的棋盘轮到黑棋落子,黑棋有三种落子方式,于是衍生出三个子节点,然后我们构造机器人在三个子节点对应的棋盘上模拟对弈直到分出胜负,假设第一个节点模拟结果是黑棋胜,第二个棋盘模拟结果是黑棋输,第三个节点模拟结果是黑棋胜,于是三个子节点的值变为1/1,0/1,1/1,然后我们把子节点的结果上传到父节点:

算法每次都会以某种规则选择一个叶子节点进行机器人模拟对弈,然后将结果上传到它的所有父节点。上图模拟后表明第一个节点胜率是100%,第二个节点是0,第三个节点是100%,如此说明黑棋以第一种和第三种方式落子所得的赢面更大,当然这是不一定的,因为当前结果只是一次随机模拟的结果,很可能中间节点对应走法更好,只不过随机模拟时,因概率性问题没得到好结果而已,对于这个问题我们后面会有办法处理。

接下来我们选择一个赢率大的节点继续展开,例如我们选择第二层第一个节点,此时轮到白棋落子,假设此时白棋有两种落子方式,于是我们根据这两种落子方式形成两种棋盘,对应两个子节点:

接着我们在展开后的节点对应棋盘上进行随机模拟对弈,也就是让两个机器人在当前棋盘上随机落子,得到结果后,将结果上传到父节点进行综合:

注意到此时第二层第一个节点的赢率下降到2/3,因此下次再选择时,根据赢率最大原则,我们选择第一层第3个节点展开:

从这一系列流程中,我们发现一个问题,那就是如果一直对赢率最大的节点展开模拟,中间节点就永远得不到展开模拟的机会,很可能中间节点对应的走法才是最好的,但是由于随机模拟的方式,它的优势因概率的原因没有展现出来,毕竟我们只对它进行一次模拟,模拟次数太少就不足以在统计上说明它的优劣。同时我们还要注意一个问题,那就是每次模拟我们都对一个叶子节点展开后,将其变成父节点,然后再对其展开的叶子节点进行模拟对弈。

我们到底是继续对当前赢率最大的节点展开模拟,还是尝试一下当前赢率比较小的节点,这种两难抉择在算法上叫做exploitation-exploration,exploitation是压榨的意思,它意味着我们将资源投入到当前看起来回报最高的地方,exploration表示探索,它意味着我们尝试一下把资源投入到目前看起来回报不高的地方,探索很可能会带来新的收获,如何以科学的方法平衡这两种选择,是算法设计上一个难点。

我们如何决定到底是exploitation还是exploration呢?我们用一个数学公式来计算:

其中w是当前节点的胜率,N对应的是符号’/‘右边的数字,也就是从该节点开始包括它的子节点总共模拟了多少盘棋局,n是当前节点孩子节点中符号’/‘右边对应的数字。temperature用于控制exploitation和exploration的比例,如果这个值大,意味着你更愿意冒险,也就是你愿意多尝试把资源投入到当前赢率小的节点,如果该值小,意味着你比较保守,你更愿意把资源投入到当前赢率更大的节点,一般而言这个值取1.5的效果比较好,这个公式有它对应的数理统计原理,在这里我们不深究。

举个实际例子,就上图而言,对于顶层节点,我们如何选取三个子节点中的某一个进行模拟呢?此时N=7,如果我们选定第一个子节点,那么n=3,子节点对应的赢率是2/3,带入公式计算: 2/3 + 1.5 * (log(7) / 3) ^(1/2) = 1.87

对于第二层第二个节点而言,n=1, 带入上面公式有: 0 + 1.5 * (log(7) / 1) ^ (1/2) = 2.1

根据上面运算结果,2.1 > 1.64,因此此时应该对第二层中间节点进行展开,随着节点不断展开,每个节点的赢率发生不同变化,上面公式计算的结果也就不同,因此每次都有可能选择不同节点进行展开模拟。

这里还需要注意的问题有,每次选定一个节点后,如果当前节点对应的棋盘,其对应落子方有n种走法,那么我们要一下子为其展开n个子节点,然后对每个子节点进行模拟博弈。还有一个问题是,算法什么时候该结束呢?一般而言我们设定模拟博弈的总次数,每个子节点模拟博弈一次,总次数就减少一次,当总次数减少到0后,树的根节点选择一个赢率最大的子节点对应的落子方式作为它的下一步走法。

更多细节,我们从代码实现中理解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码
在前面章节中,我们引入不少算法和数据结构用以支持围棋机器人实现。由于围棋的步骤组合太多,几乎没有确定性的算法能在合理的时间内给出好的走法。从本节开始,我们将像AlphGo那样引入深度学习技术,通过训练神经网络的方式打造出一个强大的围棋机器人,使得这个机器人的围棋技能能够超越人类智慧之上。
望月从良
2019/04/28
1K0
使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码
迟蹭一个热点:自我对弈的 AlphaGo Zero
导语: “不需要人类知识” 得以实现是因为模型+ MCTS 提升器 的训练方法。在利用模型的基础上,MCTS 提升器总是强于模型本身,从而为模型提升指明了方向;
AlgorithmDog
2017/10/26
2.2K0
迟蹭一个热点:自我对弈的 AlphaGo Zero
AlphaGo背后的力量:蒙特卡洛树搜索入门指南
选自int8 Blog 机器之心编译 我们都知道 DeepMind 的围棋程序 AlphaGo,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念。事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决策的一种通用技术,除游戏之外,它还在很多现实世界的应用中有着广阔前景。本文中,我们会以 AlphaGo 为例子,对这一方法进行详细介绍。 长久以来,学术世界一直认为计算机在围棋这个复杂游戏上达到超越人类的水平是几乎无法实现的。它被视为人工智能的「圣杯」——一个我们原本希望在未来十年挑战的遥远里程碑。
机器之心
2018/05/08
1.6K0
AlphaGo背后的力量:蒙特卡洛树搜索入门指南
超越蒙特卡洛树搜索:北大提出深度交替网络和长期评估围棋模型
选自arXiv 机器之心编译 参与:李泽南、吴攀 在五月底与柯洁等人的系列对局之后,人工智能围棋大师 AlphaGo 已经功成名就,金盆洗手了,参阅《现场报道 | AlphaGo 被授职业九段,DeepMind 将公开其所有版本细节》;但这并不意味着计算机围棋研究已经走到了尽头。近日,北京大学的一组研究团队宣称在计算机围棋研究上取得了另一个方向的研究成果。 和 AlphaGo 等目前领先的围棋程序不同,北京大学 Wang Jinzhuo、王文敏、王荣刚、高文等人提出的新方法没有使用蒙特卡洛树搜索,而是使用了
机器之心
2018/05/08
6300
超越蒙特卡洛树搜索:北大提出深度交替网络和长期评估围棋模型
深入浅出解读并思考AlphaGo
;其次我们要想一下我们下了某一步之后局面会怎么变化,对方会怎么下,我们又怎么接着对方的棋往下下,我们把这种思考叫做思考的深度
CristianoC
2021/03/11
9080
深入浅出解读并思考AlphaGo
【python】蒙特卡洛树搜索(MCTS)简单实现
选择 Selection:从根节点 R 开始,递归选择最优的子节点(后面会解释)直到达到叶子节点 L。 扩展 Expansion:如果 L 不是一个终止节点(也就是,不会导致博弈游戏终止)那么就创建一个或者更多的字子节点,选择其中一个 C。 模拟 Simulation:从 C 开始运行一个模拟的输出,直到博弈游戏结束。 反向传播 Backpropagation:用模拟的结果输出更新当前行动序列。
全栈程序员站长
2022/07/21
2.7K0
【python】蒙特卡洛树搜索(MCTS)简单实现
使用PyTorch实现简单的AlphaZero的算法(2):理解和实现蒙特卡洛树搜索
本文中我们将详细介绍MCTS的所有步骤。但首先我们从更广泛的理解层面来说,在游戏的MCTS中,我们从给定的棋盘状态开始重复模拟玩法,一般情况下的MCTS我们会一直执行这些模拟直到游戏结束。但AlphaZero的[2]MCTS实现与传统的MCTS不同,因为在AlphaZero中我们也有一个神经网络,它正在接受训练,为给定的板子状态提供策略和值。
deephub
2023/01/18
9520
【一文读懂AlphaGo Zero算法】白话蒙特卡洛树搜索和ResNet
【新智元导读】AlphaGo Zero 令人惊艳。不过,有些评论似乎渲染过度,把它的算法说得神乎其神。大数医达创始人,CMU计算机学院暨机器人研究所博士邓侃在本文中,尝试用大白话,通俗地解释 AlphaGo Zero,弄清楚蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)、深度学习启发函数和置信上限这三大核心概念。 AlphaGo Zero 引起巨大社会轰动 只告诉机器围棋的基本规则,但是不告诉它人类摸索了上千年才总结出来的定式等围棋战术,让机器完全依靠自学,打败人类。这个题目不
新智元
2018/03/21
2.3K0
【一文读懂AlphaGo Zero算法】白话蒙特卡洛树搜索和ResNet
AlphaGo的制胜秘诀:蒙特卡洛树搜索初学者指南
2018 区块链技术及应用峰会(BTA)·中国 倒计时 3 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)·中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有:当超强嘉宾阵容遇上业界同好的脑洞大联欢,1+1=无限可能,目前门票预购火热进行中。 活动详情: http://dwz.cn/7FI1Ch 编译 | reason_W 出品 | 人工智能头条(公众号ID:AI_Thinker) 长久以来,计算
用户1737318
2018/06/05
1.4K0
《自然》论文详解:AlphaGo 背后的深度神经网络和树搜索
Nature 封面论文:Mastering the game of Go with deep neural networks and tree search(通过深度神经网络和树搜索,学会围棋游戏) AlphaGo 给围棋带来了新方法,它背后主要的方法是 Value Networks(价值网络)和 Policy Networks(策略网络),其中 Value Networks 评估棋盘位置,Policy Networks 选择下棋步法。这些神经网络模型通过一种新的方法训练,结合人类专家比赛中学到的监督学习,
新智元
2018/03/14
4.3K0
《自然》论文详解:AlphaGo 背后的深度神经网络和树搜索
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法,通过不断自我对弈,最终实现从零棋力开始训练直至能够打败任何高手。在本篇中,我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法。本篇所有代码在 github.com/MyEncyclopedia/ConnectNGym 中,其中部分参考了SongXiaoJun 的 github.com junxiaosong/AlphaZero_Gomoku。
AI科技大本营
2020/09/24
1.7K0
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?
选自kdnuggets 作者:Mateusz Wyszyński 机器之心编译 参与:Panda 本文解读了蒙特卡洛树搜索算法背后的概念,并用一个案例说明了欧洲航天局使用该算法来规划星际飞行的方法。 前段时间,我们见证了游戏人工智能领域历史上最重大的事件——AlphaGo 成为了第一个在围棋上战胜世界冠军的计算机程序,其相关论文参阅:https://www.nature.com/articles/nature24270。 DeepMind 的开发者将来自机器学习和树搜索的不同技术结合到一起而实现了这一结果。
企鹅号小编
2018/01/11
1K0
蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?
自我对弈的 AlphaGo Zero
本文介绍了 AlphaGo Zero 的核心思想,通过自我对弈学习围棋,在不使用人类棋谱的情况下,三天内以 100 比 0 的战绩战胜 AlphaGo Lee;同时,对 AlphaGo Master 的提升也显示出强化学习在围棋领域的潜力。
AlgorithmDog
2017/12/29
1.1K0
自我对弈的 AlphaGo Zero
详解强化学习多智能体博弈算法——蒙特卡洛树搜索
👆点击“博文视点Broadview”,获取更多书讯 强化学习,除了可以用于单个强化学习智能体和环境的相互作用,也可以用于两个或者多个智能体在某个强化学习环境下的博弈。 关于这种类型的算法,最有名的应该是蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)。 随着AlphaGo和AlphaZero算法在围棋、国际象棋和将棋等棋类领域的广泛应用,并且在这些领域内均取得了相比传统的Alpha-Beta 剪枝算法更加优异的性能,蒙特卡洛树搜索算法作为这些智能体使用的算法也被越来越多的人研究
博文视点Broadview
2022/03/30
2.9K0
使用最大-最小树搜索算法和alpha-beta剪枝算法设计有效围棋走法
我们的世界纷繁复杂,看起来完全不可捉摸。但在很多场景下,它运行的本质其实是通过付出最小的代价获得最大化收益。例如在自然界里的自然选择,光的运行路径。对于人的世界更是如此,由于我们做任何事情,任何选择都要付出相应的成本,因此选择一种决策方式让我们以最小的代价获得最大化的回报无疑是我们行动思考的核心。
望月从良
2019/04/28
2.6K0
使用最大-最小树搜索算法和alpha-beta剪枝算法设计有效围棋走法
组合游戏系列4: AlphaGo Zero 强化学习算法原理深度分析
AlphaGo Zero是Deepmind 最后一代AI围棋算法,因为已经达到了棋类游戏AI的终极目的:给定任何游戏规则,AI从零出发只通过自我对弈的方式提高,最终可以取得超越任何对手(包括顶级人类棋手和上一代AlphaGo)的能力。换种方式说,当给定足够多的时间和计算资源,可以取得无限逼近游戏真实解的能力。这一篇,我们深入分析AlphaGo Zero的设计理念和关键组件的细节并解释组件之间的关联。下一篇中,我们将在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法。
CreateAMind
2020/10/22
1.8K0
组合游戏系列4: AlphaGo Zero 强化学习算法原理深度分析
蒙特卡洛树搜索 Monte Carlo Tree Search
什么是 MCTS? 全称 Monte Carlo Tree Search,是一种人工智能问题中做出最优决策的方法,一般是在组合博弈中的行动(move)规划形式。它结合了随机模拟的一般性和树搜索的准确性。 MCTS 受到快速关注主要是由计算机围棋程序的成功以及其潜在的在众多难题上的应用所致。超越博弈游戏本身,MCTS 理论上可以被用在以 {状态 state,行动 action} 对定义和用模拟进行预测输出结果的任何领域。 ---- 基本算法 基本的 MCTS 算法非常简单:根据模拟的输出结果,按照节点构造搜
用户1107453
2018/06/21
4.1K0
蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事
前言: 本文是根据的文章Introduction to Monte Carlo Tree Search by Jeff Bradberry所写。 Jeff Bradberry还提供了一整套的例子,用python写的。 board game server board game client Tic Tac Toe board AI implementation of Tic Tac Toe 阿袁工作的第一天 - 蒙特卡罗树搜索算法 - 游戏的通用接口board 和 player 阿袁看到阿静最近在学
绿巨人
2018/05/18
2.9K0
强化学习系列(十一)--探索蒙特卡洛树搜索(MCTS)及其在大语言模型中的应用
文章从环境搭建、代码实现到数据展示与分析,完整实现了一个微博热搜爬取项目。项目不仅可以作为学习爬虫的入门案例,还可扩展为更复杂的热点分析系统。
languageX
2024/12/06
4K0
强化学习系列(十一)--探索蒙特卡洛树搜索(MCTS)及其在大语言模型中的应用
【Nature重磅封面】Google人工智能击败欧洲围棋冠军,3月挑战世界冠军!
围棋一直被视为人工智能最难破解的游戏。就在今天,《Nature》杂志以封面论文的形式,介绍了 Google DeepMind 开发的人工智能程序 AlphaGo,它击败了欧洲围棋冠军樊麾,并将在 3 月和世界冠军李世乭对战!Google 特地为此准备了 100 万美元奖金。 从国际象棋的经验看,1997 年人工智能第一次打败人类后,2006 年成为了人类在国际象棋的绝唱,自此之后人类没有战胜过最顶尖的人工智能国际象棋选手。在 AlphaGo 打败了欧洲围棋冠军后,世界冠军李世乭和 AlphaGo 的对弈,
新智元
2018/03/14
1.6K0
【Nature重磅封面】Google人工智能击败欧洲围棋冠军,3月挑战世界冠军!
推荐阅读
相关推荐
使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档