やあ!
チェス エンジン用の negamax 検索アルゴリズムを作成しようとしていますが、うまく動作しないようです。ウィキペディアの疑似コードを例として使用していますが、どういうわけか期待どおりの結果が得られません。プライ 2 で実行すると、ボードのデータ構造が変更されますが、そうすべきではありません。プライ 2 で関数の実行が終了した後、白 (または黒) のすべてのポーンは、開始位置から 2 スペース前方に移動します。
5 プライまで検索する非再帰関数でテストしたため、make および unmake move 関数は完全に機能しています。その後、それは完全に機能しました。negamax の実装に何か問題があるに違いありません。
ご助力ありがとうございます!
def negaMax(self, board, rules, ply, player):
""" Implements a minimax algorithm. """
if ply == 0:
return self.positionEvaluation()
self.max_eval = float('-infinity')
self.move_list = board.generateMoves(rules, player)
for self.move in self.move_list:
board.makeMove(self.move, player)
self.eval = -self.negaMax(board, rules, ply - 1, board.getOtherPlayer(player))
board.unmakeMove(self.move, player)
if self.eval > self.max_eval:
self.max_eval = self.eval
return self.max_eval