极大极小树

2023-10-26

博弈树作为传统AI领域的一个传统又经典的算法,有着广泛的应用,尤其是棋类AI。记得曾经刚学C语言的时候,用控制台写了一个五子棋的程序。后来突发奇想,给它增加可以人机对战的AI,设计了一个简单的根据当前局面判断最优落子的AI。但是只能想到两手棋。为了提高AI的智商,学习了博弈树这个数据结构,现在给大家分享一下。

一、背景

本文拿棋类游戏的AI设计作为背景,详细介绍AI的设计过程,引入一种叫做博弈树的数据结构,以及α-β剪枝在博弈树它上面的应用。

博弈树主要应用在涉及双方互相博弈、对抗的游戏中。既然在游戏AI里面应用广泛,接下来我们结合具体游戏,来介绍。

二、极大极小树(Min-Max Tree)

首先介绍一个基本的数据结构,叫做极大极小树(Min-Max Tree)

在设计对抗AI的游戏过程中,通常假设双方都是智商顶级的高手。因此,默认敌我双方都能够根据当前的局面,做出对自己一方最有利的决策。

然而,博弈通常是双方对抗,甚至是零和的博弈。也就是说,对对方最有利的决策,反过来就是对我方最不利的局面。在轮到我们做出决策的时候,我们通常希望最大化我们的收益,叫做极大层,此时树的节点叫做极大层节点;在对手做决策的时候,对手希望最小化我们的收益,叫做极小层,此时树的节点叫做极小层节点。由于双方是交替做出决策,因此极大层、极小层通常是交替出现,这样的数据结构就叫做极大极小树(Min-Max Tree)

假设我们已经有一个评价每种决策的收益的估值函数。对于极大层节点,如果我们知道了它的每一步决策的收益值,那么它总是会选择收益最大的那个决策,作为它的节点的收益值;反过来,对于极小层节点,它总是会选择收益最小的(对我方收益最小,就是对方收益最大)那个决策。

举个最简单的例子,分硬币游戏。

游戏规则是:一堆硬币,双方轮流将它分成大小不能相等的两堆,然后下一个人挑选任意一堆继续分下去,双方交替游戏,直到其中一个人无法继续分下去,则对方获得胜利。

假设我们刚开始有一堆7枚硬币,轮到我方先分。我需要找到我当前应该怎么样分这堆硬币。或者说,需要找到当前能够获得最优收益的决策,我们通过构造出一棵极大极小树来做到。

首先,我们穷举所有的可能的状态。用矩形代表轮到我方做决策的极大层节点,用圆形代表轮到对方做决策的极小层节点,列举出所有的状态:

注意,到这里我们还没有进行估值 ,因此这还不算是极大极小树。下面我们来设计这个游戏的估值函数,很简单,如果当前局面,我们已经赢了,那么收益为+1,如果我们输掉了,那么收益为-1,这个游戏没有平局,所以只可能有这两种收益值。

刚开始估值的时候,我们还位于根节点,我们对于整棵树是一无所知的,就像下面这样:

我们想要获得根节点的估值,需要对根节点的子节点进行遍历,首先对第一个子节点进行遍历,发现还是不能判断它的值,继续遍历(深度优先)它的子节点,直到到达叶子节点:

 

到了叶子节点,我们可以对它进行估值了,因为此时是极小层,需要对手进行决策,但是对手已经无法再继续分下去了。所以,它的收益值为+1:

 

这样获得了第一个叶子节点的估值,由于它的父节点只有唯一一个子节点,因此父节点的收益值也只能是+1,然后可以一直回溯上去,直到到达红色的节点

 

此时,我们不能直接给红色节点赋值了,因为它还有别的子节点,我们继续遍历它的子节点:

 

遍历到又一个叶子节点,发现它的收益是-1(我方失败),再回溯回去:

 

现在我们又回到了红色节点,现在它的所有子节点的收益值都已经获得了。注意,这个节点是一个极大层节点。我们说过,极大层节点总是会选择收益最大的子节点,它的子节点一个是+1一个是-1,因此,它的值应该是最大的那个+1。我们继续按照深度优先的顺序遍历:

 

 

到这里,当前红色的节点是一个极小层节点,它总是选择收益最小的决策,因此它的收益值是-1。 接下来,我们继续按照这个思路进行遍历,中间的过程我就省略了,最后的结果如下所示:、

 

到这里,我们的极大极小树已经构建完成了。

我们发现,当前的根节点的收益值居然是-1,也就是说,只要对方够聪明,我们无论如何都无法取胜。

这就很绝望了,但是仔细想想,我们假设的前提是,对方是聪明绝顶,不犯错误的高手。

我们知道无论如何都会失败,那可不可以赌对方会犯错呢。

这样一想,其实3种必败的决策还是有一定的优劣性的。比如,最右边那个子节点,它的所有子树跟子树的子树收益都是-1,也就是说,对方就算乱下,我们都必输;而中间跟左边那个子节点,如果对手下错了,还有一一定几率能够通往+1的叶子节点的。因此,左边两个决策要比最右边的决策要相对好那么一点儿。因此,在发现我们已经必败的时候,依然能够在决策中做一个取舍,选择败得不明显的那种决策。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

极大极小树 的相关文章

随机推荐

  • 树(Tree)——(五)搜索二叉树的节点删除和销毁

    目录 节点删除的三种情况 第一种情况 第二种情况 第三种情况 代码实现 main函数 节点删除的三种情况 节点删除总共分成三种情况 第一种情况 若为叶子节点则直接删除 如左图节点1 3 8或者右图的1 4 8 若为单独一个根叶子要单独处理
  • WaveDrom 使用指南

    原文链接 WaveDrom 使用指南
  • Seventh season fifteenth episode,Joey got a new brain??????

    Scene Monica and Chandler s Monica Chandler Ross and Rachel are sitting around the table Monica I m glad you re here we
  • VMWARE修改CPUID

    在cmd shell下执行wmic cpu get ProcessorId命令 可是查看机器的cpuID 但这个命令显示的只是2组ID 实际CPUID 有4组 通过更改虚拟机配置文件 vmx可是实现任意cpu序列号的指定 而且重启虚拟机后c
  • html怎么在网页中加滚动条,在html中如何加滚动条?滚动条的用法!

    随着经济和科技的发展 互联网的大趋势造就了很大的就业机会 而且在我们日常的生活中大家多多少少会去浏览一些网站和网页吧 那么今天呀 我们就来说说在html中如何加滚动条 和一些有关于滚动条的用法 的经验分享 1 首先我们打开我们的前端的开发工
  • Docker安装Elasticsearch的遇到的那些坑

    1 根据百度到的一篇文章 https segmentfault com a 1190000004376504下载其最新镜像 hangxin1940 docker elasticsearch cn v2 1 0 使用 docker run d
  • 工作笔记-关于安卓和ios兼容遇到的问题

    工作笔记 关于安卓和ios兼容 一 移动端开发 客户端的键盘bug 现象 当用户点击卡面的按钮 弹出密码验证框和客户端键盘 此时点击验证框的按钮 ios的弹窗和键盘消失 然而并无其他事发生 bug定位 安卓功能完好 ios出现 所以采用打印
  • Spring Boot + Vue的网上商城之客服系统实现

    Spring Boot Vue的网上商城之客服系统实现 在网上商城中 客服系统是非常重要的一部分 它能够为用户提供及时的咨询和解答问题的服务 本文将介绍如何使用Spring Boot和Vue js构建一个简单的网上商城客服系统 思路 在本教
  • 编程猫编程平台的使用介绍

    编程猫编程平台的使用介绍 编程猫是由深圳点猫科技有限公司自主研发的国内知名青少年编程教育平台 通过图形化编程 可以创作出游戏 软件 动画 故事等 编程猫编程平台的使用介绍 cnds123的专栏 CSDN博客
  • ChatGPT专业应用:小红书文案生成

    正文共 1263 字 阅读大约需要 5 分钟 内容运营 社媒运营必备技巧 您将在5分钟后获得以下超能力 快速撰写小红书文案 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 nanako 编辑者 Linda 此
  • 使用unixODBC并发连接mysql数据库频繁SIGSEGV及SIGABRT崩溃

    使用unixODBC并发连接mysql数据库频繁SIGSEGV及SIGABRT崩溃 2013 05 18 15 18 19 分类 UnixODBC 标签 unixodbc 举报 字号 订阅 下载LOFTER 我的照片书 这几周在测试自己写的
  • 编译XT720 gingerbread

    在android根目录下执行 build envsetup sh 然后执行lunch 选择你要的套餐 然后直接make 编译中有3处错误 1 packages apps CMStats Android mk中 把LOCAL STATIC J
  • [数值计算-3]:误差的种类、误差传播、误差分析

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119790035 目录 第1章
  • 华为校招机试题- 新员工座位安排系统-2023年

    题目描述 工位由序列F1 F2 Fn组成 Fi值为0 1或2 其中0代表空置 1代表有人 2代表障碍物 1 某一空位的友好度为左右连续老员工数之和 2 为方便新员工学习求助 优先安排友好度高的空位 给出工位序列 求所有空位中友好度的最大值
  • 统计学习方法 例7.1 超详细求解过程

    例7 1 已知一个如图所示的训练数据集 其正例点是 x 1 3 3
  • C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

    本实例全部文章目录 一 功能概览 二 创建项目 注册热键 显示截图主窗口 三 托盘图标及菜单的实现 四 基本截图功能实现 五 针对拖拽时闪烁卡顿现象的优化 六 添加配置管理功能 七 添加放大镜的功能 八 添加键盘操作截图的功能 九 使用自定
  • HashMap实现原理, 扩容机制,面试题和总结

    文章目录 1 讲下对HashMap的认识 2 HashMap的一些参数 3 为什么HashMap的长度必须是2的n次幂 4 HashMap 为什么在获取 hash 值时要进行位运算 5 HashMap在JDK1 7和JDK1 8中有哪些不同
  • PHP实现读取指定目录下的所有文件

    在php中读取指定目录下的文件主要用到了opendir和readdir函数 一 opendir 打开目录句柄 1 语法 opendir path context 2 参数说明 参数 描述 path 必需 规定要打开的目录路径 context
  • 【傻瓜向装系统】电脑重装&&加固态硬盘

    市面上大部分PE制作工具都会在操作系统中内嵌广告或软件等 慎重使用 重装 顺序步骤 重要数据备份 备份到移动硬盘或其他设备 格式化U盘 至少8G 准备作为系统启动盘 安装PE制作工具 如老毛桃等 制作启动盘 下载对应操作系统放到U盘中 某个
  • 极大极小树

    博弈树作为传统AI领域的一个传统又经典的算法 有着广泛的应用 尤其是棋类AI 记得曾经刚学C语言的时候 用控制台写了一个五子棋的程序 后来突发奇想 给它增加可以人机对战的AI 设计了一个简单的根据当前局面判断最优落子的AI 但是只能想到两手