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

2021-08-16 07:07:18 字數 1617 閱讀 3820

這個部分我把它分成了兩個函式:

1. 找出雙方所有可能下子的位置(generateallnextpossiblemove函式)

2. 在這些位置中進行挑選,選出能夠產生更大優勢的下子位置,減少博弈樹搜尋節點的次數(pointsfilter函式)

2.1 找出雙方所有可能下子的位置

這個函式用於找出相鄰兩格以內可以下棋的位置x20

x20x20x1

x1

x1

0

x2

x1

cx1

x2

0x1

x1

x1

0

x2

0x2

0x2

將上面的**比作棋盤,假設當前有棋子的位置為 c(**中心處,顏色無論黑白,均可),那麼下一步可能下棋的位置就是標有x1(表示相鄰一格)或 x2(表示相鄰兩格) 所在的格仔,不可能的位置為 0 所在的格仔,因此,只要標有 x1 或 x2 的格仔上(對應的棋盤位置上)沒有放置棋子,那麼我們都可以把它當做下一步雙方可能下子的位置。

let utilmethods = ,

// 檢測當前位置是否有棋子

isfilled(board, rowpos, colpos),

// 當前位置相鄰一格,有空位

hasonestepneighbour(board, rowpos, colpos),

// 當前位置相鄰兩格,有空位

hastwostepneighbour(board, rowpos, colpos)

}

有了上述的判斷方法,我們就很容易得到所有可能下子的位置

let constants = ,

chesspiece:

};generateallnextpossiblemove = function

let onestepneighbours = ,

twostepneighbours = ;

let rowend = constants.chessboard.row_num + 2,

colend = constants.chessboard.col_num + 2;

for(let i = 2; i < rowend; i++)else

twostepneighbours.push([i-2, j-2]);}}

}}

return [...onestepneighbours, ...twostepneighbours];

}

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

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

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

4 alphabeta剪枝演算法 alphabeta剪枝演算法的根據說白了其實就是棋手不會選擇不利於自己的走法,當乙個節點的估值明顯不利於自己的時候,就會選擇丟棄這個節點。該演算法保持兩個值,alpha和beta,它們分別表示max層的玩家可以確保的最小分數和min層的玩家可以得到的最大分數。最初,...

Python實現AI五子棋

開發工具 python版本 3.6.4 graphics模組。環境搭建 安裝python並新增到環境變數即可。注 graphics模組在相關檔案中已經提供,就是乙個py檔案,直接放在當前路徑或者放到python安裝資料夾下的site packages資料夾內均可。原理簡介 對於五子棋這樣的博弈類ai...