alpha-beta剪枝算法


參考鏈接-機器之心
人機博弈是人工智能的重要分支,人們在這一領域探索的過程中產生了大量的研究成果,而極小化極大算法(minimax)是其中最基礎的算法,它由Shannon在1950年正式提出。Alpha-beta剪枝的本質就是一種基於極小化極大算法的改進方法。

在人機博弈中,雙方回合制地進行走棋,己方考慮當自己在所有可行的走法中作出某一特定選擇后,對方可能會采取的走法,從而選擇最有利於自己的走法。這種對弈過程就構成了一顆博弈樹,雙方在博弈樹中不斷搜索,選擇對自己最為有利的子節點走棋。在搜索的過程中,將取極大值的一方稱為max,取極小值的一方稱為min。max總是會選擇價值最大的子節點走棋,而min則相反。這就是極小化極大算法的核心思想。

極小化極大算法最大的缺點就是會造成數據冗余,而這種冗余有兩種情況:①極大值冗余;②極小值冗余。相對應地,alpha剪枝用來解決極大值冗余問題,beta剪枝則用來解決極小值冗余問題,這就構成了完整的Alpha-beta剪枝算法。接下來對極大極小值冗余和具體剪枝過程作簡要介紹。

極大值冗余
如圖1所示,這是一顆博弈樹的某一部分,節點下的數據為該節點的值,節點B的值為20,節點D的值為15,這里,C為取極小值的min節點,因此節點C的值將小於等於15;而節點A為取最大值max的節點,因此A只可能取到B的值,也是就說不再需要搜索C的其他子節點E和F的值就可以得出節點A的值。這樣將節點D的后繼兄弟節點減去稱為Alpha剪枝。

圖 1 極大值冗余的Alpha剪枝
極小值冗余
如圖2所示,這也是一顆博弈樹的某一部分,節點B的值為10,節點D的值為19,這里,C節點為取最大值max節點。因此,C的值將大於等於19;節點A為取極小值的min節點,因此A的值只能取B的值10,也就是說不再需要求節點C的子節點E和F的值就可以得出節點A的值。這樣將節點D的后繼兄弟節點減去稱為Beta剪枝。

圖2 極小值冗余的Beta剪枝

瓶頸
Alpha-beta剪枝本質是alpha剪枝和beta剪枝的結合,這兩種剪枝的發生條件不同,因此在博弈中總是首先需要區分取極小值和取極大值方,這在一定程度上讓算法的效率打了折扣。

未來發展方向
Alpha-beta剪枝是對極小化極大算法的一種改進,但是在實際應用過程中,alpha-beta剪枝首先要區分出博弈雙方誰是取極大值者,誰是取極小值者,達到剪枝條件時才會進行剪枝。這一優化方法雖然簡潔明了,但在一定程度上讓算法的效率打了折扣。因此在具體的博弈中,結合博弈的特定規則進行優化,比如說,將一些先驗知識(prior knowledge)納入剪枝條件中,這種基於具體應用的優化將是alpha-beta剪枝的重要發展方向。


免責聲明!

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



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