Sectorization of the Barcelona FIR

Genetic algorithms and Voronoi diagrams used to split the Barcelona flight information region into sectors with balanced controller workload.

En-route chart of north-east Spain and the Balearic Islands, with the airways, navigation aids and waypoints of the Barcelona FIR over the Mediterranean.
Source: MGTA project brief, UPC.

Overview

How should the airspace over Barcelona be divided so that no air traffic controller is overloaded at the busiest time of the morning? We cut the Barcelona flight information region into five sectors drawn by Voronoi diagrams and let a genetic algorithm move their borders to balance the controllers’ workload. After tuning the algorithm with Monte Carlo runs, we compared two ways of trading sector size against the number of aircraft per sector, and found that the multi-objective NSGA-II gave a much fuller picture of the trade-off than a simple weighted sum.

Workload was modelled through the four usual groups of controller tasks: background, transition, recurring and conflict tasks.

Problem setup

The traffic scenario is the morning peak between 07:55 and 08:10, with 87 flights, from real traffic data supplied by the course. With a limit of about 18 to 19 aircraft per controller, this gives five sectors as the starting configuration.

Each sector is the Voronoi cell of a generator point, so a candidate sectorisation is just the list of generator positions: a latitude and a longitude for each of the five points, ten variables in total, kept inside the extent of the FIR. The genetic algorithm moves these points.

The Barcelona FIR split into three numbered sectors with coloured boundaries, over the airway network and waypoints.
A sectorisation example from the course brief: three Voronoi sectors over the airway network of the FIR. Axes in degrees of longitude and latitude. Source: MGTA project brief, UPC.

Single objective: balancing sector area

As a first objective we balanced the sector areas, minimising their relative standard deviation:

RSD=σAAˉ\mathrm{RSD} = \frac{\sigma_A}{\bar{A}}

where σA\sigma_A is the standard deviation of the five sector areas and Aˉ\bar{A} their mean. We ran it with a genetic algorithm written for the course and with MATLAB’s ga.

Two maps of the Barcelona FIR divided into five Voronoi sectors, one from the course genetic algorithm and one from MATLAB's ga.
Sectors balanced by area: the course genetic algorithm (left) and MATLAB's ga (right). Axes in degrees of longitude and latitude. Source: Team report.

Both balanced the areas well, and both showed the problem with optimising one parameter alone: the number of aircraft per sector went from 0 in one sector to 25 in its neighbour.

Tuning the genetic algorithm

Population size and number of generations decide how well a genetic algorithm converges and how long it takes. We first found how many repeated runs give stable statistics, by plotting the mean and standard deviation of the best cost against the number of Monte Carlo runs, and settled on 150 runs per setting.

Average cost and its standard deviation against the number of Monte Carlo iterations, levelling off after about 100 iterations.
Mean best cost (left axis) and its standard deviation (right axis) against the number of Monte Carlo runs. Source: Team report.

We then mapped the mean fitness over a grid of population sizes and generation counts. Fitness improved with both, with diminishing returns: beyond about 60 individuals and 60 generations the gain was marginal while the cost kept growing. Two settings near the bend were carried forward: 50 generations with a population of 30, and 50 generations with a population of 50.

Heat map of mean fitness over population size and number of generations; fitness improves quickly at small values and levels off.
Mean fitness over population size (horizontal) and number of generations (vertical), 150 runs per setting. Lower is better. Source: Team report.

Two objectives and the Pareto front

The third part balanced two conflicting objectives at once: the spread of sector areas and the spread of aircraft counts between sectors, both measured by their standard deviation. We built the Pareto front in two ways:

  • a weighted sum of the two objectives with a parameter α\alpha, solved as a single-objective problem for a range of α\alpha values, keeping the non-dominated solutions;
  • a true multi-objective genetic algorithm, NSGA-II, through MATLAB’s gamultiobj.
Two Pareto fronts from the weighted-sum method: standard deviation of aircraft per sector against standard deviation of sector area.
Weighted-sum fronts for the two tuned settings: standard deviation of aircraft per sector against standard deviation of sector area. Source: Team report.

The setting with 50 generations and a population of 30 gave the more useful front: curved, so the region of best compromise is easy to see, with a rank histogram showing the population had converged. With a population of 50, the population stayed more mixed after the same number of generations and the front was less well defined.

Histogram of the number of individuals in each Pareto rank, decreasing from rank 1 to rank 8.
Rank histogram of the final NSGA-II population: the number of individuals in each Pareto rank. Source: Team report.

The weighted sum gives a smoother, simpler curve but can miss parts of the front, depending on the range and spacing of α\alpha. NSGA-II gives a denser set of solutions and a fuller picture of the trade-off.

Pareto front from NSGA-II: points trading the first objective against the second.
Pareto front from NSGA-II: objective 1 is the spread of sector areas, objective 2 the spread of aircraft counts. Source: Team report.