diff --git a/src/classes/Engines.py b/src/classes/Engines.py index e833692..534699f 100644 --- a/src/classes/Engines.py +++ b/src/classes/Engines.py @@ -8,6 +8,7 @@ class PlayerEngine: self.heuristic = heuristic self.options = options self.interrupt_search = False + self.randomize_moves = False self.logger.info("Init engine {}, options:{}".format( self.__class__.__name__, self.options @@ -18,6 +19,12 @@ class PlayerEngine: self.__class__.__name__, self.get_player_name(self.player) )) + + def get_player_moves(self, board): + if self.randomize_moves is True: + return random.random(board.legal_moves()) + else: + return board.legal_moves() @staticmethod def get_player_name(player): @@ -68,7 +75,7 @@ class MinmaxPlayerEngine(PlayerEngine): nodes = 1 leafs = 0 move = [] - for m in board.legal_moves(): + for m in self.get_player_moves(board): board.push(m) v, n, l = self.checkMinMax(board, False, self.options['depth'] - 1) if v > value: @@ -99,7 +106,7 @@ class MinmaxPlayerEngine(PlayerEngine): if friend_move: value = -math.inf - for m in board.legal_moves(): + for m in self.get_player_moves(board): board.push(m) v, n, l = self.checkMinMax(board, False, depth - 1) if v > value: @@ -110,7 +117,7 @@ class MinmaxPlayerEngine(PlayerEngine): else: value = math.inf - for m in board.legal_moves(): + for m in self.get_player_moves(board): board.push(m) v, n, l = self.checkMinMax(board, True, depth - 1) if v < value: @@ -130,8 +137,7 @@ class AlphabetaPlayerEngine(PlayerEngine): nodes = 1 leafs = 0 move = [] - all_moves = board.legal_moves() - for m in all_moves: + for m in self.get_player_moves(board): board.push(m) value, n, l = self.checkAlphaBeta(board, False, self.options['depth'] - 1, alpha, beta) board.pop() @@ -161,8 +167,7 @@ class AlphabetaPlayerEngine(PlayerEngine): return self.heuristic.get(board, self.player), nodes, leafs if friend_move: - all_moves = board.legal_moves() - for m in all_moves: + for m in self.get_player_moves(board): board.push(m) v, n, l = self.checkAlphaBeta(board, False, depth - 1, alpha, beta) board.pop() @@ -178,8 +183,7 @@ class AlphabetaPlayerEngine(PlayerEngine): return alpha, nodes, leafs else: - all_moves = board.legal_moves() - for m in all_moves: + for m in self.get_player_moves(board): board.push(m) v, n, l = self.checkAlphaBeta(board, True, depth - 1, alpha, beta) board.pop(); @@ -247,7 +251,7 @@ class MinmaxDeepeningPlayerEngine(MinmaxPlayerEngine): class AlphaBetaDeepeningPlayerEngine(AlphabetaPlayerEngine): def get_move(self, board): - super().get_move(board) + #super().get_move(board) self.interrupt_search = False # Get an alarm signal to stop iterations @@ -282,10 +286,16 @@ class AlphaBetaDeepeningPlayerEngine(AlphabetaPlayerEngine): alpha )) depth = depth + 1 - self.logger.debug("id_alphabeta - depth reached: {} | max depth : {}".format( + self.logger.info("id_alphabeta - depth reached: {} | max depth : {}".format( depth - 1, max_depth )) + self.logger.info("Tree statistics:\n\tnodes:{}\n\tleafs:{}\n\theuristic:{}".format( + nodes, + leafs, + alpha + )) + return move def alarm_handler(self, signal, frame):