利用python實現,基於“博弈樹”的AI五子棋

python討論qq羣:996113038
代碼及相關資源獲取:關注微信公衆號:python趣味愛好者,
後臺回覆:五子棋
獲取源代碼開發工具:python3.6.4。
需要安裝的庫:graphics,time。
可以聯繫羣主安裝

效果演示:
在這裏插入圖片描述

基本原理

我們用到了博弈論的算法,下面我簡單介紹一下博弈樹:
博弈樹類似於狀態圖和問題求解搜索中使用的搜索樹。在AI五子棋中,博弈樹的節點對應於某一個器具,其分支表示走一步棋。根部對應於開始位置。其葉節點表示對弈到此處結束。競賽的結果可以是贏,輸,平。下面就是一棵典型的博弈樹:
在這裏插入圖片描述
如果按照暴力算法,將一局五子棋的所有可能性全部列舉出來,理論上講肯定是可以贏的。但是這樣會耗費巨量的計算力。所以枚舉法是不可行的。剪枝就是減去一些完全沒有意義的走法。大大降低計算量。

部分代碼

我們需要設定一個目標函數,計算未來幾步怎麼走能夠使這個目標函數最大化。這樣我們就需要對每一種走法的“分”做一個評估,這裏的“分”代表的是這個走法產生的棋局優勢。
首先我們要寫函數評估局勢,下面是一個例子:這是判斷四個方向裏,活四局勢的個數。
在這裏插入圖片描述
我們還要寫出:衝四局勢個數,四個方向裏活三,以及八個方向裏斷三的個數,該點在四個方向裏,是否有六子或以上連線,統計在u方向上,和key值相同的點的個數,即和key同色的連子個數。估價函數基本規則如下:
在這裏插入圖片描述
我們不斷讓機器的分數越來越高就行了。
參考資料:論文:《基於博弈樹的五子棋算法研究》—羅景,葉俊民,趙良等參考來源:https://github.com/hfq0219/wuziqi

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章