Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Connect 4的Alpha-Beta-Minimax_Python_Alpha Beta Pruning - Fatal编程技术网

Python:Connect 4的Alpha-Beta-Minimax

Python:Connect 4的Alpha-Beta-Minimax,python,alpha-beta-pruning,Python,Alpha Beta Pruning,我正在尝试将Python中的minimax用于Connect 4作为个人项目来实现AI。目前我有这个 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] pa

我正在尝试将Python中的minimax用于Connect 4作为个人项目来实现AI。目前我有这个

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

关于这个问题,你需要更具体一些。尝试将棋盘设置为即将获胜的棋盘,向我们显示配置和您期望发生的情况,并告诉我们实际发生的情况。添加了一个问题示例。myBoard.isWon()返回一个形式的元组(布尔值,如果有人赢了或没有赢,哪个玩家赢了)。
 0 1 2 3 4 5 6
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | |O| | |
| | |X|O|O| | |
|X|X|O|X|O|X|X|
---------------
 0 1 2 3 4 5 6