【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法

  人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏(如国际象棋)。术语中,这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动,在游戏结束时效用值总是相等并且符号相反。例如下国际象棋,一个棋手贏了,则对手一定是输了。正是 Agent 之间效用函数的对立导致了环境是对抗的。

博弈的游戏通常被 AI 作为一个好的问题来进行研究主要是因为:

  • 玩家需要向人一样的智慧
  • 游戏可能非常复杂(如象棋、围棋)
  • 需要在一定的时间限制内做出决策
  • 游戏是容易被定义的而且可以重复
  • 游戏完全可观察并且有有限的环境
  • 可以直接将人与AI进行比较

以井字棋为例我们可以得到下面的博弈树:
在这里插入图片描述
  通过以上博弈树可以得知游戏的终止会有两种结果MAX得到+1,MIN就会是-1,MAX是-1,MIN就会是+1,也就是一名玩家最大化结果,另一名玩家的结果就会最小。

  假设两个玩家(MAX为计算机、MIN为其对手)都发挥最佳效果,那么在计算机移动后,对手将选择最小化(但对于对手来说是最有利的操作)的移动,由此可得计算机应在考虑其移动和对手的最佳移动的情况下选择最佳移动,如下图所示:
在这里插入图片描述

  如上图所示计算机在根节点有四种选择方式,每种选择之后其对手又有不同种选择方式,在其对手选择完成后就会进入终止状态产生结果,计算机 (MAX) 为确保自己所获利益最大,应当选择B、C、D、E中最大的值,因为对手 (MIN) 总会选择对自己最有利的决策,所以B值的由来是F、G中的最小值、C的由来是H、I、J的最小值,由此就可以得到了极小极大值的算法,极小代表的是在计算机 (MAX) 决策后其对手 (MIN) 总会选择对于计算机 (MAX) 来说获利最小的操作,极大值代表的是计算机 (MAX) 需要在所有的决策中(所有的极小值中),选择最大的值,通过以上分析可得运用递归的方法是比较容易实现以上操作的,具体伪代码如下:

function MINIMAX_DECISION(state) returns an actioninputs: state,current state in gamereturn the a in Actions(state) maximizing MIN-VALUE(RESULT(a,state))function MAX-VALUE(state) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v = -for a,s in SUCCESSORS(state) do v = MAX(v,MIN-VALUE(s))function MIN-VALUE(state) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v =for a,s in SUCCESSORS(state) do v = MIN(v,MAX-VALUE(s))

  从如上代码中可以得到 MAX-VALUE 函数与 MIN-VALUE 函数相互调用,通过深度优先搜索与逆向的归纳实现了极小极大值算法流程。

2. α-β剪枝

假设有如下博弈搜索树:
在这里插入图片描述
其正常的深搜顺序如下所示:
在这里插入图片描述
但根据极小极大值算法来看,我们发现有些搜索是没有必要进行的,请看以下分析:
在这里插入图片描述
  查看上图得知,MAX已完成了对第一个子节点的搜索,此时 MAX 在未搜索到其它节点的情况下的选择应该是大于等于3的 (目前所得到的极小极大值为3)。
在这里插入图片描述
  继续对第二个子节点进行搜索,但在第二个子节点的孩子节点搜到 2 时,我们就得知第二个子节点的值只会 ≤2 ,比第一个节点的值要小,因为我们要在所有子结点中选择最大值,因此在搜完第二个子节点的 2 节点之后,第二个子节点的孩子节点就没有搜索的必要了。
在这里插入图片描述
  但如果在搜索第三个节点时搜索到了值为 14 的节点,剩余的节点是还要继续搜索的,因为我们不知道第三个子节点的最小孩子节点是多少,所以需要继续搜索。
  以上过程只是展示了 MAX 在搜索中的剪枝过程,同理我们也可以得到 MIN在搜索时,也可以利用同样的优化方案,此时我们就可以得到 α-β 剪枝的伪代码:

function ALPHA-BETA-SEARCH(state) returns an actionv = MAX-VALUE(state,-∞,+)return the action in ACTIONS(state) with value vfunction MAX-VALUE(state,α,β) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v = -for each a in ACTIONS(state) dov = MAX(v,MIN-VALUE(RESULT(s,a),α,β))if v ≥ β then return= MAX(α,v)return vfunction MIN-VALUE(state,α,β) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v = +for each a in ACTIONS(state) dov = MIN(v,MAX-VALUE(RESULT(s,a),α,β))if v ≤ α then return= MIN(β,v)return v

  其中 α 表示到目前为止路径上发现的 MAX 的最佳 (即极大值) 选择,β表示到目前为止路径上发现的 MIN 的最佳 (即极小值) 选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 进阶(十九):解析命令行参数(argparse 模块)

大家好,我是水滴~~ 当处理命令行参数时,Python 的 argparse 模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令,并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse 模块的使用方法和常见…

Ansys电力变压器解决方案

电力变压器设计挑战 目前面临的挑战: 1、磁场 • 非线性材料 • 涡流电流 • 磁场随时间的变化 • 瞬态激励源下的磁场变化 • 空间磁场分布 2、电场 • 介电常数的变化 • 电极的尺寸和形状 • 空间电场分布 变压器的两个类别 变压器可以分为两类进行F…

springboot项目中引入Xxl-Job并部署和使用

目录 模块划分 配置调度中心 配置执行器 添加执行器 写一个简单的定时任务 XxlJobHelper xxl-job是分布式任务调度平台,部署为独立的调度服务平台 github地址:xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度…

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中,水印常常成为我们的一大难题。它不仅影响了视频的美观度,还可能涉及版权问题。那么,如何高效去除视频中的水印呢?接下来,我将为大家推荐三款国内外备受好评的视频去水印工具:水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头,直接写你要用的数据就行了,多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

让《行列视》解放数据力量,提升业务洞察

在当今信息化浪潮下,数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据,已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器,正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…

RabbitMQ基础入门

初识MQ 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题: 1.有效的括号 题目: 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合…

560. 和为 K 的子数组 974. 和可被 K 整除的子数组 【前缀和】

题目链接 ​​​​​​​974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候,刷了这两题,感觉挺有意思的。代码写起来挺简单的,但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波,也是…

一个月速刷leetcodeHOT100 day02

今天的三道题 移动零 在双指针分组里的简单题 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0…

Python自动化下载指定公开页面文件

示例代码如下,但你拿到本地之需要做两件事才能运行 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time# 设置Se…

计算机组成原理(超详解!!) 第七节 中央处理器(上)

1.CPU的功能和组成 CPU的功能: 指令控制:程序的顺序控制。 操作控制:管理并产生每条指令的操作信号,并把它们送到相应部件,控制这些部件按要求进行动作。 时间控制:对各种操作实施…

MySQL表分区深入指南

MySQL的表分区功能允许将一个表的数据分散存储在多个物理子表中,但在逻辑上仍表现为一个单独的表。这可以帮助提高大型数据库表的查询和维护效率。本文将详细介绍如何在MySQL中实施和管理表分区,包括分区类型、创建分区表的步骤,以及分区表的…

Day_3

1. HttpClient HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包 作用&#xff1a;发送HTTP请求&#xff0c; 接受相应数据 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>…

ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sudo c…

controlnet的preprocessor类型

GitHub - huggingface/controlnet_auxContribute to huggingface/controlnet_aux development by creating an account on GitHub.https://github.com/huggingface/controlnet_aux/https://huggingface.co/lllyasviel/sd_control_collection

js中日期Date的使用

日常搬砖过程中,凡事使用到Date总是一知半解,每次都要查阅资料,今天有时间把这里整理一下,希望今天储备的知识,够以后使用就不用查阅资料了哈,现在开始吧 new Date() 使用它可以创建一个日期实例,并返回代表当前时间的字符串 接收参数有5种形式 无参数,新创建的 Date 对象代…

Qt绘制箭头

Qt绘制箭头 接收两个点作为向量的两端&#xff0c;用来确定箭头方向&#xff0c;额外添加参数&#xff0c;确定箭头是否和向量一致 然后使用fillPath填充箭头 QPainterPath arrowPath(const QPointF& p1, const QPointF& p2, int direct 0, int endIndex 0, int ar…

智慧监控 高效运维

随着企业IT建设的不断深入和完善&#xff0c;IT管理的重要性逐渐被重视&#xff0c;打通数据割裂&#xff0c;使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台&#xff0c;不仅适用于大规模或超大规模的运维场景&#x…

量化交易的优势和QMT、Ptrade开通流程

量化交易没有一个精确的定义&#xff0c;广义上可以认为&#xff0c;凡是借助于数学模型和计算机实现的交易方法都可以称为量化交易。 量化交易的基本原理是通过计算机方法对海量的股票市场历史数据进行分析&#xff0c;总结出一些能够带来持续收益的交易因子。根据这些因子编…