Alpha-beta剪枝
Alpha-beta剪枝是一種搜索算法,用以減少極小化極大算法(Minimax算法)搜索樹的節點數。這是一種對抗性搜索算法,主要應用於機器遊玩的二人遊戲(如井字棋、象棋、圍棋)。當算法評估出某策略的後續走法比之前策略的還差時,就會停止計算該策略的後續發展。該算法和極小化極大算法所得結論相同,但剪去了不影響最終決定的分枝[1]。
歷史
Allen Newell和Herbert A. Simon在1958年,使用了John McCarthy所謂的「近似」alpha-beta算法[2],此算法當時「應已重新改造過多次」[3]。亞瑟·李·塞謬爾(Arthur Samuel)有一個早期版本,同時Richards、Hart、Levine和/或Edwards在美國分別獨立發現了alpha-beta[4]。McCarthy在1956年達特默思會議上提出了相似理念,並在1961年建議給他的一群學生,其中包括MIT的Alan Kotok[5]。Alexander Brudno獨立發現了alpha-beta算法,並在1963年發布成果[6]。Donald Knuth和Ronald W. Moore在1975年優化了算法[7][8],Judea Pearl在1982年證明了其最優性[9]。
對原版極小化極大算法的改進
Alpha-beta的優點是減少搜索樹的分枝,將搜索時間用在「更有希望」的子樹上,繼而提升搜索深度。該算法和極小化極大算法一樣,都是分支限界類算法。若節點搜索順序達到最優化或近似最優化(將最佳選擇排在各節點首位),則同樣時間內搜索深度可達極小化極大算法的兩倍多。
在(平均或恆定)分枝因子為b,搜索深度為d層的情況下,要評估的最大(即招法排序最差時)葉節點數目為O(b*b*...*b) = O(bd)——即和簡單極小化極大搜索一樣。若招法排序最優(即始終優先搜索最佳招法),則需要評估的最大葉節點數目按層數奇偶性,分別約為O(b*1*b*1*...*b)和O(b*1*b*1*...*1)(或O(bd/2) = O(√bd))。其中層數為偶數時,搜索因子相當於減少了其平方根,等於能以同深度搜索兩次[10]。b*1*b*1*...意義為,對第一名玩家必須搜索全部招法找到最佳招式,但對於它們,只用將第二名玩家的最佳招法截斷——alpha-beta確保無需考慮第二名玩家的其他招法。但因節點生成順序隨機,實際需要評估的節點平均約為O(b3d/4)[2]。
一般在alpha-beta中,子樹會由先手方優勢或後手方優勢暫時占據主導。若招式排序錯誤,這一優勢會多次切換,每次讓效率下降。隨着層數深入,局面數量會呈指數性增長,因此排序早期招式價值很大。儘管改善任意深度的排序,都以能指數性減少總搜索局面,但排序臨近根節點深度的全部局面相對經濟。在實踐中,招法排序常由早期、小型搜索決定,如通過迭代加深。
算法使用兩個值alpha和beta,分別代表大分玩家放心的最高分,以及小分玩家放心的最低分。alpha和beta的初始值分別為正負無窮大,即雙玩家都以可能的最低分開始遊戲。在選擇某節點的特定分枝後,可能發生小分玩家放心的最小分小於大分玩家放心的最大分(beta <= alpha)。這種情況下,父節點不應選擇這個節點,否則父節點分數會降低,因此該分枝的其他節點沒有必要繼續探索。
偽代碼
下面為一有限可靠性版本的Alpha-beta剪枝的虛擬代碼[10]:
function alphabeta(node, depth, α, β, maximizingPlayer) // node = 节点,depth = 深度,maximizingPlayer = 大分玩家 if depth = 0 or node是终端節點 return 節點的啟發值 if maximizingPlayer v := -∞ for 每个子節點 v := max(v, alphabeta(child, depth - 1, α, β, FALSE)) // child = 子節點 α := max(α, v) if β ≤ α break // β裁剪 return v else v := ∞ for 每个子節點 v := min(v, alphabeta(child, depth - 1, α, β, TRUE)) β := min(β, v) if β ≤ α break // α裁剪 return v
(* 初始調用 *) alphabeta(origin, depth, -∞, +∞, TRUE) // origin = 初始節點
在這個有限可靠性的alpha-beta中,當v超出調用參數α和β構成的集合時(v < α或v > β),alphabeta函數返回值v。而與此相對,強化的有限可靠性alpha-beta限制函數返回在α與β包括範圍中的值。
參考文獻
- George T. Heineman, Gary Pollice, and Stanley Selkow. Chapter 7: Path Finding in AI. Algorithms in a Nutshell. Oreilly Media. 2008: 217–223. ISBN 978-0-596-51624-6.
- Judea Pearl, Heuristics, Addison-Wesley, 1984
- John P. Fishburn. Appendix A: Some Optimizations of α-β Search. Analysis of Speedup in Distributed Algorithms (revision of 1981 PhD thesis). UMI Research Press. 1984: 107-111. ISBN 0-8357-1527-2.
- ^ Russell, Stuart J.; Norvig, Peter. Artificial Intelligence: A Modern Approach 3rd. Upper Saddle River, New Jersey: Pearson Education, Inc. 2010: 167 [2016-02-05]. ISBN 0-13-604259-7. (原始內容存檔於2011-02-28).
- ^ 2.0 2.1 McCarthy, John. Human Level AI Is Harder Than It Seemed in 1955. LaTeX2HTML 27 November 2006 [2006-12-20]. (原始內容存檔於2012-04-08).
- ^ Newell, Allen and Herbert A. Simon. Computer Science as Empirical Inquiry: Symbols and Search (PDF). Communications of the ACM. March 1976, 19 (3) [2006-12-21]. doi:10.1145/360018.360022. (原始內容 (PDF)存檔於2007-06-28).
- ^ Edwards, D.J. and Hart, T.P. The Alpha–beta Heuristic (AIM-030). Massachusetts Institute of Technology. 4 December 1961 to 28 October 1963 [2006-12-21]. (原始內容存檔於2012-04-08).
- ^ Kotok, Alan. MIT Artificial Intelligence Memo 41. 2004-12-03 [2006-07-01]. (原始內容存檔於2012-04-08).
- ^ Marsland, T.A.. Computer Chess Methods (PDF) from Encyclopedia of Artificial Intelligence. S. Shapiro (editor) (PDF). J. Wiley & Sons: 159–171. May 1987 [2006-12-21]. (原始內容 (PDF)存檔於2008-10-30).
- ^ * Knuth, D. E., and Moore, R. W. An Analysis of Alpha–Beta Pruning (PDF). Artificial Intelligence. 1975, 6 (4): 293–326. doi:10.1016/0004-3702(75)90019-3.[永久失效連結] Reprinted as Chapter 9 in Knuth, Donald E. Selected Papers on Analysis of Algorithms. Stanford, California: Center for the Study of Language and Information - CSLI Lecture Notes, no. 102. 2000 [2016-02-05]. ISBN 1-57586-212-3. OCLC 222512366. (原始內容存檔於2010-11-15).
- ^ Abramson, Bruce. Control Strategies for Two-Player Games (PDF). ACM Computing Surveys. June 1989, 21 (2): 137 [2008-08-20]. doi:10.1145/66443.66444. (原始內容 (PDF)存檔於2008-08-20).
- ^ Pearl, Judea. The Solution for the Branching Factor of the Alpha–beta Pruning Algorithm and its Optimality. Communications of the ACM. August 1982, 25 (8): 559–564. doi:10.1145/358589.358616.
- ^ 10.0 10.1 Russell, Stuart J.; Norvig, Peter, Artificial Intelligence: A Modern Approach 2nd, Upper Saddle River, New Jersey: Prentice Hall, 2003 [2016-02-05], ISBN 0-13-790395-2, (原始內容存檔於2011-02-28)
外部連結
- http://www.emunix.emich.edu/~evett/AI/AlphaBeta_movie/sld001.htm(頁面存檔備份,存於網際網路檔案館)
- http://sern.ucalgary.ca/courses/CPSC/533/W99/presentations/L1_5B_McCullough_Melnyk/(頁面存檔備份,存於網際網路檔案館)
- http://sern.ucalgary.ca/courses/CPSC/533/W99/presentations/L2_5B_Lima_Neitz/search.html(頁面存檔備份,存於網際網路檔案館)
- https://web.archive.org/web/20021223103359/http://www.maths.nott.ac.uk/personal/anw/G13GAM/alphabet.html
- https://web.archive.org/web/20041123061044/http://chess.verhelst.org/search.html
- http://www.frayn.net/beowulf/index.html(頁面存檔備份,存於網際網路檔案館)
- http://hal.inria.fr/docs/00/12/15/16/PDF/RR-6062.pdf(頁面存檔備份,存於網際網路檔案館)
- Minimax (with or without alpha–beta pruning) algorithm visualization - game tree solving (Java Applet), for balance or off-balance trees(頁面存檔備份,存於網際網路檔案館)
- Demonstration/animation of minimax game search algorithm with alpha–beta pruning (using html5, canvas, javascript, css)(頁面存檔備份,存於網際網路檔案館)
- Java implementation used in a Checkers Game(頁面存檔備份,存於網際網路檔案館)