一、基本概念
博弈分類:單人博弈(華容道)、雙人博弈(象棋、圍棋)、多人博弈(麻將、橋牌);完全信息博弈(象棋、圍棋)、不完全信息博弈(麻將、橋牌、三國殺等)。
注:大一曾選修過一門課:博弈論,也在數模班做過一些博弈方面的研究,有一些基礎,所以對機器博弈中博弈概念很容易就理解了。但博弈論(Game Theory)是經濟學的一個重要分支(雖然我發現我們學校圖書館有關博弈論的書籍主要放在數學類書架,這也是有其原因的),主要研究的是社會兩難問題(如經典的囚徒困境問題),通常是非零和博弈(即致力於出現雙贏局面),而機器博弈(以棋類為代表)主要研究零和博弈(即博弈參與者一方獲利另一方必然遭受損失,比如所有的棋類都以戰勝對方為目的)。關於經濟學中的博弈在此不做贅述。
二、機器博弈中的數據結構
關於數據結構的具體知識在此不做贅述,如果沒有此方面知識根本沒必要往下看。本學期剛剛學完數據結構,有些同學覺得都是很枯燥的理論,其實這枯燥與有趣之間缺德就是那么一點探索精神和自主學習意識,如果AI五子棋------------初探用的就是很基本的數組。以象棋為例,可以用數組存儲棋盤,用布爾矩陣檢查合法性。
排序、查找在機器博弈中也頻繁使用,因為要對每一種策略的得分(這個概念下面解釋)進行篩選,找出最優策略。
遞歸及回溯思想同樣很重要。
在涉及圖的存儲是,鄰接表是實際應用最廣泛的。
三、着法
着法就是一個棋子從一個位置移動到另一個位置(象棋)或將不在棋盤上的棋子放在棋盤上某個位置(五子棋、圍棋)。機器博弈要直接解決的問題就是如何做出最優着法。着法的最基本的要求是符合游戲規則,比如馬走日,象飛田,馬腳蹩子不能走,象眼堵住不能走等等。
四、博弈樹
今年李世石和AlphaGo的人機大戰讓蒙特卡洛樹搜索從一個高深的專業詞匯變成了一個眾口相傳的科技熱詞。博弈樹分支越多,該類博弈對於程序設計的要求就越高,因為是指數增長的,所以除非NP=P,否則博弈樹存儲及搜索永遠是一個難題,也是左右機器博弈水平的關鍵因素。
五、評估函數
評估函數就是一個打分機制,通過評估函數,上文中貼出的連接中所使用的贏法數組就是一種簡單的評估函數,評估函數是着法的基礎,評估函數的合理性很大程度影響博弈水平。我猜想,機器學習很重要的一部分就是通過重復博弈來反復調整評估函數達到最佳狀態。此外,專業棋手肯定比程序編寫者更適合設計評估函數,因為他們的經驗正是機器學習的目的。此外,已經啟發式算法(模擬退火算法、遺傳算法)也被廣泛應用到機器博弈中,我曾經用模擬退火算法寫過最短路徑的程序021 模擬退火算法學習(一)-----求解最短連通路徑,確實這種啟發式算法能有效避免全局搜索的低效和爬山算法(一種貪心策略)局部最優解問題。
六、基本搜索方法
產生博弈樹之后海妖搜索博弈樹獲得一個最優解,常用的搜索策略有DFS和BFS,但是DFS搜索整個博弈樹顯然是不現實的,所以都會認為設置深度,但是過淺則影響博弈水平,過深則影響時間效率。同樣,啟發式搜索也是一種不錯的選擇,如極大極小法,alpha-beta剪枝,負極大值搜索。
七、博弈程序設計
語言選擇,面向對象語言在設計大型程序時優勢明顯。界面應該美觀易用,交互性好。邏輯結構應該清晰,功能應該完備,包括基本設置,搜索策略設置,悔棋、打譜、存盤等基本功能。

