#python #minimax #alpha-beta-pruning
#python #минимакс #альфа-бета-обрезка
Вопрос:
Я пытаюсь использовать алгоритм минимаксной обрезки альфа-бета, чтобы вернуть действительный ход с моей доски. Алгоритм возвращает правильное значение, но я понятия не имею, как бы я также вернул перемещение. В случае этого кода я бы хотел вернуть дочерний get_successor_states
элемент, когда значение bestValue больше текущей альфы. Я думал о возврате двух значений в конце max и min, return bestValue, child
но я понятия не имею, как заставить это работать с другими вызовами
def alpha_beta_pruning(board, depth, alpha, beta, isMaximizingPlayer):
if depth == 0:
return evaluate_state(board)
if isMaximizingPlayer:
bestValue = -sys.maxint - 1
bestMove = None
for child in get_successor_states(board):
temp_board = copy.deepcopy(board)
temp_board.move_queen(child[0], child[1])
temp_board.shoot_arrow(child[2])
bestValue = max(bestValue, alpha_beta_pruning(temp_board, depth-1, alpha, beta, False))
del temp_board
alpha = max(alpha, bestValue)
if beta <= alpha:
break
return bestValue
else:
bestValue = sys.maxint
for child in get_successor_states(board):
temp_board = copy.deepcopy(board)
temp_board.move_queen(child[0], child[1])
temp_board.shoot_arrow(child[2])
bestValue = min(bestValue, alpha_beta_pruning(temp_board, depth-1, alpha, beta, True))
del temp_board
beta = min(beta, bestValue)
if beta <= alpha:
break
return bestValue