コード例 #1
0
ファイル: test_Tree.py プロジェクト: dpvdberg/pyfloorplanner
    def test_print(self):
        m1 = Module('a', ModuleType.HARD, Dimensions(1, 1), Vector2(0, 0))
        m2 = Module('b', ModuleType.HARD, Dimensions(1, 1), Vector2(0, 0))

        n2 = Node(m2)
        n1 = Node(m1, right=n2)

        t = Tree(n1, [n1, n2])
        t.print()
コード例 #2
0
ファイル: Tree_Model.py プロジェクト: falkenber9/LIMITS
	def init(self, _lines, _attributes):
		self.attributes = CSV().createAttributeDict(_attributes, self.discretization)

		lines = _lines

		self.root = Node(0, 0, "", "")
		lastNode = self.root
		depth = 0

		for line in lines:
			if len(line)==0:
				continue

			d = len(line.split("|"))
			condition = line.split("|")[-1].split(" : ")[0].strip(" ")

			result = ""
			if " : " in line and "(" in line:
				result = line.split("|")[-1].strip(" ").split(" : ")[1].split("(")[0]
				self.leaves += 1

				# TODO: IF THE RESULT IS NOMIMAL, ADD ""

			self.depth = max(d, self.depth)
			if d>depth: # left child -> if
				node = Node(lastNode, d, condition, result)
				self.nodes += 1

				lastNode.leftChild = node
				lastNode = node
			elif d<depth:
				delta = depth - d
				parent = lastNode.parent
				for i in range(0, delta):
					parent = parent.parent

				node = Node(parent, d, "else", result)
				self.nodes += 1

				parent.rightChild = node
				lastNode = node
			else: # right child -> else
				parent = lastNode.parent
				node = Node(parent, d, "else", result)
				parent.rightChild = node
				lastNode = node
			depth = d
		
		return self.root
コード例 #3
0
ファイル: Graph.py プロジェクト: MarshalX/Halite
    def __init__(self, game_map):
        self.width = game_map.width
        self.height = game_map.height

        self.nodes_count = self.width * self.height
        self.links_count = self.nodes_count * 4

        self._nodes = [
            Node(number, number % self.width, number // self.height)
            for number in range(self.nodes_count)
        ]
        self._links = []

        self.build_links()
        self._set_weight(game_map)
コード例 #4
0
ファイル: test_Tree.py プロジェクト: dpvdberg/pyfloorplanner
    def test_insert3(self):
        modules = [Module(str(i), ModuleType.HARD, Dimensions(100, 100), Vector2(0, 0)) for i in range(20)]
        t = TreeBuilder.random_tree(modules, seed=1)

        random.seed(1)
        n = Node(Module(str(21), ModuleType.HARD, Dimensions(100, 100), Vector2(0, 0)))
        p = None
        insertLeft = False

        print(f"inserting node {n.id} as root")
        logging.getLogger("pyfloorplanner").setLevel(logging.DEBUG)

        t.nodes.append(n)

        t.insert(n, p, insertLeft)
コード例 #5
0
    def balanced_tree(modules: List[Module]) -> Tree:

        nodes = [Node(m) for m in modules]

        for i in range(len(modules)):
            nodes[i].id = i
            nodes[i].parent = nodes[int((i + 1) / 2 - 1)]
            nodes[i].left = nodes[2 * i +
                                  1] if 2 * i + 1 < len(modules) else None
            nodes[i].right = nodes[2 * i +
                                   2] if 2 * i + 2 < len(modules) else None

        nodes[0].parent = None
        root = nodes[0]

        return Tree(root, nodes)
コード例 #6
0
    def random_tree(modules: List[Module], seed=None) -> Tree:
        '''
        Creates a random tree for the given list of modules
        :param seed: Seed for randomness
        :param modules: list of modules for to create nodes
        :return: A B-tree
        '''
        random.seed(seed)
        reset_node_id()

        nodes = [Node(m) for m in modules]
        queue = nodes.copy()
        random.shuffle(nodes)
        root = queue.pop()

        # (node, True) for indicating that the left child of node is free, (node, False) for the right child of node
        free_places = [(root, True), (root, False)]
        while len(queue) > 0:
            placement_node = queue.pop()

            free_place = random.choice(free_places)
            free_places.remove(free_place)

            parent, left = free_place

            # Place node in free place
            if left:
                parent.left = placement_node
            else:
                parent.right = placement_node

            placement_node.parent = parent

            free_places.extend([(placement_node, True),
                                (placement_node, False)])

        return Tree(root, nodes)
コード例 #7
0
    def make_node(self, df: DataFrame, mainEntropy):
        nodes = list()
        attributes_info_gain = dict()
        columns = df.columns[:-1]
        for column in columns:
            attributes_info_gain.update({
                column:
                self.calculate_attribute_entropy(column, df, mainEntropy)
            })

        best_attribute = max(attributes_info_gain,
                             key=attributes_info_gain.get)
        values = df[best_attribute].unique().tolist()
        if attributes_info_gain.get(
                best_attribute
        ) < 0.05:  #jeśli info gain mniejsze niż 0,05 nie ma sensu dzielić
            return None  # przerywam wykonane funkcji
        for value in values:
            tmp_df = df.loc[df[best_attribute] == value]
            classes = tmp_df[tmp_df.columns[-1]].nunique()
            if classes == 1 or len(
                    columns) == 1:  # obiekty jednej klasy - robimy liść
                node: Node = Node('leaf', '', tmp_df)
                nodes.append(node)
            else:
                tmp_df = tmp_df.drop([best_attribute], axis=1)
                node: Node = Node('node', '', tmp_df)
                node_main_entropy = self.calculate_main_entropy(tmp_df)
                children_nodes = self.make_node(tmp_df, node_main_entropy)
                if children_nodes == None:  # z aktualnego węzła robimy liść
                    counter = Counter(
                        ([element for element in tmp_df[df.columns[-1]]]))
                    node = Node('leaf',
                                '',
                                tmp_df,
                                node_class=counter.most_common(1)[0][0])
                    nodes.append(node)
                else:
                    node.add_children(children_nodes)
                    nodes.append(node)

        return nodes
コード例 #8
0
    def build_tree(self):
        mainEntropy = self.calculate_main_entropy(self.df)

        root: Node = Node('root', '', self.df)
        root.add_children(self.make_node(self.df, mainEntropy))