Ivan Rodin

Leaders of Digital 2021 · hackathon

Aircraft stand allocation

3rd place · team Branch and Win

contactremote
Flights on contact stands (C, filled) and remote stands (R, outlined: passengers go by bus) over a morning · synthetic data

Task

Assign each of a day’s flights, about 1,100 arrivals and departures, to one of 275 stands at a large international airport: 82 contact stands with jet bridges and 193 remote stands served by apron buses.

The cost adds stand occupancy, taxiing and buses, all per minute. A jet bridge can be used only when the flight’s domestic or international status and its terminal match the stand, and then it must be used. Two wide-body aircraft may not stand next to each other.

Approach

  1. 01Costs and windows computed up front

    For every pair of flight and stand: whether the bridge applies, the handling time for the aircraft class and mode, the number of buses (one per 80 passengers), and the cost. The stand is busy from runway time plus taxiing through handling, so each pair gets its own occupancy window.

  2. 02Only the cheapest stands per flight

    Each flight keeps its 90 cheapest stands. That leaves about 99 thousand binary variables instead of 301 thousand, and the mode (bridge or bus) is fixed by the pair, so it needs no variable of its own.

  3. 03One assignment model, conflicts only where they can occur

    Every flight gets exactly one stand; a stand holds at most one aircraft per minute; neighboring stands never hold two wide-bodies at once. Rows are generated only for stand-minute pairs where at least two candidates could clash.

  4. 04From stand groups to single stands

    The first version grouped identical stands into 22 groups on five-minute slots, with at most as many aircraft in a group as it has stands. That is exact for capacity, because overlapping time windows can always be spread over identical stands. The private data gave every stand its own taxi and bus times, so the final model works per stand, at one-minute resolution.

  5. 05Open-source solver, bounded time

    Data preparation in SQL with window functions, the model in Pyomo, solved by CBC with a 90-minute limit and a 5% gap target.

Result

3rd place at Leaders of Digital 2021.

The plan committed with the code has no stand conflicts and puts 78% of flights at jet bridges. Against a simple lower bound, with every flight at its own cheapest stand, it is at most 5.4% above the optimum.

Stack

Python · Pyomo · CBC · SQL