Skip to main content

Realistic flight schedule generation from empirical operational records.

Project description

ROSTER - Realistic Operational Schedules Through Empirical Records

Python 3.12+ License: GPLv3 Package: roster-generator

ROSTER is a Python package for generating realistic flight schedules from historical data. It is designed for ATM researchers that require synthetic schedules (with or without modification) for simulation purposes.

The goal of ROSTER is to provide a transparent and reproducible pipeline for building these synthetic schedules, which preserve important operational structure: airline and wake-category mixes, airport and route usage, scheduled flight times and turnarounds, and fleet initial conditions.

Installation

ROSTER requires Python 3.12 or newer. Install the latest released package with:

python -m pip install roster-generator

The installed import package is named roster_generator:

import roster_generator

For local development from a source checkout:

cd roster
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"

Runtime dependencies are declared in pyproject.toml and include pandas, numpy, airportsdata, aircraft-list, and pytz. Development and release tools, including pytest, build, and twine, are available through the optional dev extra.

Input Data

The main ROSTER pipeline expects a cleaned flight schedule with this normalized schema:

DEP_ICAO, ARR_ICAO, STD_REFTZ, STA_REFTZ, ATD_REFTZ, ATA_REFTZ,
AC_OPER, AC_REG, AC_WAKE

Any dataset with those columns can be used directly as schedule_file in PipelineConfig. The built-in cleaning step is optional: it is a convenience utility for converting EUROCONTROL-style flight records into the normalized ROSTER input format.

For that optional cleaner, the raw EUROCONTROL-style file must include, at minimum, the following source columns:

ADEP, ADES, FILED OFF BLOCK TIME, FILED ARRIVAL TIME,
ACTUAL OFF BLOCK TIME, ACTUAL ARRIVAL TIME,
AC Type, AC Operator, AC Registration

The cleaner validates airport ICAO codes, parses timestamps, adds ICAO wake turbulence categories from aircraft type data, and writes the normalized schema above.

Quick Start

Run the full tutorial pipeline from a source checkout:

python tutorials/tutorial_pipeline.py --seed 42 --suffix demo

The seed controls stochastic sampling. The optional suffix is appended to generated files, so --suffix demo produces outputs such as schedule_demo.csv.

Pipeline

The standard tutorial workflow runs the following stages:

  1. Optionally clean historical flight records into the normalized ROSTER schema.
  2. Build empirical Markov transition tables and sample fleet initial conditions.
  3. Analyze scheduled turnaround and flight-time distributions.
  4. Generate auxiliary simulator input files for airlines, airports, fleet, and routes.
  5. Generate a synthetic schedule through greedy forward construction with airport capacity checks.

Intermediate analysis files are written under computed/, including initial_conditions, markov, scheduled flight-time distributions, and turnaround profiles. Simulator-facing outputs are written under output/, including airlines, airports, fleet, routes, phys_ta, and schedule.

Configuration

Runtime window behavior can be configured in tutorials/params.yaml:

REFTZ: UTC
WINDOW_START: "00:00"
WINDOW_LENGTH_HOURS: 24
ACTUAL_TIMES: false

REFTZ defines the reference timezone used for time-of-day and day-boundary logic. WINDOW_START and WINDOW_LENGTH_HOURS define the simulated operating window. ACTUAL_TIMES controls whether actual timestamp columns are required and used by stages that support them.

Programmatic workflows use roster_generator.PipelineConfig to define input paths, output paths, random seed, suffix, time-window settings, and optional manipulation callbacks.

Schedule manipulation

ROSTER supports controlled scenario manipulation without editing the generated analysis tables by hand:

  • manipulation_fn modifies scalar distribution parameters at runtime, such as turnaround distributions, fleet-size parameters, route durations, physical turnaround minima, and prior-day probabilities.
  • markov_manipulation_fn receives a MarkovContext and reweights existing destination probabilities before each Markov row is normalized.

See tutorials/tutorial_manipulation.py for a worked example of both hooks.

Some Features Of ROSTER

  • Written in Python 3 and installable with pip.
  • Reproducible stochastic generation through explicit random seeds.
  • Empirical Markov transition models for aircraft continuation behavior.
  • Synthetic fleet initial-condition sampling from historical records.
  • Reference-timezone operating windows with configurable start time and length.
  • Wake-category handling based on aircraft type data.
  • Scheduled turnaround and flight-time distribution analysis.
  • Airport capacity-aware schedule construction.
  • CSV outputs suitable for downstream simulation workflows.
  • Unit tests covering cleaning, configuration, distributions, Markov models, auxiliary files, and schedule generation.

Testing

Run the test suite from the project root:

python -m pytest

Contributions

Contributions are welcome from researchers and developers. Please keep changes focused, add or update tests for behavioural changes.

License

ROSTER is distributed under the GNU General Public License v3. See LICENSE for the full license text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

roster_generator-0.2.6.tar.gz (107.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

roster_generator-0.2.6-py3-none-any.whl (79.4 kB view details)

Uploaded Python 3

File details

Details for the file roster_generator-0.2.6.tar.gz.

File metadata

  • Download URL: roster_generator-0.2.6.tar.gz
  • Upload date:
  • Size: 107.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for roster_generator-0.2.6.tar.gz
Algorithm Hash digest
SHA256 c651001000c15d33b97152442bf1ba1d071d84f5a0b198e75c8d18cd2223b502
MD5 0b7fee6a4d5ef61b3ed48930462bdde3
BLAKE2b-256 79e66c5ea0a71adf95ee0c407a4d75c0a579a0808756093dd977996bd7881eae

See more details on using hashes here.

File details

Details for the file roster_generator-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for roster_generator-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9ec97ee055bd376ee2c50c7727a1249ee1eacd51dbde714d158312b1d31049bb
MD5 a32d5db6b59cfb9b619035fc03e3ec24
BLAKE2b-256 7a72dd131ee00bae10ca3faf2343ba9c17bff51297ad3e72d86e1f266126d148

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page