Esempio n. 1
0
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)
Esempio n. 3
0
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