Я создаю шахматный движок, и у меня возникли проблемы с тем, чтобы он прекратил вычисления из своей рекурсивной негамаксной (минимаксной) структуры. Я хочу, чтобы он возвращал лучший ход, когда истекает заданный срок. Вот как устроен мой код:
# 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 и так далее, что выдаст ошибку.