def getAlphaBetaMove(board, parser): import MoveNode as MoveNode depth = 1 AIagent = AI(board, True, depth) legalMoves = board.getAllMovesLegal(board.currentSide) bestMove = None moveTree = AIagent.generateMoveTree() legalBestMoves = AIagent.bestMovesWithMoveTree(moveTree) #conLegalMoves = AIagent.getAllMovesLegalConcurrent(board.currentSide) def alphaBetaMax(alpha, beta, depth): global bestMove value = -float(999999) #if (depth == 0 or board.isCheckmate or board.isStalemate): if (depth == 0): return (board.getPointValueOfSide(board.currentSide), ) random.shuffle(legalBestMoves) for move in legalBestMoves: random.shuffle(legalMoves) for m in legalMoves: random.shuffle(legalMoves) value = max(value, alphaBetaMin(alpha, beta, depth - 1)[0]) if (value >= beta): return beta, m if (value > alpha): alpha = value bestMove = m bestMove.notation = parser.notationForMove(bestMove) #return {'alpha': alpha, 'bestMove': bestMove} return alpha, bestMove #return bestMove def alphaBetaMin(alpha, beta, depth): global bestMove value = float(999999) #if (depth == 0 or board.isCheckmate or board.isStalemate): if (depth == 0): return (-board.getPointValueOfSide(board.currentSide), ) random.shuffle(legalBestMoves) for move in legalBestMoves: random.shuffle(legalMoves) for m in legalMoves: random.shuffle(legalMoves) value = min(value, alphaBetaMax(alpha, beta, depth - 1)[0]) if (value <= alpha): return alpha, m if (value < beta): beta = value bestMove = m bestMove.notation = parser.notationForMove(bestMove) #return {'beta': beta, 'bestMove': bestMove} return beta, bestMove #return bestMove score, action = alphaBetaMax(-999999, 999999, 3) return score, action