Replication package: Flight Authorization Limits Emissions Abatement in Truck--Drone Last-Mile Delivery
Description
Code and results supporting the article of the same name, on how airspace flight authorization limits the emissions abatement achievable by hybrid truck-drone last-mile delivery. The code implements a multi-objective truck-UAV routing model in which emissions are an output of the routing decision rather than an assumption about it: a momentum-theory energy model with payload dependence in place of a distance proxy, well-to-wheel emissions accounting, an explicit truck-only counterfactual solved on the same instances, and SORA-derived authorization limits entering as arc eligibility. Twelve operating scenarios vary the authorization ceiling, population density, and whether a sheltering mitigation is claimed, repeated across five independently generated service areas. Solutions come from NSGA-II and MOPSO over a shared random-key encoding, validated against proven optima from a mixed-integer program on small instances. CONTENTS. code/ holds the model package (tdrp/) and the scripts that produce every reported result: run_multigeo.py for the main experiment, run_evan.py for the electric-van counterfactual, seed_scaling.py for the measurement-resolution diagnostic, run_validation.py and test_validation.py for validation against exact optima, and make_figs_multigeo.py, make_figs_converged.py and make_fronts.py for the figures. results/ holds the result files behind every table and figure. ASSUMPTIONS_REGISTER.md documents each modelling choice and its provenance. The reported emissions results are in results/results_multigeo_50seed.json: five service areas, twelve scenarios each, 2000 generations, 50 seeds, with the truck-only counterfactual solved once per seed and selected on minimum cost. Reproduction requires Python 3.10 or newer with NumPy pinned to 2.4.4; NumPy gives no guarantee that its random streams are stable across versions, so a different version changes every seeded run. code/HOW_TO_RUN.md gives step-by-step commands, the expected output at each stage, and the values to check against. Instances are determined entirely by customer count, scenario and random seed, so any result regenerates exactly on a matching environment.
Files
Steps to reproduce
All commands run from the code/ directory of the deposit, with results/ alongside it as supplied. 1. ENVIRONMENT. Python 3.10 or newer. python -m venv .venv source .venv/bin/activate (Windows: .\.venv\Scripts\Activate.ps1) python -m pip install "numpy==2.4.4" scipy pulp highspy matplotlib NumPy is pinned deliberately: it gives no guarantee that its random streams are stable across versions, so a different version changes every seeded run. 2. CHECK THE ENVIRONMENT before anything long: python fingerprint.py SOLVER_CHECK should read 107.6309 km. A different value usually means a different NumPy version. 3. INSPECT THE REPORTED RESULTS. These are supplied, so no re-solving is needed: python run_multigeo.py --summarise Expect five service areas with mean abatement 39.5 +/- 4.9%, ceiling means 56.3 +/- 3.0, 40.3 +/- 6.9 and 21.8 +/- 6.5%, a permissive-restrictive gap of 34.5 +/- 5.8 percentage points positive in 5 of 5, and correlations of 0.946 +/- 0.042. 4. REGENERATE FROM SCRATCH (several hours per service area). Each geography writes its own file, so they may be run in parallel or one at a time, and completed ones are skipped on re-run: python run_multigeo.py --geographies 20260803 --generations 2000 --seeds 50 (repeat for 20260804, 20260805, 20260806, 20260807) python run_multigeo.py --merge 5. THE OTHER ANALYSES: python run_evan.py --sweep electric-van counterfactual python seed_scaling.py --report measurement-resolution diagnostic python run_validation.py --tuned --time-limit 1800 validation against exact optima python test_validation.py regression checks, expect 19 passed python make_figs_multigeo.py figures 5-9 python make_figs_converged.py figure 4, supplementary S1-S2 python make_fronts.py supplementary S3 The validation time limit matters: at 1800 seconds the n = 8 service-time optimum is proved, and below roughly that it is not, in which case the instance is reported as excluded. 6. REPRODUCIBILITY. Instances are determined entirely by customer count, scenario and random seed, and regenerate exactly. Long metaheuristic runs are not bit-comparable across processor architectures: individual values move by a few points between an x86-64 and an arm64 run, while the ordering, the sign of the gap and the correlation reproduce. The environment behind the reported results is recorded in environment_fingerprint_mac.txt. Full instructions, expected output at each stage, and common failure modes are in code/HOW_TO_RUN.md.
Institutions
- California State University, FullertonCalifornia, Fullerton
- Toronto Metropolitan UniversityOntario, Toronto
- Chapman UniversityCalifornia, Orange
- Aston UniversityEngland, Birmingham