def test_mcb_search1(self):
        board_size = 3
        start_color_code = HexBoard1.BLUE_CODE
        winner_color_code = HexBoard1.BLUE_CODE

        hex_game: HexBoard1 = HexBoard1(board_size, start_color_code)
        parent_hex_node = None
        hex_game_status = hex_game
        placed_coord_tuple = None
        root_tree_node = MCTSNode(parent_hex_node, hex_game_status,
                                  placed_coord_tuple)
        c_exploration_para = 2

        to_add_tuple_list = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2),
                             (2, 0), (2, 1), (2, 2)]
        for to_add_tuple in to_add_tuple_list:
            hex_child: HexBoard1 = HexBoard1(board_size, start_color_code)
            hex_child.place_with_color(to_add_tuple,
                                       hex_game.turn_of_color_code)
            hex_tree_node: MCTSNode = MCTSNode(hex_game, hex_child,
                                               to_add_tuple)
            hex_tree_node.num_of_win = 1
            hex_tree_node.num_of_sample = 1
            root_tree_node.child_hex_node_list.append(hex_tree_node)

        root_tree_node.num_of_sample = 9

        to_expand_node: MCTSNode = MCTSRule.search(root_tree_node,
                                                   c_exploration_para)
        print("to_expand_node ", to_expand_node)
コード例 #2
0
    def tree_node_reference():
        hexTreeNode1: MCTSNode = MCTSNode(None, None, None)
        hexTreeNode2: MCTSNode = MCTSNode(hexTreeNode1, None, None)

        hexTreeNode1.child_hex_node_list.append(hexTreeNode1)

        parent_node = hexTreeNode2.parent_mcts_node
        print("parent_node: ", parent_node)
        print("parent_node.parent_hex_tree_node: ",
              parent_node.parent_mcts_node)
コード例 #3
0
    def tree_node_reference1():
        hexTreeNode1: MCTSNode = MCTSNode(None, None, None)
        hexTreeNode2: MCTSNode = MCTSNode(hexTreeNode1, None, None)

        hexTreeNode1.child_hex_node_list.append(hexTreeNode2)

        hexTreeNode2.num_of_sample += 1

        print("hexTreeNode1.child_hex_node_list[0].num_of_sample: ",
              hexTreeNode1.child_hex_node_list[0].num_of_sample)
    def test_mcb_search(self):
        board_size = 3
        start_color_code = HexBoard1.BLUE_CODE
        winner_color_code = HexBoard1.BLUE_CODE

        hex_game: HexBoard1 = HexBoard1(board_size, start_color_code)
        parent_hex_node = None
        hex_game_status = hex_game
        placed_coord_tuple = None
        root_tree_node = MCTSNode(parent_hex_node, hex_game_status,
                                  placed_coord_tuple)
        c_exploration_para = 2

        to_expand_tree_node: MCTSNode = MCTSRule.search(
            root_tree_node, c_exploration_para)
        print("to_explore_tree_node: ", to_expand_tree_node.__str__())

        expanded_child_tree_node: MCTSNode = MCTSRule.expand(
            to_expand_tree_node)
        print("expanded_child_tree_node: ", expanded_child_tree_node.__str__())

        winner_color_name: str = hex_game.obtain_color_name(winner_color_code)
        value: int = MCTSRule.simluate(expanded_child_tree_node,
                                       winner_color_name)
        print("value: ", value)

        # rule = MCTSRule()
        MCTSRule.back_propagate(expanded_child_tree_node, value)
        print("root_tree_node: ", root_tree_node)
        print("expanded_child_tree_node: ", expanded_child_tree_node)
コード例 #5
0
    def back_propagate_reference():
        hexTreeNode1: MCTSNode = MCTSNode(None, None, None)
        hexTreeNode2: MCTSNode = MCTSNode(hexTreeNode1, None, None)

        # hexTreeNode1.num_of_win = 1
        # hexTreeNode2.num_of_win = 2
        # list1 = [hexTreeNode1]
        # list1.append(hexTreeNode2)
        # for i in list1:
        #     print(i)

        MCTSRule.back_propagate(hexTreeNode2, 1)
        hexTreeNode1.child_hex_node_list.append(hexTreeNode2)
        hexTreeNode2.num_of_sample += 1

        print("hexTreeNode2: ", hexTreeNode2)
        print("hexTreeNode1: ", hexTreeNode1)
    def test_search_when_one_move_left(self):
        hex_board: HexBoard1 = HexBoard1(3, HexBoard1.BLUE_CODE)
        hex_board.place_with_color((0, 0), HexBoard1.BLUE_CODE)
        hex_board.place_with_color((1, 1), HexBoard1.BLUE_CODE)
        hex_board.place_with_color((2, 0), HexBoard1.BLUE_CODE)
        hex_board.place_with_color((2, 1), HexBoard1.BLUE_CODE)
        hex_board.place_with_color((1, 0), HexBoard1.RED_CODE)
        hex_board.place_with_color((2, 2), HexBoard1.RED_CODE)
        hex_board.place_with_color((1, 2), HexBoard1.RED_CODE)
        hex_board.place_with_color((0, 1), HexBoard1.RED_CODE)
        hex_board.print_board_ui()
        print("hex_board.hex_board.is_game_over: ", hex_board.is_game_over)

        tree_node: MCTSNode = MCTSNode(None, hex_board, (0, 0))

        to_expand_tree_node = MCTSRule.search(tree_node, 2)
        print("to_expand_tree_node: ", to_expand_tree_node)
コード例 #7
0
to_expand_tree_node: MCTSNode = None

win_record_dict = {"BLUE": 0, "RED": 0}

for game_cnt in range(1, num_of_games + 1):
    root_hex_game = HexBoard1(board_size,
                              starting_color_code)  # current game status
    while not root_hex_game.is_game_over:
        # print("round ", root_hex_game.turn_counter, ".", root_hex_game.obtain_turn_of_color_name(), "'s turn. ")

        if root_hex_game.turn_of_color_code == winner_color_code:
            parent_hex_node = None
            placed_color_tuple: tuple = None
            hex_tree_root_node: MCTSNode = MCTSNode(
                parent_hex_node, root_hex_game.copy_hex_board(),
                placed_color_tuple)
            hex_tree_root_node.num_of_possible_child = len(
                root_hex_game.empty_coord_tuple_list)

            wasted_search_count: int = 0
            for simulation in range(0, num_of_simulations_per_turn):
                is_root_node_exhausted: bool = (
                    hex_tree_root_node.num_of_exhausted_child ==
                    hex_tree_root_node.num_of_possible_child)
                if is_root_node_exhausted:
                    print("root_node_exhausted")
                    break

                best_tree_node_to_expand: MCTSNode = MCTSRule.search(
                    hex_tree_root_node, c_exploration_para)