- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在最近的一项任务中,我们的任务是创建Reversi/Othello AI,它可以在 1s 下做出有效的移动。我从一个简单的机器人开始,它采用所有可用的 Action 并根据带有值的棋盘对它们进行评分。在第二个机器人上,我还为排名添加了移动性值(value)。现在我制作了一个机器人,它使用 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 搜索不够深入而被打败了。
最佳答案
如果它使用相同的评估,我认为较低深度的搜索不太可能胜过较高深度的搜索,而且很可能是不可能的。
您能否解释一下 alpha 和 beta,以及 minmax 的更多功能,或者显示更多代码? alpha 和 beta 总是正数吗?
我认为你的奇节点函数可能有问题:
if new_beta < beta:
beta = new_beta
if beta < alpha:
return beta
如果 alpha 和 beta 都是正值,那么你希望第一行是
if new_beta > beta:
这还取决于您在棋盘上的位置得分。这显然非常重要 - 我不知道您的 AI 是否试图通过玩耍来学习这一点,或者您是否已经根据各种位置因素和判断对其进行了评估。
关于Python Reversi/Othello AI 在 1 秒内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166357/
我刚刚研究了heuristic functions,但是找不到关于黑白棋启发式函数的想法(Othello),我只需要一个很好的想法来对板的某些状态进行评分 我想到了: 计数移动次数 盘数 并计算转角处
我正在创建一个玩黑白棋的简单引擎,使用带 alpha beta 削减的 minimax。它玩得很好,但有时我会得到一个奇怪的索引越界异常(靠近残局,总是)。 这是我的算法 private float
我目前正在尝试为奥赛罗制作一个好的 AI,并且已经使用 Minimax 算法完成了。然而,当我尝试使用 alpha-beta 修剪进行更深入的搜索时,该算法似乎运行得很糟糕。我用 Wiki 和 Ber
在最近的一项任务中,我们的任务是创建Reversi/Othello AI,它可以在 1s 下做出有效的移动。我从一个简单的机器人开始,它采用所有可用的 Action 并根据带有值的棋盘对它们进行评分。
我是一名优秀的程序员,十分优秀!