在最近的一项任务中,我们被赋予了创建黑白棋/黑白棋 AI的任务,该 AI 可以在1 秒内进行有效移动。我从一个简单的机器人开始,它采用所有可用的动作并根据值对它们进行评分。在第二个机器人上,我还为排名添加了移动性价值。现在我制作了一个机器人,它使用 minmax 3 向前搜索并根据分数评估这些动作。我的问题是,它被得分/移动性领先一步的机器人击败。有可能还是我对 AI 进行了错误的编码?是因为我只提前 3 步搜索吗?
我的机器人从这个开始:
possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
for [x, y] in possible_moves:
new_board = self.make_board_copy(board)
new_board[x][y] = self.my_color
new_alpha = self.minmax(new_board,1,alpha,beta)
if new_alpha > alpha:
alpha = new_alpha
best_move = [x,y]
然后到这个:
def minmax(self, board, depth, alpha, beta):
# END NODE
if depth == self.max_depth:
return self.evaluate(board)
else:
# MAX NODE = MY MOVE
if depth % 2 == 0:
possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
for [x, y] in possible_moves:
new_board = self.make_board_copy(board)
new_board[x][y] = self.my_color
new_alpha = self.minmax(new_board,depth+1,alpha,beta)
if new_alpha > alpha:
alpha = new_alpha
if alpha > beta:
return alpha
return alpha
# MIN NODE
else:
possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
for [x,y] in possible_moves:
new_board = self.make_board_copy(board)
new_board[x][y] = self.my_color
new_beta = self.minmax(new_board, depth + 1, alpha, beta)
if new_beta < beta:
beta = new_beta
if beta < alpha:
return beta
return beta
我检查了很多次代码,但仍然无法确定我的代码是否有问题,或者 AI 是否因为搜索不够深入而被击败。