Esempio n. 1
0
    def increase_section_granularity(self, section, best_polygon=None):
        p_inside = points_inside(self.data, polygon_to_array(section))

        if not all_points_have_same_position(
                p_inside) and have_points_of_both_classes(p_inside):
            new_edges = []
            remove_edges = []

            # Cut edges in two
            for edge in section:
                v_mid = Vertex(((edge.a.x + edge.b.x) / 2),
                               ((edge.a.y + edge.b.y) / 2))
                if v_mid not in self.vertices:
                    self.vertices.append(v_mid)
                else:
                    v_mid = next(v for v in self.vertices if v == v_mid)
                new_edges.extend([
                    Edge(edge.a, v_mid, edge.pheromone_strength),
                    Edge(v_mid, edge.b, edge.pheromone_strength)
                ])
                if best_polygon:
                    if edge in best_polygon:
                        best_polygon.remove(edge)
                        best_polygon.extend(new_edges[-2:])

            remove_edges.extend(section)
            connect_edges_to_vertices(new_edges)
            v_lower_left = section[0].a
            v_down = v_lower_left.connected_edges[DIRECTION['RIGHT']].b
            v_right = v_down.connected_edges[
                DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']].b
            v_left = v_lower_left.connected_edges[DIRECTION['UP']].b
            v_up = v_left.connected_edges[DIRECTION['UP']].b.connected_edges[
                DIRECTION['RIGHT']].b
            v_center = Vertex(v_down.x, v_left.y)

            new_edges.extend([
                Edge(v_down, v_center, pheromone_strength=self.tau_initial),
                Edge(v_left, v_center, pheromone_strength=self.tau_initial),
                Edge(v_center, v_right, pheromone_strength=self.tau_initial),
                Edge(v_center, v_up, pheromone_strength=self.tau_initial)
            ])
            self.vertices.append(v_center)
            connect_edges_to_vertices(new_edges)

            corners = [v_lower_left, v_down, v_left, v_center]

            subsections = []
            for c in corners:
                subsections.append([
                    c.connected_edges[DIRECTION['RIGHT']], c.connected_edges[
                        DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']],
                    c.connected_edges[DIRECTION['UP']].b.connected_edges[
                        DIRECTION['RIGHT']], c.connected_edges[DIRECTION['UP']]
                ])
            return subsections, new_edges, remove_edges
Esempio n. 2
0
    def increase_section_granularity(self, section, best_polygon=None):
        p_inside = points_inside(self.data, polygon_to_array(section))

        if not all_points_have_same_position(p_inside) and have_points_of_both_classes(p_inside):
            new_edges = []
            remove_edges = []

            # Cut edges in two
            for edge in section:
                v_mid = Vertex(((edge.a.x + edge.b.x) / 2), ((edge.a.y + edge.b.y) / 2))
                if v_mid not in self.vertices:
                    self.vertices.append(v_mid)
                else:
                    v_mid = next(v for v in self.vertices if v == v_mid)
                new_edges.extend([Edge(edge.a, v_mid, edge.pheromone_strength),
                                  Edge(v_mid, edge.b, edge.pheromone_strength)])
                if best_polygon:
                    if edge in best_polygon:
                        best_polygon.remove(edge)
                        best_polygon.extend(new_edges[-2:])

            remove_edges.extend(section)
            connect_edges_to_vertices(new_edges)
            v_lower_left = section[0].a
            v_down = v_lower_left.connected_edges[DIRECTION['RIGHT']].b
            v_right = v_down.connected_edges[DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']].b
            v_left = v_lower_left.connected_edges[DIRECTION['UP']].b
            v_up = v_left.connected_edges[DIRECTION['UP']].b.connected_edges[DIRECTION['RIGHT']].b
            v_center = Vertex(v_down.x, v_left.y)

            new_edges.extend([Edge(v_down, v_center, pheromone_strength=self.tau_initial),
                               Edge(v_left, v_center, pheromone_strength=self.tau_initial),
                               Edge(v_center, v_right, pheromone_strength=self.tau_initial),
                               Edge(v_center, v_up, pheromone_strength=self.tau_initial)])
            self.vertices.append(v_center)
            connect_edges_to_vertices(new_edges)

            corners = [v_lower_left,
                       v_down,
                       v_left,
                       v_center]

            subsections = []
            for c in corners:
                subsections.append([
                    c.connected_edges[DIRECTION['RIGHT']],
                    c.connected_edges[DIRECTION['RIGHT']].b.connected_edges[DIRECTION['UP']],
                    c.connected_edges[DIRECTION['UP']].b.connected_edges[DIRECTION['RIGHT']],
                    c.connected_edges[DIRECTION['UP']]
                ])
            return subsections, new_edges, remove_edges
Esempio n. 3
0
 def test_returns_list_with_two_elements(self):
     points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]])
     result = rc.points_inside(points, self.edges)
     self.assertEqual(result.shape, (2, 3))
Esempio n. 4
0
 def test_returns_list(self):
     points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]])
     result = rc.points_inside(points, self.edges)
     self.assertEqual(type(result), np.ndarray)
Esempio n. 5
0
 def test_returns_list_with_two_elements(self):
     points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]])
     result = rc.points_inside(points, self.edges)
     self.assertEqual(result.shape, (2, 3))
Esempio n. 6
0
 def test_returns_list(self):
     points = np.array([[0.5, 0.5, 1], [1.0, 2.0, 0], [.7, .7, 1]])
     result = rc.points_inside(points, self.edges)
     self.assertEqual(type(result), np.ndarray)