Python 从alpha beta返回移动

Python 从alpha beta返回移动,python,minimax,alpha-beta-pruning,Python,Minimax,Alpha Beta Pruning,我正在尝试使用alpha-beta-minimax修剪算法从我的棋盘上返回一个有效的移动。算法返回正确的值,但我不知道如何返回移动。对于这段代码,当bestValue的值大于当前alpha时,我希望返回get_succession_states中的子级。我曾想过在max和min的末尾返回两个值,比如return bestValue,child,但我不知道如何让它与其他调用一起工作 def alpha_beta_pruning(board, depth, alpha, beta, isMaximi

我正在尝试使用alpha-beta-minimax修剪算法从我的棋盘上返回一个有效的移动。算法返回正确的值,但我不知道如何返回移动。对于这段代码,当bestValue的值大于当前alpha时,我希望返回
get_succession_states
中的子级。我曾想过在max和min的末尾返回两个值,比如
return bestValue,child
,但我不知道如何让它与其他调用一起工作

def alpha_beta_pruning(board, depth, alpha, beta, isMaximizingPlayer):

    if depth == 0:
        return evaluate_state(board)
    if isMaximizingPlayer:
        bestValue = -sys.maxint - 1
        bestMove = None
        for child in get_successor_states(board):
            temp_board = copy.deepcopy(board)
            temp_board.move_queen(child[0], child[1])
            temp_board.shoot_arrow(child[2])
            bestValue = max(bestValue, alpha_beta_pruning(temp_board, depth-1, alpha, beta, False))
            del temp_board
            alpha = max(alpha, bestValue)
            if beta <= alpha:
                break
        return bestValue
    else:
        bestValue = sys.maxint
        for child in get_successor_states(board):
            temp_board = copy.deepcopy(board)
            temp_board.move_queen(child[0], child[1])
            temp_board.shoot_arrow(child[2])
            bestValue = min(bestValue, alpha_beta_pruning(temp_board, depth-1, alpha, beta, True))
            del temp_board
            beta = min(beta, bestValue)
            if beta <= alpha:
                break
        return bestValue
def alpha_beta_修剪(棋盘、深度、alpha、beta、isMaximizingPlayer):
如果深度=0:
返回状态(板)
如果isMaximizingPlayer:
最佳值=-sys.maxint-1
最佳移动=无
对于处于get_继任_州(董事会)的儿童:
临时板=复制。深度复制(板)
临时板移动(子[0],子[1])
临时板射箭(儿童[2])
最佳值=最大值(最佳值,α-β-修剪(临时板,深度-1,α,β,假))
临时董事会
alpha=最大值(alpha,最佳值)
如果β