Python實現AI五子棋

2021-10-10 22:17:40 字數 1330 閱讀 8517

開發工具

**python版本:**3.6.4

graphics模組。

環境搭建

安裝python並新增到環境變數即可。

注:

graphics模組在相關檔案中已經提供,就是乙個py檔案,直接放在當前路徑或者放到python安裝資料夾下的site-packages資料夾內均可。

原理簡介

對於五子棋這樣的博弈類ai,很自然的想法就是讓計算機把當前所有可能的情況都嘗試一遍,找到最優的落子點。這裡有兩個問題:

(1)如何把所有可能的情況都嘗試一遍;

(2)如何定量判斷某落子點的優劣。

對於第乙個問題,其實就是所謂的博弈樹搜尋,對於第二個問題,其實就是所謂的選擇評估函式。評估函式的選取直接決定了ai演算法的優劣,其形式也千變萬化。可以說,每個評估函式就是乙個選手,對不同的棋型每個選手自然有不同的看法和應對措施,當然他們的棋力也就因此各不相同了。

但博弈樹搜尋就比較固定了,其核心思想無非是讓計算機考慮當前局勢下之後n步所有可能的情況,其中奇數步(因為現在輪到ai下)要讓ai方的得分最大,偶數步要讓ai方的得分最小(因為對手也就是人類,也可以選擇最優策略)。

當然這樣的搜尋其計算量是極大的,這時候就需要剪枝來減少計算量。例如下圖:

其中a代表ai方,p代表人類方。ai方搜尋最大值,人類方搜尋最小值。因此layer3的a1向下搜尋的最終結果為4,layer3的a2向下搜尋,先搜尋layer4的p3,獲得的分值為6,考慮到layer2的p1向下搜尋時取layer3的a1和a2中的較小值,而layer3的a2搜尋完layer4的p3時,其值就已經必大於layer3的a1了,就沒有搜尋下去的必要了,因此layer3到****layer4的路徑3就可以剪掉了

上述搜尋策略其實質就是:

minimax演算法+alpha-beta剪枝演算法。

了解了上述原理之後,就可以自己寫**實現了。當然實際實現過程中,我做了一些簡化,但萬變不離其宗,其核心思想都是一樣的。

具體實現過程詳見相關檔案中的源**。

五子棋 AI篇

效果圖 贏法陣列 var wins 第count種贏法 var count 0 贏法的統計陣列 var mywin var computerwin 結束標識 var gameover false var chess document.getelementbyid chess var me true ...

五子棋 Python實現

使用python中的turtle庫實現棋盤棋子的控制。程式功能 遊戲雙方輪流使用滑鼠進行落子,並自動判定勝負 查閱資料可知,標準五子棋棋盤大小為15格 15格 考慮電腦螢幕大小,取棋盤大小為420 420 用灰色填充棋盤區域 color grey begin fill penup goto 210,...

五子棋AI演算法簡易實現(五)

這個部分我把它分成了兩個函式 1.找出雙方所有可能下子的位置 generateallnextpossiblemove函式 2.在這些位置中進行挑選,選出能夠產生更大優勢的下子位置,減少博弈樹搜尋節點的次數 pointsfilter函式 2.2 落子位置的篩選這一部分主要參考了 這篇部落格上的寫法,這...