我正在创建一个国际象棋引擎,并且在让它停止从其递归负极大(极小极大)框架中计算时遇到了一些麻烦。我希望它在给定的时间限制结束时返回迄今为止的最佳移动。这是我的代码的结构:
# Initial call
move = ai_make_move()
# AI function with iterative deepending
def ai_make_move():
best_move_so_far = []
# Here I init the time
start_time = time.time()
# Iterative deepening to go deeper and deeper into tree
for depth in range(1, max_depth):
move = negamax(alpha, beta, depth...)
best_move_so_far.append(move)
# Negamax function
def negamax(alpha, beta, depth....):
# Here I want to make the time check...
if time.time() - start_time >= time_limit:
# Return None to ai_make_move() or return best_move_so_far[-1] to initial call
for move in possible moves:
make_move()
negamax(-beta, -alpha)
unmake_move()
# ...
我遇到的问题是当 negamax 函数的时间到时停止并将 None 返回给 ai_make_move() 函数以便能够执行类似if not move: return best_move_so_far[-1]
. 或者立即将其返回到初始调用。
是否可以停止这样的递归调用?现在,如果我返回一些东西,它只会返回到先前的 negamax 调用等等,这将给出一个错误。