コード例 #1
0
    def closest_warehouse(self, drone, offer):
        potential_warehouse = None
        current_dist = None
        for w in self.warehouses:
            if w.has_product(offer["product"], offer["count"]):
                    if potential_warehouse is None or dist_ceil(w.pos, drone.pos) < current_dist:
                        potential_warehouse = w
                        current_dist = dist_ceil(w.pos, drone.pos)

        assert potential_warehouse.has_product(offer["product"], offer["count"])
        assert potential_warehouse is not None
        return potential_warehouse
コード例 #2
0
    def next_offer(self):
        """ looks at all drones and gives the nearest offer """
        next_drone = self.next_free_drone()
        next_order = None
        current_dist = None
        for order in self.orders:
            if order.has_unreserved_items():
                if next_order is None or dist_ceil(next_drone, order) < current_dist:
                    next_order = order
                    current_dist = dist_ceil(next_drone.pos, order.pos)

        if next_order is None:
            return None
        item, count = next_order.best_unreserved_item(self.max_payload)
        count = min(int(self.max_payload / self.products[item]), count)
        offer = {"product": item, "order": next_order, "count": count}
        return offer
コード例 #3
0
ファイル: drone.py プロジェクト: wilzbach/gh-2016
    def new_instructions(self, turn):
        if self.in_progress is None:
            return None

        product = self.in_progress["product"]
        count = self.in_progress["count"]
        order = self.in_progress["order"]

        cmd = deliver(self.id, self.in_progress["order"].id, product, count)

        duration = dist_ceil(self.pos, order.pos) + 1
        # -1 müsste minus eins sein aber so gehen wir sicher
        self.busy_time = turn + duration
        self.in_progress = None
        order.complete(product, count)
        self.pos = order.pos

        return cmd
コード例 #4
0
ファイル: drone.py プロジェクト: wilzbach/gh-2016
    def new_instructions(self, turn):
        if self.in_progress is None:
            return None

        product = self.in_progress["product"]
        count = self.in_progress["count"]
        order = self.in_progress["order"]

        cmd = deliver(self.id, self.in_progress["order"].id, product, count)

        duration = dist_ceil(self.pos, order.pos) + 1
        # -1 müsste minus eins sein aber so gehen wir sicher
        self.busy_time = turn + duration
        self.in_progress = None
        order.complete(product, count)
        self.pos = order.pos

        return cmd
コード例 #5
0
ファイル: drone.py プロジェクト: wilzbach/gh-2016
    def process(self, turn, offer):
        self.in_progress = offer

        product = offer["product"]
        count = offer["count"]
        warehouse = offer["warehouse"]

        assert count > 0

        cmd = load(self.id, warehouse.id, product, count)

        duration = dist_ceil(self.pos, warehouse.pos) + 1
        # -1 müsste minus eins sein aber so gehen wir sicher
        self.busy_time = turn + duration
        self.in_progress = offer
        warehouse.take_product(product, count)
        offer["order"].process(product, count)
        self.pos = warehouse.pos

        return cmd
コード例 #6
0
ファイル: drone.py プロジェクト: wilzbach/gh-2016
    def process(self, turn, offer):
        self.in_progress = offer

        product = offer["product"]
        count = offer["count"]
        warehouse = offer["warehouse"]

        assert count > 0

        cmd = load(self.id, warehouse.id, product, count)

        duration = dist_ceil(self.pos, warehouse.pos) + 1
        # -1 müsste minus eins sein aber so gehen wir sicher
        self.busy_time = turn + duration
        self.in_progress = offer
        warehouse.take_product(product, count)
        offer["order"].process(product, count)
        self.pos = warehouse.pos

        return cmd