极大极小算法简介

概念

  • Minimax算法 又名极小化极大算法,是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益)。一般以递归形式来实现。
  • Minimax算法经常使用于棋类等由两方较量的游戏和程序。该算法是一个零总和算法,即一方要在可选的选项中选择将其优点最大化的选择,另外一方则选择令对手优点最小化的一个,其输赢的总和为0(有点像能量守恒,就像自己两个玩家都有1点,最后输家要将他的1点给赢家,但总体上仍是总共有2点)。不少棋类游戏能够采起此算法,例如tic-tac-toe。

主要应用场景

  • 零和游戏(Zero-sum Game):意思就是你死我活,一方的胜利表明另外一方的失败,好比,象棋,五子棋等。
  • 彻底信息(Perfect Information):玩家知道以前全部的步骤。象棋就是彻底信息,由于玩家是交替着落子,且以前的步骤都能在棋盘上体现,可是石头剪子布就不是。这样的游戏一般能够把他们看做一个树状图,把每一种可能性列出来。

例子

  • 井字棋游戏,Max表明你本身,Min表明你的对手。
    sample
  • 这个时候咱们须要给每一种结果一个分数,就是这里的Utility。这个分数是站在我本身(也就是Max)的角度评估的,好比上图中我赢了就是+1,输了是-1,平局时0。因此,我但愿最大化这个分数,而个人对手但愿最小化这个分数。(在游戏中,这个分数被称为static value。)
  • 过程:
    • 首先,因为双方都采用最优策略行棋,即知道从当前开始到结束的全部棋局状态,再从中选择最有利于本身的棋局,
    • 故双方都知道最终的全部棋局状态,所以有下图:
      first
    • 从结果看起,也就是第4步。图中标注第四步是个人对手下的,因此他要作的是最小化这个分数,因而对手根据结果能够反推出以下选择
      second
    • 从后往前看到第3步,当咱们知道了对手的选择之后,咱们能够根据对手的结果反推出本身的选择,咱们要作的是最大化这个分数,如图
      third
    • 咱们最终能够发现第一步的最优选择,如图
      fourth

笔记

  • 该算法从结果入手,分别选择最有利于自身的策略。
  • 经过设置最大值最小值来实现有利于自身的策略。
  • 经过轮流取大取小来模拟两人博弈。

优化 (Alpha-Beta剪枝)

  • 首先将游戏简化如图所示:
    first
  • 可是,最后一步的分数其实也须要计算机来算(static evaluation),因此咱们并不会一开始就有全部的数据,其实咱们一开始是这样的
    second
  • 而后,计算机给出了第一个分数
    third
  • 当给出了这个分数的时候,咱们站在步骤1看,不管另外一分支的数字是多少,步骤1左边方框的数字不会超过2。由于第2步是个人对手下的,他但愿分数尽量的小,也就是这样的
    fourth
  • 这个时候,电脑再计算另外一分支的分数,也就是7。知道另外一分数是7之后,也就知道步骤1的左边方框分数为2。这时,咱们往前看一步(步骤0)。步骤0的分数是大于等于2,由于我要最大化分数。如图
    fifth
  • 如今,再来计算右边分支的分数,获得了1。同理,咱们站在步骤1来看,右边方框中的数不会超过1,如图
    sixth
  • 在这个状况下,即便我不算最后一个数字,我也能知道在步骤0的结果为2,由于已知步骤1中的右边方框,数值不会超过1。因此咱们就能直接知道结果,也就是
    seventh
  • 们能够看到,加上剪枝算法,咱们不只获得了相同的结果,并且减小了计算量。在实际应用中,加上剪枝算法,计算机大约须要算2*n^(x/2)个结果,若是n为分支数,x为步数。相比于以前仅用极小极大算法的n^x,效率提升了不少。
相关文章
相关标签/搜索