python討論qq羣:996113038
代碼及相關資源獲取:關注微信公衆號:python趣味愛好者,
後臺回覆:五子棋
獲取源代碼開發工具:python3.6.4。
需要安裝的庫:graphics,time。
可以聯繫羣主安裝
效果演示:
基本原理
我們用到了博弈論的算法,下面我簡單介紹一下博弈樹:
博弈樹類似於狀態圖和問題求解搜索中使用的搜索樹。在AI五子棋中,博弈樹的節點對應於某一個器具,其分支表示走一步棋。根部對應於開始位置。其葉節點表示對弈到此處結束。競賽的結果可以是贏,輸,平。下面就是一棵典型的博弈樹:
如果按照暴力算法,將一局五子棋的所有可能性全部列舉出來,理論上講肯定是可以贏的。但是這樣會耗費巨量的計算力。所以枚舉法是不可行的。剪枝就是減去一些完全沒有意義的走法。大大降低計算量。
部分代碼
我們需要設定一個目標函數,計算未來幾步怎麼走能夠使這個目標函數最大化。這樣我們就需要對每一種走法的“分”做一個評估,這裏的“分”代表的是這個走法產生的棋局優勢。
首先我們要寫函數評估局勢,下面是一個例子:這是判斷四個方向裏,活四局勢的個數。
我們還要寫出:衝四局勢個數,四個方向裏活三,以及八個方向裏斷三的個數,該點在四個方向裏,是否有六子或以上連線,統計在u方向上,和key值相同的點的個數,即和key同色的連子個數。估價函數基本規則如下:
我們不斷讓機器的分數越來越高就行了。
參考資料:論文:《基於博弈樹的五子棋算法研究》—羅景,葉俊民,趙良等參考來源:https://github.com/hfq0219/wuziqi