Negamax 截止 Return 值?

Negamax Cut-off Return Value?

我的 Negamax 算法有问题,希望有人能帮助我。

我正在用 Cython 编写它

我的搜索方法如下:

cdef _search(self, object game_state, int depth, long alpha, long beta, int max_depth):
    if depth == max_depth or game_state.is_terminated:
            value = self.evaluator.evaluate(game_state) evaluates based on current player
            return value, []

    moves = self.prepare_moves(depth, game_state) # getting moves and sorting 
    max_value = LONG_MIN

    for move in moves:
        new_board = game_state.make_move(move) 
       
        value, pv_moves = self._search(new_board, depth + 1, -beta, -alpha, max_depth, event)
        value = -value

        if max_value < value:
            max_value = value
            best_move = move
            best_pv_moves = pv_moves

        if alpha < max_value:
            alpha = max_value

        if max_value >= beta:
            return LONG_MAX, []

    best_pv_moves.insert(0, best_move)

    return alpha, best_pv_moves

在许多示例中,您会在检测到截止点后中断,但当我这样做时,算法找不到最佳解决方案。我正在测试一些国际象棋谜题,我想知道为什么会这样。如果我 return 检测到截止后的最大数量它工作正常但我需要很长时间(深度 6 为 252 秒)...

速度:秒前节点:21550.33203125

或者,如果您有其他改进,请告诉我(我使用换位 table、PVS 和杀手启发法)

原来我用的是c limits

cdef extern from "limits.h":
    cdef long LONG_MAX
    cdef long LONG_MIN

并且当您尝试使用 -LONG_MIN 反转 LONG_MIN 时,由于溢出,您会得到 LONG_MIN?