Передача возвращаемого значения из моего метода negmax
Я работал над этим, по крайней мере, несколько дней. Тестирование показывает, что возвращается правильное значение. Моя проблема в том, чтобы взять best_move
значение и распечатать его. Я настроил suggested_move
метод и попробуйте использовать return suggested_move(best_move)
но он запускает метод для каждого уровня резервного копирования дерева. Кроме того, он возвращает неправильное значение, которое я предполагаю, потому что он останавливается до того, как глубина вернется к 0.
В моем минимаксе у меня была похожая установка, разница в том, что глубина была увеличена (не уменьшена) при последовательных вызовах. Дело в том, что я мог сказать if depth == 0 p best_move
, Поэтому я почесываю голову, потому что, используя то же условное выражение, я получаю ошибку с нулевым классом в этом коде.
@board = ["X","O","O","X","X","","","O",""]
def available_spaces
@board.map.with_index {|a, i| a == "" ? i+1 : nil}.compact
end
def suggested_move(move)
p "Suggested move: #{move}"
end
def full?
@board.all?{|token| token == "X" || token == "O"}
end
def suggested_move(move)
p "Move: #{move}"
end
def bestmove(board, depth=0, best_score = {})
return 0 if full?
return 1 if won?
best = -Float::INFINITY
available_spaces.each do |space|
@board[space-1] = current_player
best_score[space] = -bestmove(@board, depth-1, {})
@board[space-1] = ""
end
p best_score
if best_score.max_by {|key,value| value }[1] > best
best = best_score.max_by {|key,value| value }[1]
best_move = best_score.max_by {|key,value| value }[0]
end
return best_move
end
bestmove(@board)