Exemplo n.º 1
0
    def build_map_from_list(self, lista):
        listo = []
        listi = []
        routes_map = []
        for i in range(0, len(lista)):
            listo.append(lista[i])
            if i != len(lista) - 1:
                if lista[i].get_index == 0 and lista[i + 1].get_index == 0:
                    listi.append(listo)
                    listo = []
            if lista[i].get_index == 0 and i == len(lista) - 1:
                listi.append(listo)
                listo = []
        c = 0
        for rn in listi:
            route = Route()
            for n in rn:
                route.add_node(n)
            if not route.is_route_valid():
                return False

            assert isinstance(route, Route)
            route.update_cost()
            route.set_index(c)
            routes_map.append(route)
            c += 1
        if len(routes_map) != len(self.random_map.get_routes):
            return False

        cost = 0
        for route in routes_map:
            cost += route.get_cost
        cost = round(cost, 2)

        rm = RandomMap()
        rm.set_routes(routes_map)
        rm.set_cost(cost)
        rm.file_name = self.file_name
        self.cost_map[cost] = rm

        return True
 def init_routes(self):
     """
     Adds the deposit and a first linehaul node to each route
     :return:
     """
     for i in range(0, int(self._instance.routes_count)):
         route = Route()
         route.set_index(i)
         route.add_node(self._instance.nodes_list[0])
         route.max_linehaul_capacity = self._vehicle_capacity
         route.max_backhaul_capacity = self._vehicle_capacity
         for x in self._instance.rnd_nodes_ids:
             node = self._instance.get_node_by_index(x)
             if len(self._instance.linehaul_ids) > 0:
                 if node.get_type == 'linehaul' and node.get_index in self._instance.linehaul_ids and node.get_capacity <= self._vehicle_capacity:
                     route.add_node(node)
                     self._instance.linehaul_ids.pop(self._instance.linehaul_ids.index(x))
                     self._routes.append(route)
                     break
                 else:
                     pass
             else:
                 pass