⚜ PRINCIPIA ORTHOGONA · Book XV · Ch 1← Book XV index
Book XV · Chapter 1 · counting model

Hubs and Spokes

Fifty cities, one question: connect every pair directly, or send everyone through one hub?
The counts below are exact. The flight comparison at the end is a toy: it assumes uniform demand and a minimum-frequency rule, and it uses no airline data.

1 · The model and its units

There are n cities, city 0 is the hub. Every ordered pair of distinct cities has demand of d passengers per day (unit: passengers per ordered pair per day). An aircraft has s seats (unit: seats per flight). A route joins two cities; a segment is one passenger flying one route in one direction.

2 · Routes

Counting statementA network that joins every pair of n cities has n(n−1)/2 routes. A hub network has n−1 routes.

The first is the number of ways to choose two cities from n. The second is one spoke from each non-hub city to the hub. For n = 50 that is 1,225 routes against 49. The script checks both counts by listing the routes for n = 2 to 8.

3 · Segments flown

With direct routes every passenger flies one segment, so the n(n−1) ordered pairs give n(n−1) segments per unit of d. In the hub network a passenger to or from the hub flies one segment and every other passenger flies two. There are 2(n−1) ordered pairs that involve the hub and (n−1)(n−2) that do not, so the total is 2(n−1) + 2(n−1)(n−2) = 2(n−1)2.

hub / direct = 2(n−1)2 / n(n−1) = 2(n−1)/n

For n = 50: 4,802 segments against 2,450, a ratio of 1.96. The hub nearly doubles the flying passengers do. The script checks both totals by brute force for n = 2 to 8.

4 · Load

A direct route carries d passengers per direction per day. A spoke carries every passenger from its city to the other n−1 cities, so (n−1)d per direction per day: 49d for n = 50. This concentration is the point of the hub. It is what fills the aircraft.

5 · A toy flight model

Assume each route in each direction needs at least one flight a day, and flights are added in whole aircraft. Then direct needs n(n−1)·⌈d/s⌉ flights a day and the hub needs 2(n−1)·⌈(n−1)d/s⌉. Take n = 50 and s = 150.

d (passengers per pair per day)direct flights/dayhub flights/dayfewer flights
42,450 (average load 2.7%)196 (average load 65.3%)hub
732,4502,352hub
74 to 762,4502,450tie
772,4502,548direct

At low demand the hub needs about one-twelfth of the flights. By d = 77 each direct route is busy enough on its own, and the hub's extra flying costs more than it saves.

What this does not show It prices nothing: no fares, fuel, aircraft, slots or connection time, and it ignores that a hub passenger waits for a connection. It assumes every pair has the same demand, one hub and a daily schedule. It uses no airline data and does not show that any carrier should choose either network. The counts in sections 2 to 4 are exact; the numbers in section 5 depend on the stated rule.

6 · Run it

python3 book15/ch01-verify.py uses only the standard library, prints every number on this page and exits non-zero on any failure. The Lean file for these counts is not written.