Minimax 算法是博弈论中使用的一种回溯算法,用于在假设您的对手也在采取最佳行动的情况下确定最佳行动。Minimax算法的使用是一种不涉及机器学习的人工智能形式。本文解释了 Minimax 算法,并探讨了如何使用它来确定井字游戏中的下一步。


MiniMax 算法工作的条件

  • 每个玩家采取交替动作
  • 每个玩家都在发挥最佳状态以赢得胜利
  • 游戏是战略性的,不依赖任何机会元素

最大化和最小化

为了将极小极大算法应用于游戏,一名玩家被指定为最大化玩家,另一名玩家被指定为最小化玩家。最大化玩家玩游戏以尝试获得最高分,而最小化玩家玩游戏以获得最低可能分数。在游戏的每一点,都可以评估棋盘以确定当前得分。如果最终得分为正结果,则最大化玩家获胜,如果得分为负结果,则最小化玩家获胜,如果结果为零,则游戏为平局。

最大化玩家评估最佳行动,以了解他们的对手也会做出他们可以做出的最佳行动。下一步是通过创建一个树结构并评估在最大化和最小化玩家之间交替的每个可能的移动并计算最终结果的分数来决定的。评估像国际象棋这样的游戏中的每一个动作很复杂,并且计算量可能非常昂贵,但是在像井字游戏这样的游戏中,可以评估每一个动作。

在一次移动中,最大化玩家将始终选择产生最大分数的路径。


最大化选择得分最高的移动

最小化玩家将始终选择产生最低分数的路径。

最小化选择得分最小的移动


具有四个级别的示例二叉树

游戏将有多个可供玩家使用的动作,并且在游戏结束之前可能还有多个回合。例如,在国际象棋中,估计一个玩家每回合可以有大约 35 步可用。在井字游戏中,第一个玩家有 9 个可用的动作,而第二个玩家在 9 个开局动作中的每一个都有 8 个可能的动作。

让我们假设一个游戏,其中每个玩家只有两个动作可用,并给出代表 4 个动作后棋盘评估的随机数集。在每个级别,玩家必须在两条可能的路径之间进行选择。假设这是最大化玩家回合。Minimax 算法将对所有路径执行深度优先遍历,以评估最佳移动。

游戏中只有两个动作可用的示例结果


最大化玩家将在 -60 和 12 之间选择 12,并将在 17 和 3 之间选择 17。然后,最小化玩家将在 12 和 17 之间选择 12。


左侧路径解析为 12 分


左侧路径解析为 11 分


所以最大化玩家选择的最佳路径是左路径。

最大化玩家的最佳选择是左侧路径


将 Minimax 应用于井字游戏

为了在井字游戏中使用 Minimax 确定最佳移动,我们指定一名玩家为最大化玩家,另一名玩家为最小化玩家。

假设X是最大化玩家,O是最小化玩家。最简单的评分策略之一是为包含 3 个X标记 [ X Wins ]的行指定加 1值,为包含 3 个O标记 [ O Wins ] 的行指定 -1 值,当比赛是平局。可以通过遵循每个可能的移动路径来评估当前玩家的下一步移动。每个玩家都可以预测他们的对手会同样做出他们最好的举动。玩家X正在寻找 1 的分数,而玩家O正在寻找 -1 的分数。

这有点像

  • “我知道你会怎么做”
  • “你知道我知道你会做什么”
  • “我知道你知道我知道你会做什么”
  • 等等...


以 X 作为最大化玩家的 tic tac toe 的 Minimax 得分


最大化玩家的下一步动作示例

给定下面的示例棋盘,极小极大算法可用于确定玩家X(最大化玩家)的最佳移动。


给定一个带有 X 移动的 tic tac toe board 示例


X有三个可用的方格来放置令牌。这些中的第一个和第三个结果是+1的分数, X立即获胜并结束游戏。第二个结果是游戏继续并切换到玩家O的回合。玩家O有两种选择,一种是O三连胜, 得分为-1。玩家O将始终选择最小选项,因此它会向上滚动到-1层。所以X的下一步是在+1 和-1+1之间进行选择将被选中。当有两个价值相等的选项时,可以选择第一个。

这个过程解释了为什么 Minimax 是一种回溯算法。采取每一个可能的举动来确定这是否是获胜的举动,然后回溯并放弃非获胜的举动。

从井字游戏开始就可以遵循相同的过程,但由于有 9 个初始选项,每个选项有 8 秒选项,为此绘制图表将具有挑战性。


井字游戏中 X 玩家的选项


Minimax 算法的伪代码

我将在下一篇文章中实现 Swift 中的 minimax 算法,让玩家可以对着电脑玩井字游戏。这是算法的伪代码。对于可以设置深度以限制递归次数的更复杂的游戏,这可能会有所不同,但对于井字游戏,这不是必需的。

function minimax_recursive(node, isMaximising)
{If game is overreturn board scoreIf isMaximisingbestValue = negInfinityFor each valid move on the boardvalue = minimax_recursive(node, false)bestValue = max(value, bestValue)return bestValueElse // MinimisingbestValue = posInfinityFor each valid move on the boardvalue = minimax_recursive(node, true)bestValue = min(value, bestValue)return bestValue
}

结论

Minimax算法可用于玩二人游戏,例如跳棋、国际象棋和井字游戏。这篇文章是在使用测试驱动开发编写井字游戏应用程序的过程中出现的。下一篇文章将使用这种极小极大算法来让玩家玩电脑。

用井字游戏理解 Minimax 算法相关推荐

  1. 博弈树搜索技术(Minimax算法,ɑ-β 算法)

    博弈树搜索技术(Minimax算法,ɑ-β 算法) 一. 算法的理解 Minimax算法 概括:算法可以概括为--己方利益最大化,对方利益最小化". 即一方要在可选的选项中选择将其优势最大 ...

  2. 带有 JavaScript 的井字游戏:带有 Minimax 算法的 AI 玩家

    Tic-Tac-Toe with JavaScript: AI Player with Minimax Algorithm | Ali Alaa - Front-end Web Developerht ...

  3. minimax算法及α-β剪枝算法

    minimax算法通常用于二人博弈游戏中,如井字棋,chomp游戏等.我对这个算法的理解是这样的:(以人和电脑下棋为例) 电脑要确定哪一步下棋使得优势最大,假设棋盘大小为nxm,不 考虑其他因素,那么 ...

  4. 基于C++的不围棋NOGO代码-PKU计算概论A大作业-MCTS算法Minimax算法

    关于评论区提出的问题,我补充一下,这篇代码是pku同学<计算概论A2020>的大作业,代码是需要提交在botzone上的,文章中有些代码是与botzone的交互,具体交互过程与规则见维基百 ...

  5. MiniMax算法实现井字棋

    使用MiniMax算法实现井字棋,下面是问题的记录 源代码地址:gitee仓库地址 python中列表的浅复制和深复制 在函数传递中,如果实参传递可变数据类型(list.set.dict)实际上传递的 ...

  6. 用人话理解hash算法、特性、唯一性等

    背景 博主在本科的时候曾经参加过数学建模,当初提交参赛论文的时候有两个提交时间点,第一个是提交MD5码的时间,第二个是提交具体参赛论文的时间,当初就很纳闷,直接提交论文不就ok吗?为什么多此一举呢 我 ...

  7. 通俗易懂理解GBDT算法原理-转

    GBDT算法深入解析 https://www.zybuluo.com/yxd/note/611571 通俗易懂理解GBDT算法原理 https://blog.csdn.net/qq_36696494/ ...

  8. xgboost 正则项_深入理解Boosting算法(4)-XGBoost

    导语:记得第一次使用XGBoost的时候还是2016年,那会的XGBoost工具还不完善,深度模型还没有怎么样火起来,大家用的最多的还是Sklearn里面的GBDT,或者R语言的GBM.后来在工作中也 ...

  9. 理解GBDT算法(三)——基于梯度的版本

     理解GBDT算法(三)--基于梯度的版本 标签: GBDT梯度残差代价函数回归树 2015-03-31 16:13 1395人阅读 评论(3) 收藏 举报 本文章已收录于: 分类: Machin ...

  10. 再理解RankNet算法

    再理解RankNet算法 前面的一篇博文介绍了学习排序算法(Learning to Rank)中的RankNet算法.如下:http://blog.csdn.net/puqutogether/arti ...

最新文章

  1. 根据痛点分析制作软件
  2. 【解决方案】分布式定时任务解决方案
  3. 我学会了python接下来学什么比较好-我,二本,学会Python后月入上万
  4. laravel判断HTTP请求是否ajax
  5. 5.7.22mysql charset_Mysql5.7.22 坑爹的 `character_set_database`
  6. 深入 Lucene 索引机制
  7. arduino绘图_如何使用Arduino构建绘图仪
  8. 【SpringBoot_ANNOTATIONS】组件注册 06 @Conditional 按照条件注册bean
  9. 全国2009年1月电子商务与电子政务试题
  10. いちゃコミュ+~いちゃいちゃコミュニケーション プラス 汉化补丁
  11. 服务器共享文档只读不可复制,局域网共享文件只读不能复制的设置方法
  12. graphpad做单因素方差分析_手把手教你用Graphpad做单因素方差分析
  13. 分享两种证件照换背景方法,轻松把照片底色变白
  14. matlab怎么表示循环求和,matlab循环求和
  15. 网站ssl证书出现错误如何解决
  16. 学长的白日梦C语言题目,bzoj4030【HEOI2015】小L的白日梦
  17. 什么是股票情绪量化指标?
  18. 用pcDuino来做电子相框
  19. Java字符串转Json对象
  20. 高考排名liuseroj.picp.io

热门文章

  1. 同文输入法 android,同文输入法app下载-同文输入法手机版-同文输入法最新版_易玩网...
  2. Vue el-upload插件上传批量文件
  3. WinAPI之ReleaseSemaphore
  4. 哪个ei期刊容易过计算机专业,计算机期刊哪个好中_ei期刊计算机_计算机八大核心期刊...
  5. Object 转int
  6. 通过PaddleOCR识别pdf数据
  7. 从Adobe官网离线下载Photoshop完整安装包
  8. python websocket服务器端_python实现websocket服务器
  9. 续:~英语 1038个词根 217个后缀!
  10. 扩展卡尔曼滤波(EKF)