You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

井字棋Minimax函数未返回最优走法,仅按棋盘顺序输出问题排查

井字棋Minimax AI异常问题

我基于Minimax算法结构实现了井字棋AI,player函数本应返回当前局面的最优走法,但实际表现为仅按棋盘顺序返回可用空位(遇到已占据的位置就跳过,逻辑类似if board[move] != None: board[move + 1] = "O")。已独立验证Actions、Result、Terminal、Utility等辅助函数的逻辑均合理,仍无法定位问题所在。

核心AI逻辑代码

def player(board):
    if Terminal(board) != False:
        return None
    else:
        if turn(board) == "X":
            value,move = max_value(board)
            return move + 1
        else:
            value,move = min_value(board)
            return move + 1
    

def max_value(board):
    global arg
    if Terminal(board) != False:
        ut = Utility(board)
        return ut,None
    else:
        v = -1000
        move = None

        for action in Actions(board):
            aux,act = min_value(Result(board,action))
            if aux > v:
                v = aux
                move = action
                if v == 1:
                    return v,move
        return v,move

def min_value(board):
    if Terminal(board) != False:
        ut = Utility(board)
        return ut,None
    else:
        v = 1000
        move = None
        print(Actions(board))
        for action in Actions(board):
            aux,act = max_value(Result(board,action))
            if aux < v:
                v = aux
                move = action
                if v == -1:
                    return v,move
        return v,move

辅助函数代码

def Actions(board = list):
    possible_moves = []
    n = -1
    for move in board:
        n += 1
        if move == None: 
            possible_moves.append(n)
    return possible_moves

def Result(board,action):
    dc_board = board.copy()
    dc_board[action] = turn(board)
    return dc_board

def Terminal(board):

    if board[0] == board[1] == board[2] and board[0] != None:
        return board[0]
    elif board[3] == board[4] == board[5] and board[3] != None:
        return board[3]
    elif board[6] == board[7] == board[8] and board[6]!= None:
        return board[6]
    elif board[0] == board[3] == board[6] and board[0] != None:
        return board[0]
    elif board[1] == board[4] == board[7] and board[1] != None:
        return board[1]
    elif board[2] == board[5] == board[8] and board[2] != None:
        return board[2]
    elif board[0] == board[5] ==board[8]  and board[0]!= None:
        return board[0]
    elif board[2] == board[4] == board[6] and board[2] != None:
        return board[2]
    else:
        return False
def Utility(board):
    result = Terminal(board)
    if result == False:
        return 0 
    elif result == "X":
        return 1
    elif result == "O":
        return -1
    else:
        print("Result:")
        print(result)
        print("Board:")
        print(board)
        raise "Utility conditions were not met."

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:10:26