def find_next_move(self, board, current_player): """ Define an end time which will act as a terminating condition """ tree = Tree() rootNode = tree.get_root() rootNode.state.board = board rootNode.state.set_player(current_player) self.opponent = 3 - current_player move_epochs = 50000 for _ in range(move_epochs): promising_node = self.select_promising_node(rootNode) if promising_node.get_state().get_board().check_game_state() == -1: self.expand_node(promising_node) nodeToExplore = promising_node if len(promising_node.get_children()) > 0: nodeToExplore = promising_node.get_random_child() playoutResult = self.simulate_random_playout(nodeToExplore) self.back_propogation(nodeToExplore, playoutResult) winnerNode = rootNode.get_child_with_max_score() tree.set_root(winnerNode) newBoard = deepcopy(winnerNode.get_state().get_board()) return newBoard
from node import Node, Tree from bfs import bfs_traversal from dfs import dfs_traversal from tree_traversals import in_order_traversal, pre_order_traversal, post_order_traversal first_tree_dict = { "a": ("b", "c"), "b": ("d", "e"), "c": ("h", "i"), "d": ("f", "g") } other_tree_dict = { "a": ("b", "b"), "b": ("c", "c"), "c": ("d", "d"), "d": ("e", "e"), "e": ("f", "f") } if __name__ == "__main__": first_tree = Tree("a", first_tree_dict) other_tree = Tree("a", other_tree_dict) print(dfs_traversal(first_tree.get_root()))