博弈基礎 極大極小搜尋

2021-09-25 18:11:57 字數 2310 閱讀 4201

計算機博弈(也稱機器博弈),是乙個挑戰無窮、生機勃勃的研究領域,是人工智慧領域的重要研究方向,是機器智慧型、兵棋推演、智慧型決策系統等人工智慧領域的重要科研基礎。機器博弈被認為是人工智慧領域最具挑戰性的研究方向之一。

機器博弈的核心技術是博弈搜尋演算法

零和博弈(zero-sum game),又稱零和遊戲,與非零和博弈相對,是博弈論的乙個概念,屬非合作博弈。指參與博弈的各方,在嚴格競爭下,一方的收益必然意味著另一方的損失,博弈各方的收益和損失相加總和永遠為「零」,雙方不存在合作的可能。

也可以說:自己的幸福是建立在他人的痛苦之上的,二者的大小完全相等,因而雙方都想盡一切辦法以實現「損人利己」。零和博弈的結果是一方吃掉另一方,一方的所得正是另一方的所失,整個社會的利益並不會因此而增加一分。

最單純的極大極小演算法

局面估價函式:我們給每個局面(state)規定乙個估價函式值 f,評價它對於己方的有利程度。勝利的局面的估價函式值為 +oo,而失敗的局面的估價函式值為–oo。

max 局面:假設這個局面輪到己方走,有多種決策可以選擇,其中每種決策都導致一種子局面(sub-state)。由於決策權在我們手中,當然是選擇估價函式值 f 最大的子局面,因此該局面的估價函式值等於子局面 f 值的最大值,把這樣的局面稱為 max 局面。

min 局面:假設這個局面輪到對方走,它也有多種決策可以選擇,其中每種決策都導致一種子局面(sub-state)。但由於決策權在對方手中,在最壞的情況下,對方當然是選擇估價函式值 f 最小的子局面,因此該局面的估價函式值等於子局面 f 值的最小值,把這樣的局面稱為 max 局面。

終結局面:勝負已分(假設沒有和局)

假如有如上圖的博弈樹,設先手為 a ,後手為 b ;則 a 為 max 局面,b 為 min 局面。上圖中 a 一開始有 2 種走法( w2 和 w3 ,w表示結點記號),它走 w2 還是 w3 取決於 w2 和 w3 的估價函式值f(),因為 a 是 max 局面,所以它會取 f(w2) 和 f(w3) 中大的那個,f(x) 怎麼求呢?通常是以遞迴的方式對博弈樹進行搜尋,我們通常可以設定葉子結點局面的估價值。

例如上圖的搜尋過程為 w1 --> w2 --> w4 ,然後回溯到 w1 --> w2 得到 f(w2) = 3 ,接著 w1 --> w2 --> w5 得到 f'(w2) = 1,因為 w2 在第二層,是 min 局面,所以它會選擇得到的結果中小的那個,即用 f'(w2) 替代 f(w2) ,即 f(w2) = 1,接著 w1 --> w2 --> w6 得到 f'(w2) = 6 > f(w2) ,直接忽略。因此如果 a 往 w2 走的話將會得到乙個估價值為 f(w2) = 1 的局面;類似地,如果往 w3 走的話將會得到乙個估價值為 f(w3) = -3 的局面。而 a 是 max 局面,所以它會選擇估價值大的走法,f(w2) = 1 > f(w3) = -3,因此它下一步走 w2。

偽**表示為:

// player = 1 表示輪到己方, player = 0 表示輪到對方

// cur_node 表示當前局面(結點)

maxmin(player, cur_node)

但是,實際問題中的所有局面所產生的博弈樹一般都是非常龐大,非常龐大的多叉樹~,並不能依靠暴力搜尋來尋找最佳解法。因此需要用到一些剪枝手段。常用的比較初級的有 alpha-beta 剪枝。

具體來說就是這樣,舉個例子:

如果下圖是某問題所產生的一顆博弈樹,先手 a 為己方,後手 b 為對方。

通過前面所述的方法,如果 a 走 w2 則可以得到這樣的結果:

alpha 初始值為 -oo,beta 初始值為 +oo;w1 在得到 f(w1) = 6 的整個過程中, alpha 和 beta 是這樣變化的:w1 --> w2 -- > w5 得到 f'(w2) = 6 < f(w2) = +oo,即修改 f(w2) = f'(w2) = 6;同時修改 beta = 6 (因為 w2 的子局面是否需要剪枝依賴於 w2 的估價值 f(),而與 alpha 無關,故不需修改 alpha)。在正常搜尋完 w1 --> w2 --> w6 後, w2 層把 beta = 6 返回給上一層 w1 的 alpha,即 w1 層的 alpha = 6,beta = +oo。

偽**表示為:

// player = 1 表示輪到己方, player = 0 表示輪到對方

// cur_node 表示當前局面(結點)

maxmin(player, cur_node, alpha, beta)

練習:

博弈(alpha-beta 剪枝)—— poj 1568 find the winning move

博弈(alpha-beta 剪枝)poj —— 1085 ******** war

搜尋 博弈,極小化和極大化

這篇部落格要討論乙個問題,就是如何讓計算機下棋?有如下三種形式 1.同人類的做法一樣,分析局勢,和將帥的安全性,這裡會有一些分析策略,還有一些戰術,這些混合在一起,最終得到下一步要走哪.不過很遺憾的是,如今的程式都不知道如何包含這類東西.2.使用 if then 結構 以這種結構,如果第一步走什麼,...

極大極小搜尋

極大極小搜尋演算法 用於圍棋,五子棋,象棋等棋類,結果有三種可能 勝利 失敗和平局。理論上可以窮舉所有的走法,這就需要生成整棵博弈樹。實際上不可行。因此搜尋時可以限 定博弈樹的深度,到達該深度則不再往下搜,相當於只往前看 n 步。如果題意是求出必勝,必敗,必和等,那麼肯定是全部搜完整一棵搜尋樹,此題...

極大極小博弈樹 轉)

2008年11月15日 星期六 11 03 這篇文章將介紹一種對於所有的gameai 遊戲智慧型 開發來說都非常重要的資料結構。對於幾乎每乙個棋類博弈遊戲程式來說,極大極小樹 the minimax tree 都是其中的核心。極大極小博弈樹 minimax game tree,簡寫為mgt,譯者注 ...