This repository provides the core framework for training policies and evaluating our head-to-head multi-agent racing game. It includes:
- LMPG: Our proposed Learned Model Predictive Game training pipeline and saved checkpoints.
- MPG & MPC: Baseline Model Predictive Game and Contouring Model Predictive Control implementations.
- Referee system: An automated system for gate-crossing validation, collision monitoring, and role switching according to the rules of the game.
# 1. Install juliaup
curl -fsSL https://install.julialang.org | sh
# 2. Set default julia to 1.11.5
juliaup add 1.11.5 && juliaup default 1.11.5
# 3. Clone the repository
git clone git@github.com:andrejcarlo/ral26_strategizing_at_speed.git
cd ral26_strategizing_at_speed
# 4. Instantiate the Julia environment
# This installs all required packages exactly as specified in the Manifest.
julia --project -e 'using Pkg; Pkg.instantiate()'
# 5. Build the environment
conda create --file environment.yamlThis project relies on the Agilicious framework for real drone flights.
Action Required: You must request access to the internal Agilicious repository before installing. Without access, only the julia simulator without RotorS can be run.
You may train LMPG by calling the following:
# Usage: ./scripts/julia_train <params_file_path> <track_chosen>
./scripts/julia_train params/train_parameters_medium_speed_lemniscate.toml lemniscateMake sure to change the hyperparameters in params/train_parameters_medium_speed_lemniscate.toml accordingly.
The evaluation suite uses a server-client architecture to manage asynchronous simulation. By default, parameters are loaded from params/race_parameters.toml, and specific racing jobs (methods and tracks) are defined in startup.jl.
Run the full study in both modes (async and sync) with a single command:
./scripts/julia_server mcsUse this for debugging or custom race configurations across two terminal windows:
Terminal 1 (the server): This is where the referee, logging and the trajectory optimizers (MPG, LMPG, MPC) are running.
./scripts/julia_server dpdTerminal 2 (the client): This is where the julia simulator is running and executing the plans received from the server.
Wait for the server to log "Done", then:
./scripts/julia_server clientYou may use the jupyter notebook in postprocessing/individual_log_analysis.ipynb to visualize trajectories from a single log file.
If you find this work useful for your research, please cite our paper:
@misc{papuc2026strategizingspeedlearnedmodel,
title={Strategizing at Speed: A Learned Model Predictive Game for Multi-Agent Drone Racing},
author={Andrei-Carlo Papuc and Lasse Peters and Sihao Sun and Laura Ferranti and Javier Alonso-Mora},
year={2026},
eprint={2602.06925},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2602.06925},
}