b站視頻演示
python版AI五子棋
b站主頁
專案背景
機器博弈是人工智能領域的重要分支,它的研究物件多以復雜的棋牌類智力游戲為主,已經得到解決的棋類游戲,幾乎全部都應歸功于機器博弈近半個世紀的發展,計算機解決問題的優勢在于能把不易決議的問題,借助于現代計算機的運算速度優勢列舉出所有的合理情形而得解;然而,博弈問題的復雜程度決定了它不能過度依賴機器的計算能力,許多待解決的或已經解決的棋類,其狀態空間復雜度或博弈樹復雜度量級都太過龐大,所以我們需要添加約束,并且采用合理的演算法進行優化,
原理
對于五子棋這樣的博弈類AI,很自然的想法就是讓計算機把當前所有可能的情況都嘗試一遍,找到最優的落子點,這里有兩個問題:
- 如何把所有可能的情況都嘗試一遍;
- 如何定量判斷某落子點的優劣,
對于第一個問題,其實就是所謂的博弈樹搜索,對于第二個問題,其實就是所謂的選擇評估函式,評估函式的選取直接決定了AI演算法的優劣,其形式也千變萬化,可以說,每個評估函式就是一個選手,對不同的棋型每個選手自然有不同的看法和應對措施,當然他們的棋力也就因此各不相同了,但博弈樹搜索就比較固定了,其核心思想無非是讓計算機考慮當前局勢下之后N步所有可能的情況,其中奇數步(因為現在輪到AI下)要讓AI方的得分最大,偶數步要讓AI方的得分最小(因為對手也就是人類,也可以選擇最優策略),
剪枝來減少計算量:

棋型知識庫
活四:有兩個連五點(即有兩個點可以形成五),圖中白點即為連五點,當活四出現的時候,整個局勢已經無法阻止連五了,活四的歸屬方一定能取得勝利

沖四:有一個連五點,如下面三圖,均為沖四棋型,圖中白點為連五點, 相對比活四來說,沖四的威脅性就小了很多,因為這個時候,只要跟著防守在那個唯一的連五點上,沖四就沒法形成連五,

活三:可以形成活四的三,如下圖,代表兩種最基本的活三棋型,圖中白點為活四點,活三棋型是進攻中最常見的一種,因為活三之后,如果對方不以理會,將可以下一手將活三變成活四,而活四是無法防守的,所以,面對活三的時候,需要非常謹慎對待,在沒有更好的進攻手段的情況下,必須對其進行防守,以防止其形成可怕的活四棋型,

眠三:只能夠形成沖四的三,如下各圖,分別代表最基礎的六種眠三形狀,圖中白點代表沖四點,眠三的棋型與活三的棋型相比,危險系數下降不少,因為眠三棋型即使不去防守,下一手它也只能形成沖四,而對于單純的沖四棋型,是可以很簡單的防守住的,

活二:能夠形成活三的二,如下圖,是三種基本的活二棋型,圖中白點為活三點,

眠二:能夠形成眠三的二,圖中四個為最基本的眠二棋型,圖中白點為眠三點,

專案介紹
本專案使用python語言,主要使用博弈論演算法,然后再視窗化界面,最終形成該AI專案,源代碼實在太多了,還有圖片檔案,所以我就不直接貼在這里了,主頁左側聯系我,我再單獨發給你好了,希望本專案對你有所啟發,你的三連是對我莫大的支持!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297069.html
標籤:AI
