這個部分我把它分成了兩個函式:
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...