Partitioning the fleet differently

Partitioning the fleet differently#

The global fleet is segmented into distance bands, each treated as an independent market in which aircraft compete for supply. The segmentation lives entirely in noads/application/base_objects.py and noads/application/scenario_setup.py; the core models are agnostic to the number and definition of markets.

What defines a market segment#

Four dictionaries in noads.application.base_objects, keyed by market name:

Dictionary

Content

Where the values come from

categories_mission

number of seats (npax) and design range (range, m)

Top-Level Aircraft Requirements per market

category_conso

current-fleet energy consumption (MJ/seat-km) as (lower, mid, upper quartile)

AeroSCOPE 2019 flights within each distance band

category_lifetime

fleet-replacement lifetimes in years, per technology scenario

planespotters age-at-retirement statistics

propulsion_mission

cruise speed and altitude per architecture

fixed per propulsion architecture, not per market

In addition, each market’s constant share of trend supply is set in single_scenario_setup ("<market>.share" entries of the constants dict, summing to 1 with the general market taking the remainder).

Steps to re-partition#

  1. Choose the new bands and recompute the per-band statistics. The current aircraft example computes the consumption quartiles and retirement ages per band; adapt its distance boundaries and re-run it against the AeroSCOPE per-route dataset to obtain the new category_conso and category_lifetime values.

  2. Update the four dictionaries in base_objects.py with the new market names, TLARs, consumptions, and lifetimes.

  3. Update the supply shares ("<market>.share") in scenario_setup.py with the ASK share of each new band (also obtainable from the AeroSCOPE histograms).

  4. Nothing else is needed: initialize_base_objects builds one Fleet per entry of categories_mission, with one reference (current) aircraft and one AircraftDesign per compatible propulsion architecture, and single_scenario_setup creates the corresponding optimization variables and per-market retirement constraints automatically.

Warning

The finer the partition, the more optimization variables (each market adds an entry-into-service and a maximum market share per aircraft concept). The gradient computation scales well thanks to forward-mode automatic differentiation, but SLSQP convergence may need more iterations; check the optimization history when increasing the number of markets.