Python 极小极大的评价函数
大家好,我正在学习CS50AI课程。第一项任务是使用minimax函数创建Tictaoe AI。我的问题是:据我所知,必须对比赛的位置进行静态评估。我试图用伪代码编写类似的东西: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
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}”的内容。我想这会更容易理解
我澄清了你的疑虑