人工智能算法模型--Minimax(极大极小)搜索算法学习笔记

news2024/11/23 23:48:48

 ⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜

✏️write in front✏️
📝个人主页:陈丹宇jmu
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
🙉联系作者🙈by QQ:813942269🐧
🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事顺意🏳️‍🌈
✉️少年不惧岁月长,彼方尚有荣光在 🏆


⬜⬜⬜ ---🟧🟨🟩🟦🟪前言🟧🟨🟩🟦🟪---⬜⬜⬜


极小化极大算法是基于决策树和搜索的智能系统中的典型算法,可用于指导井字棋、黑白棋、五子棋等经典完全信息零和博弈。虽在学生时代学习过极小化极大算法,但时过境迁,思量该算法的来龙去脉已然如雾里探花水中望月。近来自学人工智能算法,恰好又一次接触到了该算法,也算与其有缘,理应将其悉数记下。下文将以井字棋为例详细说明该算法原理。
 

🚩本篇主要内容


Minimax算法(极大极小算法)

  1. 学习和掌握Minimax算法的实现原理
  2. Minimax算法的描述
  3. Minimax算法的实例演示过程

📋笔记目录

🚩本篇主要内容

📒一. Minimax搜索算法

⏳1.1. Minimax算法原理

⏳1.2. Minimax算法描述

📍1.2.1. 构造:

📍1.2.2. 判定:

⏳1.3. Minimax算法演示

🚩后记


📒一. Minimax搜索算法


⏳1.1. Minimax算法原理

极大极小(Minimax)搜索算法是指在零和博弈中,玩家均会在可选的选项中选择将其N步后优势最大化或者令对手优势最小化的选择。

将双方决策过程视作一颗决策树,若决策树某一层均为己方决策依据状态(即接下来是己方进行动作),则己方必定会选择使得己方收益最大化的路径,将该层称为MAX层。若决策树某一层均为对手决策依据状态(即接下来是对手进行动作),则对手必定会选择使得己方收益最小化的路径,将该层成为MIN层。

由此,一个极小化极大决策树将包含max节点(MAX层中的节点)、min节点(MIN层中的节点)和终止节点(博弈终止状态节点或N步时的状态节点)。每个节点对应的预期收益成为该节点的minimax值。

对于终止结点, minimax值等于直接对局面的估值。对于max结点,由于max节点所选择的动作将会由己方给定,因此选择minimax值最大的子结点的值作为max结点的值。对于min结点,则选择minimax值最小的子结点的值作为min结点的值。

⏳1.2. Minimax算法描述

📍1.2.1. 构造:

1,构建决策树;

2,将评估函数应用于叶子结点;

3,自底向上计算每个结点的minimax值;

4,从根结点选择minimax值最大的分支,作为行动策略。

📍1.2.2. 判定:

1,如果节点是终止节点:应用估值函数求值;

2,如果节点是max节点:找到每个子节点的值,将其中最大的子节点值作为该节点的值;

3,如果节点时min节点:找到每个子节点的值,将其中最小的子节点值作为该节点的值。

⏳1.3. Minimax算法演示

以相对容易分析的井字棋游戏的博弈过程分析Minimax算法的搜索过程。

如图所示,假设玩家X可在井字棋游戏中向下思考3步,则其必定会选择3步后优势最大的落子策略。构建3层决策树如下,对于每一个叶结点,可运用上述估值函数得到叶结点对应局面的估值。

由于叶结点所在层的上一层到叶结点层的动作由玩家X作出,因此叶结点层上一层为MAX层。玩家X会选择使得己方局面最佳的落子方法,因此MAX层的节点的minimax值应该为下一层中最大的值。

同时,MIN层到MAX层的动作由玩家X的对手作出,因此MIN层的节点的minimax值应该为下一层中的最小值。

Minimax算法搜索过程

对于每一个叶结点,其minimax值可根据估值函数得出。对应每一个max节点或min节点,其值可根据上述规则得出。由此,可以得到整个决策树。

作出决策的目的是是的己方N步后的局面最佳,因此,从根结点选择minimax值最大的分支,作为行动策略。

🚩后记


最小化最大算法构造决策树,并自底向上计算每个节点的minimax值,最终从根结点选择minimax值最大的分支,作为行动策略。
当一个零和博弈双方每一步可选动作数量较多时,决策树会变得非常庞大,因此构造决策树,并对其进行遍历,求取每个minimax值将会非常耗时。
在决策树的构建与搜索过程中,存在一些不必要搜索的节点。如果不展开不必要搜索的节点,将会极大的节省搜索时间。
下文将讲解极小化极大算法的优化版本——AlphaBeta剪枝算法。

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

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

相关文章

基于MicroPython的ESP32在OLED上实时刷新温湿度

基于MicroPython的ESP32用起来后,做些小扩展功能: 1、通过DHT11获取温湿度; 2、将获取的温湿度显示在OLED上;并通过定时器,定时刷新; 3、OLED可显示中文; 一、DHT11获取温湿度 这个比较简单&a…

Java泛型详细内容讲解

1.什么是泛型 1.1背景: JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引…

mysql中的实现字段或字符串拼接的三种方式

一、CONCAT函数concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。concat函数官方介绍-- CONCAT函数的语法如下: CONCAT(str1,str2,...)1.1、拼接非空字段或字符串SELECT CONCAT(字段1,字段2,字段3,...) from 表名;-- 拼接表…

C#构建Web服务项目实战(一)

概述本文通过VS2017,利用C#语言构建一个Web应用项目(旧的ASP.NETWeb应用,非微软最新的.NETCore),并演示了如何利用Windows的IIS服务发布项目(网站),以及在发布项目(允许用…

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)一、实验目的二、 实验内容2.3、计算存款利息三、 实验步骤3.3、顺序程序设计实验题目3:计算存款利息的实验步骤3.3.1、变量的声明3.3.2、变量的赋值3.3.3、计算…

递归分治时间复杂度主定理法

记录一下以前博客的证明过程,补充一下之前的结论 在算法导论中lgn一般指2为底的对数n,特此说明 以前写的博客记录了一下分治递归时间复杂度的结论,发现少了一个正则条件,而且也不覆盖所有的一般情况 https://blog.csdn.net/qq_1…

乌鸦安全2022年度文章合集

说明 乌鸦安全2022年精选原创文章合集,基本上大部分都是原创,当然还有一部分文章由其他师傅投稿提供,在此感谢各位师傅的投稿和帮助! 乌鸦安全2021年度文章合集 你可以在这里找到我: GitHub:https://gi…

开源的工作流都有哪些特征?

开源的工作流是什么?都有什么样的特征和优势特点?众所周知,随着现代化办公管理的兴起,工作效率高的低代码开发平台涌上前线,成为很多企业实现数字化转型和做好数据管理的重要系统。这篇文章主要是围绕开源的工作流方面…

记一次2022某地HVV中的逆向分析

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 前言 事情是这样的,国庆前期某地HVV,所以接到了客户通知他们收到了钓鱼邮件想要溯源 直接下载…

云视频会议系统私有化实践

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按:云视频会议系统支持多服务器动态集群部署,并提供多台高性能服务器,大大提升了会议稳定性、安全性、可用性。视频会议为用户大幅提高沟…

(Java高级教程)第三章Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层

文章目录一:生活中的协议分层(1)生活中的分层1——汉堡包(2)生活中的分层2——打电话二:网络分层(1)OSI七层模型(2)TCP/IP分层模型三:OSI参考模型…

前端基础(六)_流程控制语句(if、if-else、if-else嵌套、switch)

流程控制语句主要分为 : 顺序结构:即按顺序执行代码 ;条件选择结构 ( 分支语句 ):包括 if-else 以及 switch;循环结构:包括 for循环,while,do-while,for-in 等;其他语句: break 和continue。 一、流程控制…

Java学习(23)Java一维数组概述

什么是数组 数组是相同类型的数据按顺序组成的一种引用数据类型。 数据类型分为基本数据类型和引用数据类型,引用数据类型分为类、接口、数组。要学习的内容 一维数组的声明、创建、初始化、元素的引用、长度。数组声明 语法格式: 数据类型[] 数组名; 数…

卡尔曼滤波原理公式详细推导过程[包括引出]

卡尔曼滤波在很多项目中都有用到,但是对于原理却很少有详细分析,而只是直接应用,在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结,将从最初的递归算法,利用数据融合,协方差矩阵&#x…

[vp] 2021 山东省赛 CDGHM

目录前言G. Grade Point Average ( 难度有先后)M. Matrix ProblemH. Adventurers GuildD.Dyson BoxC. Cat Virus前言 打满 2个小时30分钟 基本都在做题 体验非常好 传送门 : https://codeforces.com/gym/103118 G. Grade Point Average ( 难度有先后) 题意 : 让你求sum/ns…

UG/NX二开Siemens官方实例解析 4.4 EX_Curve_ProjCurves(创建投影曲线)

前言 本系列文章主要讲解NXOpen UF API(简称ufun函数)的使用,之前看教学视频大都建议用ufun进行开发,这里西门子官方还专门给了一套系列文章来讲,说明官方也是特别推崇ufun。 本人从事二开也有一段时间了,我…

干货 | 测试人职场晋升“潜规则”:15 年经验资深测试经理的职场忠告

大家好,我是云胖虎,有近 15 年工作经验,在测试专业上擅长的方向是自动化测试,测试工具平台开发和探索测试相关的一些领域,也拿到过项目管理和敏捷教练的认证,目前是在某知名金融银行企业担任技术经理。今天…

dataworks调度问题

文章目录名词解释月调度关于空跑名词解释 业务日期 定时日期 - 1 自定义参数示例: 月调度 调度详情: 重要 使用补数据功能对月调度任务执行补数据操作时,请注意补数据选择的为业务日期 ,业务日期定时调度日期-1。 例如&#xf…

初始C++(一)

文章目录前言cout的用法cin的用法endl的用法一.命名空间1.:: (域作用限定符)2.命名空间定义3.命名空间的使用4.命名空间的一些其它使用5.全局展开6.部分展开二.缺省参数2.1全缺省2.2半缺省前言 既然这篇文章叫初始C,看我文章的应该和我一样,基本是个小白…

React-Router6路由相关二(路由传参、编程式路由导航、路由相关hooks)(八)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…