Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.0.1 instead.
Reason given by maintainers: stale

MARL-BattleGrounds

The JAX-native Benchmark for Heterogeneous and Competitive Multi-agent Reinforcement Learning.

PyPI Python License Website

Two teams of five fight on a MARL-BattleGrounds map

Two teams of up to five agents fight Team Deathmatch on 52 maps. Each agent is a Mage, Warrior, Hunter, Rogue or Priest, so a team wins by combining movement, attacks, healing and support. The whole game is written in JAX, so thousands of games run at once on one GPU. You bring the method; MARL-BGs gives you the game, training helpers, evaluation, tournaments and replays.

Install

On Linux, an Apple Silicon Mac or Windows with WSL2, one command installs everything and opens the BattleClient. It picks the right JAX build for your GPU:

curl -L https://github.com/oceansystemslab/MARL-BattleGrounds/archive/refs/tags/v1.0.0.tar.gz | tar xz
cd MARL-BattleGrounds-1.0.0 && sh start.sh

In your own Python project (Python 3.12 to 3.14; 3.14 recommended):

pip install "marl-battlegrounds[all]"           # CPU
pip install "marl-battlegrounds[all,cuda13]"    # NVIDIA GPU, driver 580 or newer

With Docker, on any system (add --gpus all and the 1.0.0-cuda12 tag for an NVIDIA GPU):

docker run --rm -it -p 127.0.0.1:8765:8766 -p 127.0.0.1:8767:8768 -v "${PWD}:/work" ghcr.io/oceansystemslab/marl-battlegrounds:1.0.0
Route Works on Tested
One command, sh start.sh Linux, Apple Silicon Mac, Windows with WSL2 Linux with NVIDIA; install and evaluation on Linux and Mac CPUs, by every release; WSL2 not tested yet
pip Linux, Apple Silicon Mac, WSL2 Linux and Apple Silicon Mac, by every release
Docker Any system with Docker; NVIDIA on Linux and Windows hosts Linux, CPU and NVIDIA; the arm64 image by every release, under emulation; Docker Desktop not tested yet
Colab and Kaggle, Open in Colab A browser Not tested yet

Docker runs everything: play, replays, training, evaluation, tournaments, analysis and notebooks. Its limits:

Limit What to do
No GPU in Docker on a Mac Use the CPU image; Docker cannot reach Apple GPUs
study (big multi-run jobs) is not tested in containers and stops when the container stops Start the container with -d; not tested yet
You cannot add packages to a running container Build a two-line Dockerfile: FROM ghcr.io/oceansystemslab/marl-battlegrounds:1.0.0, then RUN uv pip install <package>
Docker Desktop (Mac, Windows) limits the container's memory Raise the memory limit in Docker Desktop's settings for large training runs

Every route, the GPU builds, Windows, clusters and offline use: the install guide.

Quick Start

import jax
import marl_battlegrounds as marl_bgs

env = marl_bgs.make("tdm", map_id=0, num_envs=4)  # four games at once
key = jax.random.key(0)
observation, state = env.reset(key)
for _ in range(50):
    key, act_key, step_key, reset_key = jax.random.split(key, 4)
    actions = env.sample_actions(act_key, state)  # legal random actions
    observation, state, reward, done, info = env.step(step_key, state, actions)
    observation, state = env.reset_done(reset_key, state)  # restart finished games

On one RTX 5090 with 1,024 parallel 5v5 games, the simulator alone runs 50,416 game steps per second (random legal actions, compilation excluded), and recurrent MAPPO trains at 29,878 game steps per second in pure self-play.

Train

One command trains recurrent IPPO with the Season 0 learner settings (250 million game steps, a few hours on one RTX 5090) against scripted opponents, and keeps its best checkpoint on the validation maps:

python -m marl_battlegrounds.experiments.train method=ippo pool=scripted \
  'validation_opponents=[tdm-alpha,tdm-beta,tdm-gamma]' output_dir=runs/my-ippo

Evaluate

import marl_battlegrounds as marl_bgs

results = marl_bgs.evaluate("random", "tdm-alpha", num_episodes=32, num_envs=32)
print(results.head_to_head())  # games, wins, draws, losses, point margin

Your method is always Team A, and paired games swap the spawn ends, so a map's layout cannot favor either side.

Watch And Play

python -m marl_battlegrounds replay path/to/game.marlbg-replay.json
import marl_battlegrounds as marl_bgs

marl_bgs.battle_client(team_b="tdm-alpha")  # play in your browser against a scripted team

The Six Built-In Learners

Method Name Memory Critic
Recurrent MAPPO mappo Recurrent Centralized
Feedforward MAPPO ff_mappo None Centralized
Recurrent IPPO ippo Recurrent One per agent
Feedforward IPPO ff_ippo None One per agent
QMIX qmix Recurrent QMIX mixer
PQN-VDN pqn_vdn Recurrent Sum of agent values

The six trained Season 0 models, with every save from 0 to 250M steps, load by name, for example marl_bgs.load_method("MARL-BattleGrounds/tdm-season-0-qmix@final") (Training).

Your own method can be anything that turns permitted observations into legal actions: a network, a planner, a language model or a mix.

Guides

Guide What It Covers Website
Getting Started Install, your first games, maps, rosters, what agents see start
Game Rules Classes, abilities, scoring, Red Zone, scenarios game
Your Method Plug in your own model or learner, with JAX's jit, vmap and scan your-method
Training The six learners, opponents, curriculum, rewards, checkpoints training
Hydra Configs Settings files, overrides, sweeps, studies and the experiment stages configs
Evaluation Fair games, validation and test maps, scenarios, saved results evaluate
Metrics What is measured and how to read it metrics
Tournaments Round robins, Elo ratings and tiers round-robin
Tournament Rules The leaderboard rulebook rules
Replays Save games and watch them in the Replay Viewer replay-format
BattleClient Play against or beside your own agents in the browser battleclient
LLM Agents Run a language model as a team llm
Performance Speed and memory, and how to measure them on your machine performance
Method Sources Where the built-in learners come from method-sources
API Reference Every public name on one page api

Reproduce The Paper

The paper's commands, frozen settings and result tables are in scripts/paper_experiments/.

Cite

Use the "Cite this repository" button on GitHub, or:

@software{marl_battlegrounds,
  author = {Hawili, Ulixes Tariq},
  title = {{MARL-BattleGrounds}: The JAX-native Benchmark for Heterogeneous and Competitive Multi-agent Reinforcement Learning},
  version = {1.0.0},
  year = {2026},
  url = {https://github.com/oceansystemslab/MARL-BattleGrounds}
}

Contribute

Pull requests are welcome. Start with CONTRIBUTING.md, and open an issue for bugs, ideas, questions and leaderboard submissions.

Author

MARL-BattleGrounds is developed by Ulixes Tariq Hawili as part of the SPADS CDT, University of Edinburgh School of Engineering, and the Ocean Systems Lab at HWU.

License

Licensed under the Apache License, Version 2.0.

Metadata

Release files for marl-battlegrounds 1.0.0

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

Source distribution (sdist)

Source distribution for marl-battlegrounds 1.0.0
File Size Uploaded
marl_battlegrounds-1.0.0.tar.gz 4.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for marl-battlegrounds 1.0.0
File Interpreter ABI Platform
marl_battlegrounds-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 9.4 MB

Release files / marl_battlegrounds-1.0.0.tar.gz

Download URL marl_battlegrounds-1.0.0.tar.gz
Size 4.5 MB
Tags Source
SHA-256 checksum
How to use checksums
abda562c00104db80eb3249c49cfe2f183c1cf14a7a683dd02d53eec178b5501
BLAKE2b-256 checksum
How to use checksums
5ab53a5230bae168868210afaeb5838bb750a6dd1af7685a26291fef01ea7ca1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / marl_battlegrounds-1.0.0-py3-none-any.whl

Download URL marl_battlegrounds-1.0.0-py3-none-any.whl
Size 4.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
1906a4c264d75905bca8178fcecfbbaa24fefb3c08302652bfb575a758d4efa7
BLAKE2b-256 checksum
How to use checksums
30e025a1043035845e4cb87fffb6566e9cb6383dd7820677af92404bc91aadbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.0 This release

2 release files

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