python
def minimax(game_state, depth, maximizing_player):
if depth == 0 or game_state.is_game_over():
return game_state.evaluate()
legal_moves = game_state.get_legal_moves()
if maximizing_player:
best_value = float('inf')
for move in legal_moves:
new_state = game_state.make_move(move)
value = minimax(new_state, depth 1, False)
best_value = max(best_value, value)
return best_value
else:
best_value = float('inf')
for move in legal_moves:
new_state = game_state.make_move(move)
value = minimax(new_state, depth 1, True)
best_value = min(best_value, value)
return best_value
3、AlphaBeta剪枝
为了提高效率,可以使用AlphaBeta剪枝来优化Minimax算法。
python
def alphabeta(game_state, depth, alpha, beta, maximizing_player):
if depth == 0 or game_state.is_game_over():
return game_state.evaluate()
legal_moves = game_state.get_legal_moves()
if maximizing_player:
value = float('inf')
for move in legal_moves:
new_state = game_state.make_move(move)
value = max(value, alphabeta(new_state, depth 1, alpha, beta, False))
alpha = max(alpha, value)
if alpha = beta:
break
return value
else:
value = float('inf')
for move in legal_moves:
new_state = game_state.make_move(move)
value = min(value, alphabeta(new_state, depth 1, alpha, beta, True))
beta = min(beta, value)
if beta <= alpha:
break
return value
for move in legal_moves:
new_state = game_state.make_move(move)
value = alphabeta(new_state, depth 1, float('inf'), float('inf'), False)
if value best_value:
best_value = value
best_move = move