Я решил создать игру Tic Tac Toe с платой 11x11, условие выигрыша - 5 соток X
или O
в строке (по вертикали, по горизонтали или по диагонали) или когда доска заполнена , т. е. невозможно двигаться влево.Найти возможные шаги для минимаксного алгоритма Tic Tac Toe
Я создаю противника противника, который использует минимаксный алгоритм, чтобы найти лучший ход на доске. Псевдокод минимакса (с альфа-бета отсечение) выглядит следующим образом:
function alphabeta(node, depth, α, β, maximizingPlayer)
if the game ends:
return the heuristic value of the current state
if maximizingPlayer
v := -∞
for each possible move in board // notice this
v := max(v, alphabeta(child, depth – 1, α, β, FALSE))
α := max(α, v)
if β ≤ α
break (* β cut-off *)
return v
else
....
Первоначально размер Tic-Tac-Toe борту только 3х3, что означает, что нет много пустой ячейки цикличным минимакса. Но с платой 11x11 есть 121 ячеек!
Например, если первый поворот X
, то O
имеет 120 возможных ходов. O попробует каждый ход, чтобы найти лучшее значение для воспроизведения, и поэтому время работы функции факториально равно 120.
Вопрос в том, можем ли мы как-нибудь уменьшить возможные ходы? Например, если первый игрок перемещается где-то в центре, нам не нужно проверять минимакс для некоторых угловых или крайних ячеек.
Я нашел способ, который использует «окрестности Мура» для выбора всех ячеек, смежных с каждой отмеченной ячейкой, и пуст, чтобы быть «возможными», это может немного уменьшить временную сложность. –