def build_hubs(planes, count_hubs, Z): routes = [] for flight in planes: routes.append(flight.route) hubs = [] origins = [] destinations = [] for route in routes: origins.append(route.waypoints[0]) destinations.append(route.waypoints[-1]) origins = reduce_points(origins) destinations = reduce_points(destinations) origins_ranked = rank_origins(origins, destinations) origin_chunks = list_chop(origins_ranked, count_hubs) debug.print_line('Origin count: %d' % len(origins_ranked)) debug.print_line('Hubs required: %d' % count_hubs) debug.print_line('Chunk count: %d' % len(origin_chunks)) od_chunks = [] for origin_chunk in origin_chunks: # Construct weighted list of destinations belonging to origin chunk destination_chunk = [] for route in routes: if not point_in_points(route.waypoints[0], origin_chunk): continue destination_chunk.append(route.waypoints[-1]) destination_chunk = reduce_points(destination_chunk) od_chunks.append((origin_chunk, destination_chunk)) for od_chunk in od_chunks: hub = construct_hub( origins = reduce_points(od_chunk[0]), destinations = reduce_points(od_chunk[1]), Z = Z) hub.name = 'HUB%02d' % od_chunks.index(od_chunk) hubs.append(hub) for hub in hubs: debug.print_line('Hub %s created at %s' % ( hub, "%d, %d" % ( hub.lat, hub.lon ) )) debug.print_line('Hub %s has %d origins %s' % ( hub, len(hub.origins), hub.origins )) return hubs
def get_hub(hubs, flight): """Assigns a flight to a hub based on the origin for which the hub was constructed. All flights leaving from the same airport therefore proceed to the same hub.""" assert len(hubs) > 0 for hub in hubs: for hub_origin in hub.origins: if hub_origin.coincides(flight.route.waypoints[0]): debug.print_line('Route %s has hub %s' % ( flight.route, hub )) return hub raise Exception('Hub not found for flight %s' % flight)
def build_hubs(planes, count_hubs, Z): routes = [] for flight in planes: routes.append(flight.route) hubs = [] origins = [] destinations = [] for route in routes: origins.append(route.waypoints[0]) destinations.append(route.waypoints[-1]) origins = reduce_points(origins) destinations = reduce_points(destinations) origins_ranked = rank_origins(origins, destinations) origin_chunks = list_chop(origins_ranked, count_hubs) debug.print_line('Origin count: %d' % len(origins_ranked)) debug.print_line('Hubs required: %d' % count_hubs) debug.print_line('Chunk count: %d' % len(origin_chunks)) od_chunks = [] for origin_chunk in origin_chunks: # Construct weighted list of destinations belonging to origin chunk destination_chunk = [] for route in routes: if not point_in_points(route.waypoints[0], origin_chunk): continue destination_chunk.append(route.waypoints[-1]) destination_chunk = reduce_points(destination_chunk) od_chunks.append((origin_chunk, destination_chunk)) for od_chunk in od_chunks: hub = construct_hub(origins=reduce_points(od_chunk[0]), destinations=reduce_points(od_chunk[1]), Z=Z) hub.name = 'HUB%02d' % od_chunks.index(od_chunk) hubs.append(hub) for hub in hubs: debug.print_line('Hub %s created at %s' % (hub, "%d, %d" % (hub.lat, hub.lon))) debug.print_line('Hub %s has %d origins %s' % (hub, len(hub.origins), hub.origins)) return hubs