def getOrderForDrone(d): warehouse = warehouseByPos[d.x + d.y * columns] if(not warehouse.loadDrone(d)): ws = setup.getWarehousesByDistance(d.x, d.y, warehouses) addMoveToEvent(d, ws[1].x, ws[1].y, getOrderForDrone, d) return; dest = d.getDestination() addMoveToEvent(d, dest.x, dest.y, arrivedAt, d, dest)
def arrivedAt(d, dest): d.move(dest.x, dest.y) d.unload(dest) #TODO: go to other deliveries, but for now just go back to a warehouse ws = setup.getWarehousesByDistance(d.x, d.y, warehouses) registerEvent(currentTurn+1, addMoveToEvent, d, ws[0].x, ws[0].y, getOrderForDrone, d)
d.move(dest.x, dest.y) d.unload(dest) #TODO: go to other deliveries, but for now just go back to a warehouse ws = setup.getWarehousesByDistance(d.x, d.y, warehouses) registerEvent(currentTurn+1, addMoveToEvent, d, ws[0].x, ws[0].y, getOrderForDrone, d) def getOrderForDrone(d): warehouse = warehouseByPos[d.x + d.y * columns] if(not warehouse.loadDrone(d)): ws = setup.getWarehousesByDistance(d.x, d.y, warehouses) addMoveToEvent(d, ws[1].x, ws[1].y, getOrderForDrone, d) return; dest = d.getDestination() addMoveToEvent(d, dest.x, dest.y, arrivedAt, d, dest) sortedOrders = setup.sortOrders(orders) for order in sortedOrders: ws = setup.getWarehousesByDistance(order.x, order.y, warehouses) for p in order.products: #TODO: find un-doable orders for w in ws: if(w.setDestination(p, order)): break for d in drones: registerEvent(0, getOrderForDrone, d) for turn in range(deadline): currentTurn = turn executeEvents(turn)