设为首页 - 加入收藏
广告 1000x90
您的当前位置:二四六天天好彩308K文字资料 > 博弈树搜索 > 正文

MCTS蒙特卡洛搜索树实现井字棋游戏

来源:未知 编辑:admin 时间:2019-06-06

  利用蒙特卡洛搜索树实现简单的井字棋游戏,重点不是井字棋,是熟悉蒙特卡洛搜索树的应用,而且我们知道,MCTS可以应用到非常复杂的博弈游戏中,比如象棋,围棋,在搜索空间非常大的时候,普通的极大极小搜索树无法应用,这是由于硬件设备的限制。

  但是井字棋游戏的搜索空间很小,第一层只有9个子节点,对应9个可选的位置,同样我们可以看出,第二层只有9*8个子节点,以此类推,直到搜索到结束也不会占用很大的空间,所以井字棋是可以利用极大极小搜索配合α-β剪枝来做到最优落子的。

  但是我本次就不使用这种穷举的方法了,而使用MCTS来实现,而且在这种小游戏中,模拟次数足够的情况下,落子也几乎是最优的。

  简单介绍一下MCTS,也就是蒙特卡洛搜索树算法,大体分为四步,选择,扩展,模拟,回传。通过不断重复这四步,也就可以不断扩展这棵搜索树,最后到达时间限制或者到达模拟次数限制之后,最终可以形成一棵不对称的树。由于每个节点记录了选择的次数数据,因此树构建完成后可以选择根节点下一层中选择次数最大的子节点作为落子,因为我们知道,虽然一开始的选择节点是很随机的,但是通过回传操作,节点的价值是不断更新的,因此最终选择次数最多的节点我们认为可能是效果比较好的节点,事实也证明这是完全正确的想法。

  就是选择一个节点,刚开始时,只有根节点,没有子节点可以选择就跳到下一步,扩展,如果有子节点,就根据子节点的价值抽样选择一个,然后再看选择的这个子节点还有没有子节点,如果有,继续往下选择,直到选择到叶子结点。然后进入下一步。

  选择到叶子节点之后,就可以进行扩展,将叶子结点的子节点展开,可以展开一个,也可以展开多个,要根据实际情况而定。比如我们熟知的阿尔法狗算法,每次都展开所有的子节点,然后根据神经网络输出的概率给每个子节点赋值先验概率,这里不多说,感兴趣的去了解阿尔法狗的论文。而正常的MCTS,展开一个的较为常见,其实本质上区别不大,因为我们会记录节点是否已完全展开,没有完全展开的节点,接下来的模拟中会继续展开的,所以本质上展开一个和多个区别不大,因为最终基本都会展开。

  这也是MCTS中较为重要的一步,根据一个策略,通常随机策略的效果就非常不错,借用阿尔法狗第一作者David Silver在伦敦大学强化学习课程中说的一句话:不要以为随机策略是很糟糕的策略,它常常可以取得非常不错的效果。  所以这里我们一般就是采用随机策略,从刚才扩展的叶子结点开始一直模拟到游戏结束。具体什么意思呢?就是从这个叶子结点的局面开始,博弈双方都随机的从可用的地方落子一直到比赛胜负,这个胜负的结果一定程度上就反映了了这个局面的情况,如果胜了,至少可以有种落子的方式可以赢一次不是吗,当然我们也能想象到这个结果是很不可靠的,毕竟随机落子的,事实上确实是不可靠的,但是好处就是快,而且我们可以模拟很多次,上千次,这样即使是随机的,如果大部分都是赢的话,也足以说明这个局面的赢面是大的,所以本质上MCTS就是以频率逼近概率的算法。

  上一步模拟出胜负结果之后,这个结果一般是1,-1和0,代表胜负平,然后把这个结果回传,更新这个路径上的节点的值。举个具体的例子,比如说模拟的结果是胜利,也就是1,那么第二步那个叶子结点的价值就加1,当然还有其他的值需要更新,比如选择的次数也要加1,然后它的父节点的值就要加-1,因为是博弈,对对手是胜利,对自己就是失败,所以取相反数,然后父节点的父节点就是加1,依次递归到根节点,更新整个路径上的节点的值。

  到此为止,上面四步完成后,一次蒙特卡洛搜索就结束了,然后在进行第二次,第三次,成百上千次,都结束之后,根据根节点的子节点的选择次数信息,选择计数最大的那一步落子,到这里才算真正的下第一步棋,也就是前面成百上千次的MCTS都只是在脑袋里想想而已,并不是真正的下棋。

  然后就是根据上面介绍的MCTS实现自己的东西了,比如我要实现一个井字棋游戏,其实重点就是构建这样一棵树,游戏的部分很简单,定义棋盘:一就是定义棋面状态,用一个3*3的2维数据就行了,表示每个位置的落子情况,是圈还是叉还是空白。二是游戏的棋盘状态,需要包含上一步的棋面状态,,这部分你还可以定义一些必要的功能函数,比如游戏是否结束,判断谁是胜者,定义落子函数,获取合法的落子位置等等,这些都是很常见的函数。定义落子:必要时还可以定义落子类,也就是动作类,包含落子的坐标还有取值,取值就代表圈还是叉,这样游戏落子的很多地方就方便了许多。

  重点是树的构建,这也是对你的数据结构熟练度的考察,你需要首先定义节点类,变量至少要包含必要的价值和计数值,还有记录父节点和子节点的信息,还有上面介绍的一系列操作,选择,扩展,模拟,回传等等。然后在定义蒙特卡洛搜索树类,利用上面的节点类,主要完成树的构建,还有进行多次的模拟,并且还要定义获取最优落子的函数。

  具体代码参见我的Github,代码并不复杂,喜欢的可以点个Star支持一下。MCTS也就是电脑先手,模拟1000次落子一次,你可以修改成自己先手,只需要修改run.py的代码即可,我就不多说了。

  选自int8Blog机器之心编译我们都知道DeepMind的围棋程序AlphaGo,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念。事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决...博文来自:产业智能官

  否是是否初始化根节点判断是否是叶子节点a.选择节点执行模拟节点移动b.执行神经网络模拟估值游戏结束设置叶子节点胜平负valueb.扩展叶子节点设置该节点value为神经网络预测的valuec.根据va...博文来自:mergerly的专栏

  本篇博客为《MonteCarloTreeSearch–beginnersguide》的翻译,水平有限,有兴趣的朋友可以直接阅读原文。  很长一段时间以来,学术界普遍认为,机器在围棋领域达到人类大师...博文来自:Sual

  蒙特卡洛树搜索的基本概念蒙特卡洛树搜索会多次模拟博弈,并尝试根据模拟结果预测最优的移动方案。蒙特卡洛树搜索的主要概念是搜索,即沿着博弈树向下的一组遍历过程。单次遍历的路径会从根节点(当前博弈状态)延伸...博文来自:Haward

  首先,要明确的一点是,算法并不用了解游戏的领域知识。       在一个游戏模拟过程中,相关决策的组合可能是一个很大的数,我们如何控制这个模拟行为是满足一定时间上的限制的。我们允许一个参数来控制时间。...博文来自:一只小鲤鱼

  纵横十九道,棋子无大小,平均150回合的比赛,最大有3^361种局面(大致为10^170),围棋一直被视为人工智能(AI)的最大挑战之一,但Google旗下的DeepMind声称其AI算法已经掌握了比...博文来自:happytofly的博客

  标签:3d游戏编程Unity3d作业第一次作业简答题1.Q:解释游戏对象(GameObjects)和资源(Assets)的区别和联系A:资源是储存在磁盘的文件,保存在UnityProject的Asse...博文来自:生息之地

  井字棋:读入一个整数,表示井字棋棋盘的边长。判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);...博文来自:Capsule

  无聊,写个小游戏,井字棋思路:棋盘表达:二维数组打印棋盘状态:数组元素标识:未下棋,下O和下X。棋手:加计数器,奇偶判断区分两棋手。胜利判断:横竖斜,一方能先连起来,这个直接拿出数据来比一下。还有棋盘...博文来自:huqinwei的专栏

  雷锋网按:本文作者彭博,Blink·禀临科技联合创始人。文章由雷锋网(公众号:雷锋网)整理自作者知乎专栏,获授权发布,未经允许禁止转载。蒙特卡洛树搜索(MCTS)是所有现代围棋程序的核心组件。在此之上...博文来自:kwame211的博客

  作者int8.io编译张健欣编辑EmilyChenAI前线导读:本文是一篇关于蒙特卡洛树搜索的入门指南,介绍什么是蒙特卡洛树搜索及其各个细节的基本概念,然后通过一个简单的例子帮助读者更好地理解蒙...博文来自:weixin_34357436的博客

  游戏内容:井字棋或贷款计算器或简单计算器等等技术限制:仅允许使用IMGUI构建UI项目目的:提升debug能力,提升阅读API文档能力1.井字棋简介(维基百科)1.玩法两个玩家,一个打圈(◯),一个打...博文来自:vc43vc的专栏

  前文链接:点击打开链接    前文已经提到MCTS算法取得了较为明显的成果,究其原因是算法会根据模拟出的获胜场次来选择当前动作中后续胜率最高的动作。然而mcts算法的局限性也正是这个原因引起的,因为m...博文来自:lc_892424093的博客

  2015年9月7日周一由JeffBradberry留   与游戏AI有关的问题一般开始于被称作完全信息博弈的游戏。这是一款对弈玩家彼此没有信息可以隐藏的回合制游戏且在游戏技术里没有运气元素(如扔骰子或...博文来自:z84616995z的专栏

  蒙特卡罗树搜索AlphaGo火极一时,最近还出了新版本AlphaGoZero,而我甚至对原版的AlphaGov13还不甚了解。在查阅了一些博客、论文和代码之后,大致了解了AlphaGo的基本组成,蒙特...博文来自:songbinxu的博客

  许多人会混淆蒙特卡洛树搜索和蒙特卡洛方法。这两者有本质区别。用做过渲染器的朋友会理解的话来说:蒙特卡洛方法有偏差(Bias),而MCTS没有偏差(Bias)。而蒙特卡洛树搜索在一段时间模拟后,b1和b...博文来自:梨休休的超级无敌厉害博客

  编译reason_W出品 AI科技大本营(公众号ID:rgznai100)长久以来,计算机在围棋领域不可能达到人类专家的水平一直是学术界的主流观点。围棋,被认为是人工智能的“圣杯”——一个我们原本...博文来自:AI科技大本营

  同时发布于:最近阿法狗和李师师的人机大战着实火了一把,还顺带捧红了柯杰,古力等一干九段。虽然我从小学的是象棋,对围...博文来自:natsu的随笔

  本文摘自下面链接的部分内容。原文入口:深蓝采用的是前面提到的约翰·麦卡锡提出的α-β剪枝算法。该...博文来自:wydbyxr的博客

  何为TicTacToe?TicTacToe也俗称井字棋或三连棋(两人轮流在一有九格方盘上划加字或圆圈,谁先把三个同一记号排成横线、直线、斜线,即是胜者),男女老少皆宜的入门级棋类游戏。        ...博文来自:江南晚来客的专栏

  本文介绍一个简单的井字游戏的JavaFX程序。在井字游戏中,两个玩家在一个3×3的网格中轮流将各自的标记填在空格中(一个人用X,另一个人用O)。如果一个玩家在网格的水平方向、垂直方向或者对角线方向上放...博文来自:The wind of freedom blows

  编写程序,创建一个自定制面板,它可以显示 X、0 或者空白。显示什么是重画面板时随机决定的。使用Math.random()方法产生整数0、1或2,对应于面板上显示X、0或者空白。创建一个包含九个自定制...博文来自:cwquan的博客

  本章的标题既然是“程序员与算法”,就必然要涉及一个基本问题,那就是“程序员是否必须会算法”。这是一个充满争议的问题,虽然并不像“生存还是毁灭”之类的选择那样艰难而沉重,但也绝不是一个轻松的话题。朋友们...博文来自:zxl2016的博客

  最近想去做一个小型的五子棋对弈,中间会用到蒙特卡洛树,在此标记一下。    MCTS,即蒙特卡罗树搜索,是一类搜索算法树的统称,可以较为有效地解决一些搜索空间巨大的问题。    如一个8*8的...博文来自:kawhi849

  摘要我们提出了一种样本高效的深度强化学习算法——生成对抗树搜索博文来自:cgfth

  这里先简单介绍一下蒙特卡洛算法,是一种统计学的方法,也是一种模拟的思想.通过大量随机样本,去了解一个系统,进而得到要计算的值(近似值).样本量越大,模拟出来的值越准确.1.求PI值利用面积,pi=落在...博文来自:29DCH的博客

  今天开始研究SamplingMethods,接下来会分为四部分进行讲解。本文是开篇文章,先来讲讲蒙特卡洛算法。  Contents   1.蒙特卡洛介绍  2.蒙特卡洛的应用  3.蒙特卡洛积分   ...博文来自:ACdreamer

  什么是MCTS?全称MonteCarloTreeSearch,是一种人工智能问题中做出最优决策的方法,一般是在组合博弈中的行动(move)规划形式。它结合了随机模拟的一般性和树搜索的准确性。MCTS受...博文来自:人工智能

  整体框架:首先我们要明确我们要做什么,需要什么函数实现。我只是设计了简单的双人游戏模式,在这个模式中,我们需要下列几个函数:重置函数Reset();棋盘界面,我们用OnGUI();函数创建棋盘,该函数...博文来自:hellowangld的博客

  含有详细注释,在linux下编译(在windows下修改环境参数可编译运行)。 实现了人工智能的博弈树范例,运用minmax对策获取一字棋(也成为“井”字棋)游戏的胜利

  内含github中关于MCTS的工程及源码,Python实现,一些简单例子,可学习使用

  file_get_contents 得到https类型url失败的方法

  隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价...博文来自:dragon的专栏

  连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为...博文来自:Napoleon的专栏

  ATSHA204A加密芯片是ATMEL公司研发的一款高安全性的,功能丰富的加密IC,使用SHA-256算法进行加密操作,内置16*32字节的slot(EEPROM)可以存储用户数据和秘钥,唯一的9字节...博文来自:a5882230的专栏

  一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一...博文来自:小平子的专栏

  利用CRC32绕过RAR密码(适合于小文本文件)原文标题:教你绕过rar密码 文章仅作rar密码破解的探讨,如有高见还望提出。 题目有点夸大其词,事实是我也没能想出一个更好的描述来总结这篇文...博文来自:林毅洋

  一、适用场景内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。二、模式核心 享...博文来自:小小本科生成长之路

  原文地址:因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能...博文来自:ymj7150697的专栏

  相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法...博文来自:杨威的博客

  转载请说明原出处,谢谢~~   第三个没有做的是每个显示的背景图的小图的动态外观,原酷狗的背景图的小图标,有normal、hover、down等 多种状态,如图  ...博文来自:Redrain的专栏

  转载请注明出处:     在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。 公交信息检索     实际上,公交信息检索与POI检索、在线建议检索非常相似,也...

  一、前言最近由于研究需要,要用到线性判别分析(LDA)。于是找了很多资料来看,结果发现大部分讲的都是理论知识,因此最后还是看的一知半解,后来终于找到了个英文的文档,作者由PCA引入LDA,看过后豁然开...

  1.当我们发现无法联网时,我们运行下面命令或者ping命令 ip  addr 结果没有显示局域网的IP地址 2.我们去修改网卡配置文件,把网络连接打开 cd / cd  /etc/sys...

  本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。...

  在最近的项目开发中涉及到一个伴奏和类似K歌的功能,最明显的做法就是将播放器里播放的声音扑捉到缓冲区里与麦克风的声音做混合,然后编码发送出去。这里有个关键环节就是混音。因为是音乐类的声音混合,所以要求尽...

  单机最大的TCP连接数及其修改 一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535” .    65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的...

  田发江的专栏微信支付V3微信公众号支付PHP教程(thinkPHP5公众号支付)/JSSDK的使用

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  jquery/js实现一个网页同时调用多个倒计时(最新的)11-25阅读数 51万+

  深入理解在Android中线天的凌晨时光,这段时间收获很多.(2)从整理文章,作者从线程--阻塞队列--二进制--线程池的内部机制,一路走来,本来是想写一篇为AsyncTask...博文来自:我一直很棒,这个不用质疑

  1、点击打开遮罩层按钮 2、弹出一个隐藏的div 实现代码如下: 影音先锋 -- ...博文来自:简单就是美

  PHP如何获取刚插入数据的ID 和判断SQL语句是否成功执行博文来自:coder_zyz的专栏

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行 sql仅可执行DDL、select、DML等...博文来自:Ape55的博客

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...博文来自:知识小屋

  自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。 1. 测试集和训练集3、7分组 australian ...博文来自:Tiaaaaa的博客

本文链接:http://mzi-ads.com/boyishusousuo/549.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top