Минимаксный алгоритм искусственного интеллекта не делает правильный выбор

#artificial-intelligence #tic-tac-toe #minimax #godot

Вопрос:

Я попытался внедрить алгоритм минимакса с альфа — /бета-обрезкой для игры TicTacToe, которую я создаю в движке Godot, однако, похоже, он работает не так, как ожидалось. Похоже, ИИ всегда выбирает следующее доступное место на доске слева направо. Может ли кто-нибудь сообщить мне, где я мог ошибиться?

Вот мой код:

 func winner_score() -> int:
    # 0 is X, 1 is Y
    if board.won(0)[0]: return -10
    elif board.won(1)[0]: return 10
    else: return 0

func minimax(_board, _depth: int, alpha, beta, maximizingPlayer: bool):
    var result = winner_score()
    if _depth == 0 or result != 0:
        return result

    if maximizingPlayer:
        var maxEval: int = -100
        for row in range(board.size):
            for col in range(board.size):
                var square = _board[row][col]
                if square.type == null:
                    square.type = HUMAN
                    var eval: int = minimax(_board, _depth - 1, alpha, beta, false)
                    square.type = null
                    maxEval = max(maxEval, eval)
                    alpha = max(alpha, eval)
                    if beta <= alpha: break
        return maxEval

    else:
        var minEval = 100
        for row in range(board.size):
            for col in range(board.size):
                var square = _board[row][col]
                if square.type == null:
                    square.type = AI
                    var eval: int = minimax(_board, _depth - 1, alpha, beta, true)
                    square.type = null          
                    minEval = min(minEval, eval)
                    beta = min(beta, eval)
                    if beta <= alpha: break
        return minEval