设为首页 - 加入收藏
广告 1000x90
您的当前位置:E乐彩票app下载 > 博弈树搜索 > 正文

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

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

  利用蒙特卡洛搜索树实现简单的井字棋游戏,重点不是井字棋,是熟悉蒙特卡洛搜索树的应用,而且我们知道,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,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念。事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决...博文来自:产业智能官

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

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

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

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

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

  0引言在智能过程中,搜索是必不可少的,是人工智能中的一个基本问题——Nilsson。这是因为人工智能研究的主要是那些没有成熟方法可依的问题领域,需要一步步搜索求解。游戏中如何找到对自己有利的局面就...博文来自:Notzuonotdied的博客

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

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

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

  我在最近撰写五子棋AI程序设计报告时,翻阅了很多的资料博客,但却发现大佬们的博客,没有一篇是能让我只看它就能理解全部的AI算法。在看了众多博客后,我终于对博弈树、极大极小搜索、αβ剪枝恍然大悟,其实这...博文来自:的博客

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

  摘要本文会讲清楚:1)博弈搜索2)MiniMax算法3)Alpha-Beta剪枝算法一、博弈搜索概念在多Agent环境中(竞争环境),每个Agent的目标之间是有冲突的,所以就引出了对抗搜索(Adve...博文来自:the Blog of Dale无双

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

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

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

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

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

  本文介绍一个简单的井字游戏的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

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

  题目连接只要出去顺子后,剩下的牌出的最优顺序是固定的,可以用贪心从四带2对,四带2张,三带1对,三带1张,剩下的对...博文来自:Cliu__的博客

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

  2016年AlphaGo横空出世,在AI界和围棋界掀起了一阵腥风血雨。宝刀一出,无数围棋高手如樊麾,李世石,柯洁等人先后被斩于马下。正所谓:十步杀一人,千里不留行。事了拂衣去,深藏功与名。AlphaG...博文来自:gdhu

  转载出处在深度优先搜索中,你可以从图中的某个节点开始,继续深入和深入图形,同时可以找到尚未到达的新节点(或直到找到解决方案)。每当DFS运行完毕,它会回溯到最新的点,在那里它可以做出不同的选择,然后从...博文来自:BIT1120172185的博客

  近几年来,随着谷歌的阿尔法狗和阿尔法元的问世,蒙特卡洛树搜索(MCTS),作为一种不需要特定领域的先验知识的搜索算法逐渐被人们重视起来。其可以在无任何已知知识,而仅需要了解模拟规则和结束状态的情况下,...博文来自:bowean的博客

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

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

  一:实验题目井字棋游戏设计利用面向对象程序设计的知识,通过设计board、player、game类,实现一个具有人人对弈、人机对弈以及机机对弈的井字棋游戏。要求:①对类设置和实现的要求1.封装:需要对...博文来自:Simon_coder的博客

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

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

  看了这个懂的,分钟左右的地方,树的值是这局棋赢的概率,最后再根据输赢结果更新这棵树...博文来自:玩够了

  1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别、文本翻译、序列预测、中文分词等多个领域。虽然近年来,由于RNN等深度学习方法的发展,HMM模型...博文来自:tostq的专栏

  有了上篇单目标定示例程序的经验,双目标定就是小菜一碟哈。 本人目前菜鸟,但还是愿意厚着脸皮分享我一下午的成果。不要拍我... 1.找到目录   ...\opencv\sources\sam...博文来自:t247555529的博客

  reids是一个key-value存储系统,为了保证效率,缓存在内存中,但是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,以保证数据的持久化。   所以:redis是一...博文来自:那么好,

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据、存储数据、传输(交换)数据。 XML与HTML区别: 目的不一样 XML...博文来自:NWK工作者的博客

  最近在公司做一个项目,老大让我们实现加解密的方法,我把工作直接推给了java服务端,他们也是直接在网上copy的代码,说我直接放到我的android代码中就可以了,不需要太多的更改。我就照做了,但是在...博文来自:HarryWeasley的专栏

  多重背包问题:有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件。怎样装才能使背包内的物品总价值最大?网上关于“多重背包”的资料倒是不少,但是关于怎么实现O(N*...博文来自:flyinghearts的专栏

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

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

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  详细过程见下面的链接: 需要更新的是: 1. 原文中bag 数据的下载地...博文来自:feixin620的博客

  默认maven的本地仓库的位置是在C盘,如果重装了系统,仓库就没了,因此,把仓库位置改到其他盘。     第一步:打开maven安装位置下的conf/settings.xml;   第二步:在第5...博文来自:a24b86的博客

  花了几天,终于把matlab版的人脸检测运行成功了,虽然正确率不是很高,看着各种论文上的人脸检测正确率都出奇的高,我是不怎么相信的,有的论文连基于平均脸的人脸检测正确率都能达到98%,汗啊~~  也许...博文来自:海海人生

  最近在学习大数据,在学习的时候碰到了一个问题就是给CentOS虚拟机配置静态IP后,就无法访问网络了,这个问题纠结了我好长时间,现在终于找到解决方法了,赶紧记录下来,以备以后查询。注: 我这里说的方法...博文来自:u012453843的专栏

  上一篇文章讲解了SNMP的基本架构,本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1、v2c、v3)进行区别! 四、SNMP协议数据单元 在SNMP管理中,管理站(NMS)和代理(Age...博文来自:假装在纽约

  CGLIB介绍与原理(部分节选自网络) 一、什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动...博文来自:zghwaicsdn的专栏

  分页实现的效果:      /**/ 组图0-1.分页实现效果图一       /**/ 组图0-2.分页实现效果图二 一、从效果可以看出内容由两部分组成: 1.学生信息     数据库中插入一些记录...博文来自:niaonao

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

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

相关推荐:

网友评论:

栏目分类

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

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

Top