やあ!私はチェスエンジンを作成しています。反復的な深化を実装したいので、主なバリエーション (エンジンが最適と考える一連の動き) を見つける必要があります。しかし、Python の Web で疑似コードの例を見つけられませんでした。また、alphabeta 関数は再帰的であるため、理解するのに本当に苦労しています。
どうすればこれを行うことができるか、ヒントまたは疑似コードの例を教えてください。どうもありがとうございました。
これは、移動自体ではなく、移動の評価を返すだけのアルファ ベータ関数です。
def alphaBeta(self, board, rules, alpha, beta, ply, player):
""" Implements a minimax algorithm with alpha-beta pruning. """
if not ply:
return self.positionEvaluation(board, rules, player)
move_list = board.generateMoves(rules, player)
if not len(move_list):
return self.mateCheck(rules, board, player, ply)
for move in move_list:
board.makeMove(move, player)
current_eval = -self.alphaBeta(board, rules, -beta, -alpha, ply - 1, board.getOtherPlayer(player))
board.unmakeMove(move, player)
if current_eval >= beta:
return beta
elif current_eval > alpha:
alpha = current_eval
return alpha