Exemple #1
0
    def load(self, deliverable: Deliverable, warehouse: Warehouse, n=1):
        self._at_turn += 1+ceil(distance_to(self.pos, warehouse.pos))
        self.pos = warehouse.pos

        def deliverables_in_order(order_id):
            return filter(lambda d: d._order_id == order_id, deliverables)

        def deliverables_in_order_of_type(order_id, product_id):
            return list(filter(lambda d: d._product_id == product_id, deliverables_in_order(order_id)))


        deliverables_to_pickup = deliverables_in_order_of_type(deliverable._order_id, deliverable._product_id)
        if len(deliverables_to_pickup) < 1:
            raise Exception
        available_n = len(deliverables_to_pickup)
        l = []
        while sum(map(lambda d: d.weight, l)) <= self.capacity and len(deliverables_to_pickup) > 0:
            d = deliverables_to_pickup.pop()
            deliverables.remove(d)
            l.append(d)
        n = len(l)
        #if n > 1:
        #    print("asd: ", n)
        warehouse.take_from_stock(deliverable._product_id, n)
        self.n = n
        print("{} L {} {} {}".format(self.id, warehouse.id, deliverable._product_id, n))
        return n
Exemple #2
0
 def get_optimal_drone(destination):
     cost = [
         drone.turn + distance_to(drone.pos, destination)
         for drone in drones
     ]
     i = cost.index(min(cost))
     return drones[i]
def create_problem(environment, start_positions, goal_positions):
    robots = []
    current_environment = environment.copy()
    random.shuffle(robot_sizes)
    for i, size in enumerate(robot_sizes):
        np.random.shuffle(start_positions)
        np.random.shuffle(goal_positions)
        # Create set of allowed cells.
        start_cells = []
        for start in start_positions:
            c = util.Cell(start[0], start[1])
            if c.allowed(current_environment, size):
                start_cells.append(c)
        goal_cells = []
        for goal in goal_positions:
            c = util.Cell(goal[0], goal[1])
            if c.allowed(environment, size):
                goal_cells.append(c)
            if len(goal_cells) >= _MAX_TRIES:
                break

        # Pick random starts.
        found = False
        for g in goal_cells:
            dist = util.distance_to(environment, g, size)
            for s in start_cells:
                d = dist[s.x, s.y]
                if not np.isinf(d):
                    robots.append((size, (s.x, s.y), (g.x, g.y)))
                    current_environment[s.x:s.x + size, s.y:s.y + size] = 1
                    found = True
                    break
            if found:
                break
        if not found:
            raise ValueError('Unable to find valid start and goal positions.')
        print('Robot #{} done.'.format(i))
    return robots
Exemple #4
0
def availability(product_id, destination):
    av = 0
    for warehouse in warehouses:
        # TODO: Bench **1 vs **2 on dist
        av += warehouse.stock[product_id] / distance_to(destination, warehouse.pos)**2
    return av
Exemple #5
0
 def unload(self, warehouse: Warehouse):
     self._at_turn += ceil(distance_to(self.pos, warehouse.pos))
     # Special
     pass
Exemple #6
0
 def deliver(self, deliverable):
     self._at_turn += 1+ceil(distance_to(self.pos, deliverable._destination_pos))
     self.pos = deliverable._destination_pos
     print("{} D {} {} {}".format(self.id, deliverable._order_id, deliverable._product_id, self.n))
     pass
Exemple #7
0
 def get_warehouses_sorted_by_distance(pos):
     return sorted(classes.warehouses, key=lambda o: distance_to(o.pos, pos))
Exemple #8
0
 def get_closest_deliverable(pos):
     return sorted(classes.deliverables, key=lambda o: distance_to(o.destination_pos, pos))
Exemple #9
0
 def get_optimal_drone(destination):
     cost = [drone.turn + distance_to(drone.pos, destination) for drone in drones]
     i = cost.index(min(cost))
     return drones[i]
Exemple #10
0
 def get_closest_order(pos):
     return sorted(orders, key=lambda o: distance_to(o.pos, pos))
Exemple #11
0
 def _distance_to(self, environment, destination, size=None):
   if size is None:
     size = self.size
   return util.distance_to(environment, destination, size)
Exemple #12
0
 def get_warehouses_sorted_by_distance(pos):
     return sorted(classes.warehouses,
                   key=lambda o: distance_to(o.pos, pos))
Exemple #13
0
 def get_closest_deliverable(pos):
     return sorted(classes.deliverables,
                   key=lambda o: distance_to(o.destination_pos, pos))