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

理解极小极大搜索算法

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

  计算机科学中最有趣的事情之一就是编写一个人机博弈的程序。有大量的例子,最出名的是编写一个国际象棋的博弈机器。但不管是什么游戏,程序趋向于遵循一个被称为极小极大的算法,伴随着各种各样的子算法在一块。

  用极小极大算法来分析井字棋,在博弈论中是相当常见的。因此我将谈论一个不一样的游戏,叫做Nim(取物游戏),用来说明极小极大及其一些变形。因为取物游戏容易理解、非常陌生和建模简单,它是有趣的。另外,在取物游戏中没有和局,因此整个输赢情况更加简单:总会有人胜出。但那是谁呢?

  在取物游戏中,玩家面对3堆石子,每堆里分别有5个石子。每个玩家每轮只能在其中一个堆中取走任意数量的石子或整堆。输家是被迫取走最后一个石子的那个,这时3堆石子都被取空了。(换个角度看就是,赢家是第一个面对3堆石子被清空的玩家)

  举个例子,假设我们的两个玩家的名字是Max和Minnie。Max先下(他总是这样,没有绅士风度)并决定取走第一堆的所有石子。然后Minnie从第二堆取走一些石子,只留下两个。Max思考了一会儿,然后从第三堆中取走一些石子,留下了2个。然后Minnie弃权了,因为无论她怎么做,Max都会胜出。(如果她从任一堆取走一个石子,Max取走另一堆的所有石子,留给Minnie的是最后一个石子。如果Minnie取走任一堆的所有石子,Max取走另一堆中的一个石子,留给Minnie的还是最后一个石子。)

  因此,作为一个例子,在井字棋中,根节点是一个空的网格。习惯上X先下,有3种可能的走法:正中、角上和靠边的中间(其他的走法等同于这三个中的一个)。因此,初始的根节点有3个关联的博弈状态。对于O,这些新节点每个都有不同可能的走法,如上面图1总所示。你可以作进一步猜想并绘出更多的层级。

  Nim的博弈树更复杂。初始状态就有15种可能性,对应于3个堆中分别取走1,2,3,4或5个石子。这15种可能的博弈状态的每一个都连接着14种可能的状态(对于第二个玩家来说),如此类推。你可以想象到博弈状态(即博弈树中的节点)的数量在爆炸式地增长。

  如果你碰巧有一张足够大的纸,它将能够绘制出我所描述的Nim的整个博弈树。对于树的叶节点(即没有下线连接的节点),你将能够通过到达特定叶节点的路径(贯穿整棵树)来辨别出博弈的输家。下面的图2展示了一个特别愚蠢的路径(贯穿博弈树),玩家在每个回合中分别取走整堆石子(这绝不是明智的选择,但这是允许的)。Max是输家,因为他在第三步中取走了第三堆的所有石子。

  我们可以赋予每一个叶节点一个值来指出谁胜出(或输了)。为了确保不造成困惑,我们以第一个玩家Max的视角并分配一个货币值。我们设定该路径中胜出的一方获得£1,输了的一方需要支付同等数量的货币给对方——因此,如果赢家是Max,节点的值将是£1,如果赢家是Minnie则值是-£1(因为Max需要支持同等数额给她)。

  让我们想象一下,我们站在Max(先下的玩家)的角度构来建整颗博弈树。每种走法表现为树中的一个节点,你能想象到,每一整层就代表了一个玩家的所有可能走法。因此,树的根节点是Max在一开始所面对的情况:3个堆中分别有5个石子,对Minnie来说有15种可能的走法。在这种情况下Max应该选择哪一个呢?他

  应该做的是自底向上分析所有的可能走法,并给每个节点分配一个值,以他最有可能胜出的节点不断往上选择

  让我们来看一下上面图3中展示的一个捏造的例子。所显示的根节点是Max所需要下棋的位置。有两种可能的选择:走左边,已经知道会获胜;走右边,已知道会输掉(记住,所有支出都是站在Max的立场来看的)。我不知道你会怎样选择,但我会选择第一个,这意味着当前博弈位置的值也为£1。对于每个轮到Max下的博弈位置,Max都会选择最大化其利益的选项。Minnie和Max一样,将会选择对其最有利的选项。因此,她始终是最大化自己的获益,在Max看来就是最小化他的利益。

  如果你拥有整棵博弈树,你就能够自底向上地给每个节点算出一个值。如果是属于Max的节点(即轮到Max走棋),它的值将会是其子节点中的最大值。如果它是属于Minnie的节点,它的值会是其子节点中的最小值。实质上,这就是极小极大算法:构造博弈树,交替地使用最小/最大约束来算出每个节点的值。对先下的玩家(这里是Max)来说,根节点的值就是整个博弈的值。

  相对于构造并分析整棵博弈树,最好的途径是递归遍历博弈树(实际上是一个后缀遍历)并在你需要时计算出所需的数值(同时在你完成时销毁你不需要的杂项)。实质上,由于博弈树被以递归的方式来遍历,所以通过计算各个子树的极小极大的最大(或最小)值来算出极小极大值。记住相邻层级是最大化和最小化相互交替的(或许你会以Minnie的视角来进行观察,而非Max)。

  下面的图4展示了一个简化了的取物游戏(只有一堆的5个石子,每次你可以取走1,2或3个石子)的完整博弈树。每个节点中的数值是走棋后石堆中剩下的石子数,每个节点旁的字母是对于Max的极小极大值(W=win, L=lose)。注意,这里博弈值(根节点的值)是L —— 即Max始终会输掉(如果你愿意,这个简化版的取物游戏的赢家始终是第二个下的那位)。

  尽管极小极大算法始终确保为Max找到最好的走法,但存在一个大问题。博弈树可能很庞大——惊人的庞大。例如国际象棋,一个二人零和博弈的经典原型。每个博弈位置都有30种可能的走法。由于每盘博弈都大约要走80步(40个回合),这意味着树的最底层会有将近10118个节点。(注意,在比赛中很少有被将军的情况——失利的一方会提前放弃。)作为对照,在宏观宇宙中有将近10^8种原子,这意味着,实质上计算机是不可能构造出整个象棋的博弈树的。那我们能做些什么呢?

  第一项优化是在极小极大算法中限制我们对博弈树估算的深度。这么做的话我们可能没有真正地遍历到叶节点,因此我们使用一个逼近函数——启发式的——的近似值作为节点或博弈位置的值。不可避免的,该数值是不精确的,但它能让我们在使用极小极大算法时不必对底层的所有节点进行的估值。启发性能越好,越能发现制胜的棋步,也更接近精确的极小极大值。

  对于极小极大的递归算法,我们需要限制递归的深度而不是让他一直递归到叶节点。最简单的实现方法是将一个深度参数传递给递归的极小极大函数并在每次递归中减少它的值。在最底层的递归,我们使用启发式函数计算出当前博弈位置的极小极大值。

  现在得到的博弈树的根节点的极小极大值仅仅是一个近似值。极小极大算法探索得越深,该值将越精确(因为我们更有机会遍历到叶节点),但会耗费更长的时间。我们计算极小极大值(指导如何走棋)时需要权衡精确度和耗时。

  每当再次轮到我们下棋,对于新的博弈位置,我们需要重新计算它的极小极大值。每步移动都是根据基于当前博弈状态计算出的极小极大值做出的决定。

  在很多运行在标准PC硬件的国际象棋程序中,极小极大搜索的深度被限制在6层左右——包含了十亿个可能的博弈位置。超过这个层数会导致的分析博弈位置的耗时更长,这是不现实的。例如,以1百万/s的比率分析博弈位置,6层的深度需要耗费约一刻钟。

  alpha-beta剪枝是由JohnMcCarthy在1956年的一次会议中首先被提出(尽管该命名是后来的事了)。alpha-beta剪枝是一个用来裁剪掉博弈树某个完整分支的方法,因此这些分支不需要被极小极大进行评估。实质上,算法在极小极大的递归中维护两个额外的值:alpha和beta。alpha是Max的最小值(对Max来说,是其最大损失),beta是Minnie的最大值(对Max来说,是其最大得益)。一开始,alpha的取值为负无穷,beta的取值为正无穷。在极小极大递归的过程中,当极小极大值比alpha更大时,alpha被替换为该值(beta也是一样的,当算出的值比其更小时)。如果它们在某个时刻相交了(即alpha=beta),那么当前查找的分支对于所有玩家都不会带来得益,因此可以被忽略掉,或裁剪掉。这表明算法不会错误地裁剪掉对任何一方玩家有利的分支,因此alpha-beta剪枝被广泛地应用于极小极大的实现中。

  最小-最大搜索BruceMoreland/ 文从浅显的地方开始在国际象棋里,双方棋手都知道每个棋子在哪里,他们轮流走并且可以走任何合理的着法。下棋的目的就是将死对方,或者避免被将死,或者有时争...博文来自:gettogetto的博客

  AI实现的基本思路-极大极小值搜索算法五子棋看起来有各种各样的走法,而实际上把每一步的走法展开,就是一颗巨大的博弈树。在这个树中,从根节点为0开始,奇数层表示电脑可能的走法,偶数层表示玩家可能的走法。...博文来自:言川的博客

  从人落子开始到出现胜负或者和局,之间所落的子,构成了一个解。而解空间就是一个树,解就是这解空间中的一条路径。只不过这个解空间是电脑的选择和人的选择共同构成的(奇数层是电脑(因为轮到电脑落子么),偶数层...博文来自:脚踏实地,仰望星空

  fivechess用到1.极小极大搜索方法   一般应用在博弈搜索中,比如:围棋,五子棋,象棋等。结果有三种可能:胜利、失败和平局。暴力搜索,如果想通过暴力搜索,把最终的结果得到的话,搜索树的深度太大...博文来自:tianzhijiaozi19的专栏

  探讨一下难度较大的棋类游戏程序,比如国际象棋和西洋跳棋等等。用这些程序来同人或其他程序对弈。然而,有些程序是把计算机精心设计成一个棋盘,人们可以在其上对弈(或者是一种单人玩的棋盘游戏)。这种程序更接近...博文来自:logarrow的专栏

  对弈类游戏的人工智能(3)--博弈树优化前言:对弈类游戏的智能算法,网上资料颇多,大同小异.然而书...博文来自:zdy0_2004的专栏

  原文链接: 总结两点:1.深度优先搜索,只有在叶子节点计算评估分。2.max和min层只负责从分支中,...博文来自:大熊熊的专栏

  问题描述试题编号:201803-4试题名称:棋局评估时间限制:1.0s内存限制:256.0MB问题描述:问题描述Alice和Bob正在玩井字棋游戏。井字棋游戏的规则很简单:两人轮流往3*3的棋...博文来自:姬小野的博客

  计算机博弈(也称机器博弈),是一个挑战无穷、生机勃勃的研究领域,是人工智能领域的重要研究方向,是机器智能、兵棋推演、智能决策系统等人工智能领域的重要科研基础。机器博弈被认为是人工智能领域最具挑战性的研...博文来自:的博客

  极小极大的定义Minimax算法又名极小化极大算法,是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益)。通常以递归形式来实现。Minimax算法常用于棋类等由两方较量的游戏和程序。该...博文来自:Weirenren_027的专栏

  由来最近人工智能很火,经常有各种新闻,作为一个程序员多少要懂一点吧,未来万一用得着呢。有心想去了解一下,奈何能力有限,皮毛都没学会。好吧,既然没法系统学,就不管那么多,就从现在开始动手,一步一步的往前...博文来自:feifei316631241的博客

  此图知识背景是囚徒困境,其中蓝色代表背叛者,红色代表合作者。其实就是将200X200个格子上的,每个个体的策略显示出来。所以在输出结果的时候,需要将结果按照类似矩阵的形式存储下来,比如每行存200个数...博文来自:BD的笔记

  对人工智能中“极大极小值”的博弈算法的资料整理。博文来自:dale13的博客

  极大极小搜索策略一般都是使用在一些博弈类的游戏之中:这样策略本质上使用的是深度搜索策略,所以一般可以使用递归的方法来实现。在搜索过程中,对本方有利的搜索点上应该取极大值,而对本方不利的搜索点上应该取极...博文来自:如果这是你所爱的,要坚持,并踏实。

  1.极小极大搜索方法   一般应用在博弈搜索中,比如:围棋,五子棋,象棋等。结果有三种可能:胜利、失败和平局。暴力搜索,如果想通过暴力搜索,把最终的结果得到的话,搜索树的深度太大了,机器不能满足,一般...博文来自:Allure Love的博客

  以前的写五子棋AI太弱了,所以就开始研究博弈树 alpha beta剪枝,但是成效不佳,虽然找到了代码,但是算法核心没懂。求大神帮我看下,随便整理个文档发我邮箱下,谢谢,感激不尽 1095222570论坛

  由于搜索的复杂度有点高,所以在树上减少计算量肯定是剪枝了,这里我们把剪枝的办法称作的:α-β剪枝    我们在前面的文章中谈到,当第一次运作的是A,则所有的奇数深度的节点都是A做的选择,所有偶数深度的...博文来自:水野与小太郎的博客

  写了搜索算法以后,评估函数跟不上,还是太弱了,快没时间了,请帮忙给个评估函数(就当前局面),最好使用C或C++描述的 谢谢!论坛

  极小极大算法(TheMinimaxAlgorithm)[说明] 本文基于 , 本文中的图片均来源于此笔记。极小极大算法常用于二人博弈游戏,目的是寻找最优的方案使得自己能够利益最大化。基本思想就是假设...博文来自:housong_csdn的博客

  花了一周的时间好不容易做出的课程设计~因为是喜欢秦时明月的关系,所以就叫墨攻棋阵啦!还有那么好看的背景,本文介绍黑白棋AI中算法的设计,另附资源:墨攻棋阵源码...博文来自:小坏蛋_千千

  博弈树的搜索是人工智能领域一个重要的研究课题.许多完全信息的二人零和博弈问题都可以用博弈树搜索算法解决。那么什么是二人零和博弈问题呢?有一系列的博弈问题拥有以下性质[1]:1.有两个对抗者:对抗者1和...博文来自:李希的博客

  博弈算法一共分为以下4种1、NimmBoYi尼姆博弈/*  尼姆博弈指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,   每一次只能从一堆物品中取部分或全部物品,最少...博文来自:冷兮Coding

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

  一、博弈概述博弈特点:(1)博弈的初始格局是初始节点(2)在博弈树中,“或”和“与”是交替出现的。自己一方的扩展节点是“或”关系,对方扩展的节点是“与”关系。双方轮流扩展节点。(3)所有自己一方获胜的...博文来自:水野与小太郎的博客

  2008年11月15日星期六11:03      这篇文章将介绍一种对于所有的GameAI(游戏智能)开发来说都非常重要的数据结构。对于几乎每一个棋类博弈游戏程序来说,极大极小树(theminima...博文来自:zhp818的专栏

  在博弈树的极大极小过程中是对每一个树节点(称它为全局搜索吧)都要计算其估值,然后在这些估值中做出选择。如果搜索比较大的话,全局搜索的方式效率会非常低,因为有一些节点根本不需要搜索。那么怎么加快搜索...博文来自:xyh_Adolph的专栏

  参考书籍《人工智能基础教程》该算法的搜索策略是考虑双方若干步之后,从可能的步中选择相对较好的走发来走。以MAX表示程序方,MIN表示对手方,P表示局势,f(P)是根据当前局势做出的估计函数。则F(p)...博文来自:Elliebababa的博客

  想请教一下,五子棋中用极大极小搜索下一步,不晓得我理解的对不对... 比如考虑双方各一步,那么搜索树应该有3层,第一层为根节点,第二层表示电脑所有的走法,第三层表示对应的人的可能的走法,现在该电脑走棋论坛

  关于极大极小算法和alpha-beta剪枝可以参考文章的参考资料,这里仅对其进行代码实现。其实这个算法单纯的理解并不容易,下面用代码进行实现。说一下实现这个AI井字棋的思路:简单的来说就是计算机希望估...博文来自:yqtao的博客

  我是在的2008年第17周的RoundUp里看到这篇文章的推荐的,出于自己对中国象棋及其计算机博弈方面的兴趣,虽然对于围棋和围棋AI一窃不通,但还是挺仔细地阅读了这篇文章...博文来自:赖勇浩的编程私伙局

  象棋蛮力搜索算法最基本的就是极大极小搜索,这种方法适用于所有双方都可看到局面的棋,比如象棋、围棋、五子棋,不适用于扑克、麻将等看不到对方牌的游戏。算法的原理是每一方走子都为了让自己局面最优。对于中国象...博文来自:buck84的专栏

  最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射...博文来自:Babosa的专栏

  对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 请看一下这个类都有哪些功能:   ...博文来自:李坤 大米时代 第五期

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

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

  练习1:实现 first-fit 连续物理内存分配算法 在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来...博文来自:cs_assult的专栏

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

  webService学习(二)—— 调用自定义对象参数 本文主要内容: 1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了...博文来自:止水的专栏

  SSH是一种以安全、加密方式连接远程主机或服务器的方法。SSH服务器接受从有SSH的客户机的连接,允许操作者象在本地一样地登录系统。你可以用SSH从远程运行shell和X程序。它是一种服务器维护管理的...博文来自:天涯路的专栏

  概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自...博文来自:一个本科小生的奋斗史

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

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  本文的目的是用C实现生成Gabor模版,并对图像卷积。并简单提一下,Gabor滤波器在纹理特征提取上的应用。 一、什么是Gabor函数(以下内容含部分翻译自维基百科)   在图像处理中,Gabor...博文来自:Where there is life, there is hope

  Weka为一个Java基础上的机器学习工具,上手简单,并提供图形化界面,提供如分类、聚类、频繁项挖掘等工具,本篇文章主要写一下分类器算法中的J48算法及其实现。 一、算法 J4...博文来自:路远,漫步前行

  目前市场上比较多的应用在用户卸载后会弹出意见反馈界面,比如360手机卫士,腾讯手机管家,应用宝等等,虽然本人不太认同其交互方式,但是在技术实现上还是可以稍微研究下的。其实要实现这个功能,最主要的就是监...博文

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

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

  我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思...博文来自:沉默的鲨鱼的专栏

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

  使用taocode作为SVN的服务器,地址在网站上注册和登录 新建一个项目 输入相关信息 复制这个地址,一会要用 下一步在MyEclipse中向SV...博文来自:weiyi556的博客

  以下从Java角度解释面试常见的算法和数据结构:字符串,链表,树,图,排序,递归 vs. 迭代,动态规划,位操作,概率问题,排列组合,以及一些需要寻找规律的题目。 1. 字符串和数组 字符...博文来自:DUANJIEFEI的专栏

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

  一、概述最近在springboot项目引入thymeleaf模板时,使用非严格标签时,运行会报错。默认thymeleaf模板对html5标签是严格检查的。二、在项目中加NekoHTML库在Maven中...博文来自:Luck_ZZ的博客

  一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托...博文来自:小小本科生成长之路

  第五 添加数据库管理员数据与用户数据 这个比较无聊 用java拼接了一下sql语句 然后写入数据库 这个放在附件上传就好了 第六 管理员与用户的登入验证 1、验证码。验证码一般就是...博文来自:得之我幸--失之我命

  花了一天!因为要用Keil,又苦于主题不好看,一个个换主题又嫌麻烦,就写了这个东西。代码有点多,先放出配置步骤,源码在文末。V1.0,没有图片预览功能,但是随插件附赠几个类似VS的配色方案。 本是按...博文来自:Q1275918492

  :大哥 用你的配置晚间3个orderer容器喝cli容器启动完自动exit 是为什么啊

  ccf19881030:这个方法可行,原来是需要弹出虚拟光驱挂载的文件。

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

相关推荐:

网友评论:

栏目分类

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

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

Top