在最近的一个分配中,我们有一个任务是创建 Reversi / Othello AI ,这可以在 1s 下进行一次移动。我已经开始使用简单的机器人,它采用所有可用的移动并根据值对其进行评分。在第二个机器人上,我还为排名增加了移动性价值。现在我已经制作了bot,其中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被殴打。
答案 0 :(得分:1)
如果它使用相同的评估,我认为较低深度搜索不太可能击败更高深度的搜索,并且可能是不可能的。
你能解释一下alpha和beta,以及minmax的功能,或者显示更多的代码吗? alpha和beta都是正面的吗?
我认为你的奇数节点函数可能有问题:
x=a^(1/(n-m))
如果alpha和beta都是正值,那么你希望第一行是
if new_beta < beta:
beta = new_beta
if beta < alpha:
return beta
这也取决于你在董事会中的得分如何。这显然非常重要 - 我不知道你的AI是否试图通过比赛来学习这一点,或者你是否根据各种位置因素和判断给出了评估。