Python 极小极大的评价函数

Python 极小极大的评价函数,python,artificial-intelligence,cs50,minimax,Python,Artificial Intelligence,Cs50,Minimax,大家好,我正在学习CS50AI课程。第一项任务是使用minimax函数创建Tictaoe AI。我的问题是:据我所知,必须对比赛的位置进行静态评估。我试图用伪代码编写类似的东西: If next move is a winning move: return 10 point elif opponent is going to win stop him: return 8 point 这类事情。但当我检查其他最小值-最大值函数时,却没有这样的事情 def minimax(boar

大家好,我正在学习CS50AI课程。第一项任务是使用minimax函数创建Tictaoe AI。我的问题是:据我所知,必须对比赛的位置进行静态评估。我试图用伪代码编写类似的东西:

If next move is a winning move:
    return 10 point
elif opponent is going to win stop him:
    return 8 point
这类事情。但当我检查其他最小值-最大值函数时,却没有这样的事情

def minimax(board):
    """
    Returns the optimal action for the current player on the board.
    """
    currentactions = actions(board)
    if player(board) == X:
        vT = -math.inf
        move = set()
        for action in currentactions:
            v, count = maxvalue(result(board,action), 0)
            if v > vT:
                vT = v
                move = action
    else:
        vT = math.inf
        move = set()
        for action in currentactions:
            v, count = minvalue(result(board,action), 0)
            if v < vT:
                vT = v
                move = action
    print(count)
    return move

    def maxvalue(board, count):
        """
        Calculates the max value of a given board recursively together with minvalue
        """
    
        if terminal(board): return utility(board), count+1
    
        v = -math.inf
        posactions = actions(board)
    
        for action in posactions:
            vret, count = minvalue(result(board, action), count)
            v = max(v, vret)
        
        return v, count+1
    
    def minvalue(board, count):
        """
        Calculates the min value of a given board recursively together with maxvalue
        """
    
        if terminal(board): return utility(board), count+1
    
        v = math.inf
        posactions = actions(board)
    
        for action in posactions:
            vret, count = maxvalue(result(board, action), count)
            v = min(v, vret)
        
        return v, count+1
def minimax(电路板):
"""
返回棋盘上当前玩家的最佳动作。
"""
当前动作=动作(板)
如果玩家(棋盘)=X:
vT=-math.inf
move=set()
对于currentactions中的操作:
v、 计数=最大值(结果(板、动作),0)
如果v>vT:
vT=v
移动=动作
其他:
vT=math.inf
move=set()
对于currentactions中的操作:
v、 计数=最小值(结果(板、动作),0)
如果v

这是sikburn的TictaToe实现的最大-最小函数。我无法理解最大值或最小值函数会产生什么结果。谁能澄清我的逻辑吗?顺便说一下,
terminal()
函数检查游戏是否结束(有赢家或平局),并且
result()
函数将棋盘和动作作为输入并返回结果棋盘。谢谢您的帮助。

实用程序
功能中(不包括在您的代码中),您可能将1分配给X victory,-1分配给O victory,0分配给其他。
minimax
函数递归调用
minvalue
maxvalue
所有可能的移动,直到游戏结束,无论是平局还是胜利。然后它调用
实用程序
来获取值。
minvalue
maxvalue
确保X和O始终选择可能的最佳移动

不要忘记检查电路板是否为终端,如果是,在继续操作之前,在
minimax
功能中返回
None

交换
minimax
minvalue
maxvalue
函数的调用:对于X,调用
minvalue
(因为X想知道O的下一步),对于O,调用
maxvalue
(出于同样的原因)

如果您想在每次迭代中查看评估,可以在返回这些值之前,在
Minvalue
Maxvalue
函数的末尾打印类似于
f“Minvalue:{v},迭代:{count+1}”的内容。我想这会更容易理解


我澄清了您的疑问。

实用程序
功能中(不包括在您的代码中),您可能将1分配给X victory,-1分配给O victory,0分配给其他。
minimax
函数递归调用
minvalue
maxvalue
所有可能的移动,直到游戏结束,无论是平局还是胜利。然后它调用
实用程序
来获取值。
minvalue
maxvalue
确保X和O始终选择可能的最佳移动

不要忘记检查电路板是否为终端,如果是,在继续操作之前,在
minimax
功能中返回
None

交换
minimax
minvalue
maxvalue
函数的调用:对于X,调用
minvalue
(因为X想知道O的下一步),对于O,调用
maxvalue
(出于同样的原因)

如果您想在每次迭代中查看评估,可以在返回这些值之前,在
Minvalue
Maxvalue
函数的末尾打印类似于
f“Minvalue:{v},迭代:{count+1}”的内容。我想这会更容易理解

我澄清了你的疑虑