diff --git a/src/classes/Engines.py b/src/classes/Engines.py index 6ba13f6..242c41f 100644 --- a/src/classes/Engines.py +++ b/src/classes/Engines.py @@ -64,8 +64,6 @@ class MinmaxPlayerEngine(PlayerEngine): def get_move(self, board): super().get_move(board) - - def get_best_move(board): value = -math.inf nodes = 1 leafs = 0 @@ -124,30 +122,32 @@ class AlphabetaPlayerEngine(PlayerEngine): def get_move(self, board): super().get_move(board) + self.logger.debug("Enter AlphaBeta function") alpha = -math.inf beta = math.inf nodes = 1 leafs = 0 move = [] - value = -math.inf - for m in board.legal_moves(): + all_moves = board.legal_moves() + # random.shuffle(all_moves) + for m in all_moves: board.push(m) - v, n, l = self.checkAlphaBeta(board, False, self.options['depth'] - 1, alpha, beta) + value, n, l = self.checkAlphaBeta(board, False, self.options['depth'] - 1, alpha, beta) board.pop() - alpha = max(alpha,v) nodes += n leafs += l - if alpha >= value: - value = alpha + if value >= alpha: + alpha = value move = m - self.logger.debug("found a better move: {} (heuristic:{})".format( + self.logger.debug("\t-> found a better move: {} | heuristic:{})".format( move, alpha )) - self.logger.debug("Tree statistics:\n\tnodes:{}\n\tleafs:{}".format( + self.logger.info("Tree statistics:\n\tnodes:{}\n\tleafs:{}\n\theuristic:{}".format( nodes, - leafs + leafs, + alpha )) return move @@ -160,36 +160,38 @@ class AlphabetaPlayerEngine(PlayerEngine): return self.heuristic.get(board, self.player), nodes, leafs if friend_move: - value = -math.inf - for m in board.legal_moves(): + all_moves = board.legal_moves() + random.shuffle(all_moves) + for m in all_moves: board.push(m) v, n, l = self.checkAlphaBeta(board, False, depth - 1, alpha, beta) board.pop() - alpha = max(value,v) + alpha = max(alpha,v) nodes += n leafs += l if alpha >= beta: - # self.logger.debug("Alpha pruning - alpha:{} / beta:{}".format( - # alpha, - # beta - # )) + self.logger.debug("\t - Beta pruning - alpha:{} / beta:{}".format( + alpha, + beta + )) return beta, nodes, leafs return alpha, nodes, leafs else: - value = math.inf - for m in board.legal_moves(): + all_moves = board.legal_moves() + random.shuffle(all_moves) + for m in all_moves: board.push(m) v, n, l = self.checkAlphaBeta(board, True, depth - 1, alpha, beta) board.pop(); - beta = min(beta,v) + beta = min(beta, v) nodes += n leafs += l if alpha >= beta: - # self.logger.debug("Beta pruning - alpha:{} / beta:{}".format( - # alpha, - # beta - # )) + self.logger.debug("\t - Alpha pruning | alpha:{} | beta:{}".format( + alpha, + beta + )) return alpha, nodes, leafs return beta, nodes, leafs