【发布时间】:2021-03-15 06:17:15
【问题描述】:
我创建了一个使用 minimax 和 alpha beta 修剪的国际象棋机器人,同时我还创建了一个 GUI。但是我的机器人在变得非常缓慢之前不能深入。已经在深度 4 中找到移动可能需要 40-50 秒。
算法如下:
def minimax(depth,board, alpha, beta, is_max):
if depth == 0:
return evaluation(board)
leg_moves = board.legal_moves
if is_max:
value = -9999
for i_move in leg_moves:
move = chess.Move.from_uci(str(i_move))
board.push(move)
value = max(value, minimax(depth - 1, board, alpha, beta, False))
board.pop()
alpha = max(alpha, value)
if beta <= alpha:
return value
return value
else:
value = 9999
for i_move in leg_moves:
move = chess.Move.from_uci(str(i_move))
board.push(move)
value = min(value, minimax(depth - 1, board, alpha, beta, True))
board.pop()
beta = min(beta, value)
if(beta <= alpha):
return value
return value
总而言之,我怎样才能让它更快?
【问题讨论】:
-
你分析过你的代码吗?瓶颈是什么?在大多数情况下,问题是算法慢而不是代码慢。您正在尝试所有可能的合法举措。 AFAIK 国际象棋引擎使用启发式算法。
-
另一个重要因素是通过多个移动序列可以到达相同的位置,因此缓存位置分析是有好处的。
标签: python algorithm chess minimax alpha-beta-pruning