極大極小搜索算法 minimax search

minimax search

設計象棋等AI模型時常常需要使用博弈論的思想,minimax search就是一種基於當前狀態推測出使我方最有利而對方最不利的行動,在實際模型中需要考慮狀態函數,樹的深度,時間成本等等因素,這裏只講一個最簡單的例子說明minmax search的計算過程。

假設根據當前局面我們得到一個下圖所示的博弈樹:
figure 1

從上往下,單數層是我方行動,雙數層是對方行動,我方行動需要選擇對我最有利的行動,即value大的行動,對方行動則是選擇使我方最不利的行動,即value小的行動。

我們需要從最底層第四層開始考慮,雙數層所以是對方行動。對於node I,會選擇值更小的node M,node I的值更新爲0。再考慮第三層,單數層是我方行動。node F會選擇I,J中值更大的J,更新爲5,G會選擇K,L中值更大的L,更新爲8。依次一層層向上類推,可以得到最終結果爲:
在這裏插入圖片描述

alpha-beta prune

當樹的深度很大的時候,遍歷一遍的代價非常大,alpha-beta prune是一種優化方法,其根據遍歷順序分爲left-to-right和right-to-left兩種,前者從左邊開始遍歷,後者從右邊開始遍歷。

alpha-beta剪枝的基本思想是對於每個max結點設置一個目前已知下界alpha,每個min節點設置一個目前已知上界beta。alpha代表我方可以搜索到的最好值,beta代表了對方可以接受的最壞值。如果某個行動的結果小於或等於alpha,那麼它就是很差的行動,我方可以選擇更好的行動(當前alpha值的行動)。反之,如果某個行動的結果大於或等於beta,那麼整個節點就作廢了,因爲對手不希望走到這個局面,而它有一定有別的行動(即走當前beta值的行動)可以避免到達這個局面。

但發生下面兩種情況時可以剪枝,即停止搜索該節點的其餘子節點:
1)當計算一個min結點時,如果它的beta值小於等於其父結點的alpha值,則可以立即停止此結點的計算(alpha剪枝)。
2)當計算一個max結點時,如果它的alpha結點大於等於其父結點的beta值,也可以立即停止此結點的計算(beta剪枝)。

簡單來說,當 α β \alpha \geq \beta 時,發生剪枝,因爲後續搜索到的行動一定會差於之前的行動或是對方一定不會採取後續的行動。通過剪枝可以減少遍歷的節點數,從而加快速度。

還是以之前的博弈樹爲例(left-to-right)

  1. Initially node A α = , β = \alpha = -\infty, \beta = \infty , pass to node B and D.
  2. Starting form node D, b e t a = m i n ( , 3 ) = 3 beta = min(\infty,3) = 3 for node B.
  3. Search node E, b e t a = m i n ( 3 , 6 ) = 3 beta = min(3,6) = 3 for node B.
  4. For node A, α = m a x ( , 3 ) = 3 \alpha = max(-\infty,3) = 3 . Then node A passes α = 3 , β = \alpha = 3, \beta = \infty to node C, F and I.
  5. For node I, β = m i n ( , 0 ) = 0 < α = 3 \beta = min(\infty,0) = 0 < \alpha = 3 . So we do not need to consider node I’s another child node N. And pass the result back to node F. For node F, α = m a x ( 3 , 0 ) = 3 \alpha = max(3,0) =3 .
  6. Search node J, α = m a x ( 3 , 5 ) = 5 \alpha = max(3,5) =5 for node F. For node C, β = m i n ( , 5 ) = 5 \beta = min(\infty, 5) = 5 and α = 3 \alpha = 3 .
  7. Node C passes its value to node G. For node G, β = 5 , α = 3 \beta = 5, \alpha = 3 .
  8. Search node K, α = m a x ( 3 , 7 ) = 7 > β = 5 \alpha = max(3,7) = 7 > \beta = 5 for node G. So we do not need to consider node G’s another child node L. Return to node C, β = m i n ( 5 , 7 ) = 5 \beta = min(5,7) = 5 .
  9. Search node H, β = m i n ( 5 , 4 ) = 4 \beta = min(5,4) =4 . Return to node A, α = m a x ( 3 , 4 ) = 4 \alpha = max(3,4) = 4 .

最後的結果:
在這裏插入圖片描述

即對於當前局面,我的選擇最好可以達到4。