極大極小算法簡介


概念

  • 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,效率提高了很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM