極大極小算法簡介

概念

  • 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,效率提升了不少。
相關文章
相關標籤/搜索