Skip to main content

MEAL: A Benchmark for Continual Multi-Agent Reinforcement Learning

MEAL is the first Continual Multi‑Agent Reinforcement Learning (CMARL) benchmark built around cooperative Overcooked‑style tasks, implemented in JAX for high‑performance training and evaluation. It focuses on learning over extensive sequences of procedurally generated tasks, across different team sizes and difficulty levels.

OvercookedMPESMAXJaxNav

Key Features

  • JAX/Flax implementation for scalable, accelerated training
  • Procedurally generated cooperative tasks with adjustable difficulty, across four environments (Overcooked, MPE, SMAX, JaxNav)
  • Multi-agent algorithms: IPPO, MAPPO, HAPPO, VDN, QMIX
  • Continual learning methods: EWC, MAS, L2, FT, AGEM, ER-ACE, PackNet
  • Results tooling: W&B integration, download utilities, and plotting scripts

Installation

Requires Python 3.10.

# Create and activate an environment (Conda example)
conda create -n meal python=3.10 -y
conda activate meal

# Install MEAL in editable mode and optional extras
pip install -e .
pip install -e ".[viz]"
pip install -e ".[utils]"

# Optional: GPU acceleration for JAX (pick your CUDA version)
pip install -U "jax[cuda12]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
# or
pip install -U "jax[cuda11]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

Quick Start

The single entry point is experiments/train.py. It takes the MARL algorithm as the first argument (ippo, mappo, happo, vdn, qmix), then the continual-learning method, then the environment (overcooked, mpe, smax, jaxnav) as a subcommand. Outer flags must come before the env:... subcommand token.

Example: IPPO + EWC on generated medium Overcooked tasks with 2 agents

python -m experiments.train ippo \
  --cl-method ewc \
  --seq-length 20 \
  --num-agents 2 \
  --num-envs 2048 \
  --num-steps 400 \
  env:overcooked \
  --env.difficulty medium

Swap ippo for mappo/happo/vdn/qmix, --cl-method ewc for any of mas, l2, ft, agem, er_ace, packnet, and env:overcooked for env:mpe/env:smax/env:jaxnav. Every combination shares this same CLI shape. Full flag reference, including every algorithm- and environment-specific option, is in experiments/README.MD.

Running Experiments

For running experiments, please refer to experiments/README.MD. To reproduce the experiments from the paper specifically, see scripts/README.MD.

Python API

Besides the training CLI, MEAL is directly importable as a library. For writing your own training loop, or just poking at an environment:

import meal

env = meal.make_env('overcooked', difficulty='medium')
obs, state = env.reset(reset_key)
obs, state, reward, done, info = env.step(step_key, state, actions)

# A continual sequence of tasks, same generation logic the CLI uses:
tasks = meal.make_sequence(sequence_length=6, num_agents=3, difficulty='hard')

See examples/ for small, runnable scripts covering each environment, CL task sequences, partial observability, and stochastic-transition wrappers.

Environments

MEAL benchmarks continual learning across four environments, each with its own README covering observation/action space, reward structure, how CL task diversity is generated, and every --env.* flag it exposes:

  • Overcooked — cooperative kitchen, procedurally generated layouts
  • MPE — particle-agent coverage with obstacles
  • SMAX — StarCraft-style unit-composition battles
  • JaxNav — multi-robot 2D navigation

For details on how Overcooked layouts themselves are procedurally generated, see meal/README.MD.

Project Structure

  • experiments/
    • train.py: single training entry point (algo x cl-method x env)
    • algos/: AbstractAlgo/OnPolicyAlgo/OffPolicyAlgo hierarchy (IPPO, MAPPO, HAPPO, VDN, QMIX)
    • envs/: EnvAdapter per environment (Overcooked, MPE, SMAX, JaxNav)
    • continual/: implementations of EWC, MAS, L2, FT, AGEM, ER-ACE, PackNet
    • results/: W&B downloaders and plotting scripts
  • scripts/: paper-reproduction sweeps (see scripts/README.MD) + env visualization tooling
  • meal/
    • env/: layouts and utilities
    • wrappers/: logging and environment wrappers
    • visualization/: rendering utilities
  • tests/: environment smoke tests, image comparisons, and algorithm-level regression tests

Documentation

Every subdirectory with its own concerns has a dedicated README:

Topic README
Full training CLI reference (all flags, per-algo and per-CL-method options) experiments/README.MD
Downloading W&B run data and generating result tables/figures experiments/results/README.MD
Reproducing the paper's experiment sweeps scripts/README.MD
Runnable library-API example scripts (no training CLI) examples/README.md
Procedural Overcooked layout generation meal/README.MD
Overcooked environment details meal/env/overcooked/README.md
MPE environment details meal/env/mpe/README.md
SMAX environment details meal/env/smax/README.md
JaxNav environment details meal/env/jaxnav/README.md

Acknowledgments

  • The environments are based on JaxMARL.
  • Our experiments were managed using WandB.

Citation

If you use our work in your research, please cite it as follows:

@article{tomilin2026meal,
  title={MEAL: A Benchmark for Continual Multi-Agent Reinforcement Learning},
  author={Tomilin, Tristan and van den Boogaard, Luka and Garcin, Samuel and Ruhdorfer, Constantin and Grooten, Bram and Kusters, Fabrice and Du, Yali and Bulling, Andreas and Pechenizkiy, Mykola and Fang, Meng},
  booktitle={Proceedings of the 43rd International Conference on Machine Learning (ICML)},
  year={2026}
}

Metadata

Release files for meal-bench 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for meal-bench 0.3.1
File Size Uploaded Provenance Actions
meal_bench-0.3.1.tar.gz 3.7 MB Without provenance Details for meal_bench-0.3.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for meal-bench 0.3.1
File Interpreter ABI Platform Actions
meal_bench-0.3.1-py3-none-any.whl Python 3 none any Details for meal_bench-0.3.1-py3-none-any.whl

Total release size: 7.4 MB

Release files / meal_bench-0.3.1.tar.gz

Download URL meal_bench-0.3.1.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
bf257c44f625a81b9e07f2af2258c6a745519cbb589becfff525cf5245404fa0
BLAKE2b-256 checksum
How to use checksums
bba060d13611812b8e964e2484403f422492b872d21e0a71bb76aea03620daf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.12

Release files / meal_bench-0.3.1-py3-none-any.whl

Download URL meal_bench-0.3.1-py3-none-any.whl
Size 3.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
03702c790deb4c77889f9219c9e9a92ed00c22c5a7b9dcc2d5784879396b0c09
BLAKE2b-256 checksum
How to use checksums
fb2a2c747dc0c303703a1f50828becac02e9fac2a522e9b4b57b5bb935fd9ccc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.12

Security for meal-bench 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page