Python: Alpha Beta Minimax for Connect 4

2024-09-24 22:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python中的minimax实现一个AI,将connect4作为一个个人项目。目前我有这个。在

def alphaBeta(myBoard, column, depth, alpha, beta, player):
    parent = board()
    for r in range(ROWS):
        for c in range(COLUMNS):
            parent.board[r][c] = myBoard.board[r][c]
    parent.move(column, player)
    if parent.isFull() or parent.isWon()[0] or depth <= 0:
        if parent.isFull(): return 0
        if parent.isWon()[1] == player: return float('inf')
        elif parent.isWon()[0]: return -1*float('inf')
        else: return statScore(parent, player)
    if player == "O":
        for child in range(COLUMNS):
            alpha = max(alpha, alphaBeta(parent, child, depth-1, alpha, beta, "X"))
            if beta <= alpha:
                break
        return alpha
    else:
        for child in range(COLUMNS):
            beta = min(beta, alphaBeta(parent, child, depth-1, alpha, beta, "O"))
            if beta <= alpha:
                break
        return beta

def ai(myBoard, depth):
    output = []
    bestScore = float('inf')
    for column in range(COLUMNS):
        if myBoard.isValid(column):
            score = alphaBeta(myBoard, column, depth, -1*float('inf'), float('inf'), "O")
            if score < bestScore:
                output = [column]
                bestScore = score
            elif score == bestScore:
                output.append(column)
    move = random.choice(output)
    return move

然而,由于某些原因,计算机不会做出一个成功的举动。E、 有了这个棋盘,计算机应该在第4栏中获胜。然而,它实际上在第3栏中播放。在

^{pr2}$

Tags: inalphaforreturnifrangecolumnfloat