Передача возвращаемого значения из моего метода 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)

0 ответов

Другие вопросы по тегам