Skip to main content

Parabellum environment for parallel warfare simulation

Project description

Parabellum

Parabellum is a research sandbox for experimenting with large-scale, team-based engagements on top of real-world geography. It builds a differentiable JAX environment from OpenStreetMap data, lets you configure arbitrary unit types and combinations, and can render animated replays of each rollout.

Features

  • Imports building footprints and basemaps around any geocoded location to ground the simulation in real terrain.
  • Supports configurable blue and red team orders of battle, unit capabilities, and sensor ranges via YAML.
  • Runs entirely on top of JAX for easy batching, vectorisation, and accelerator support.
  • Provides convenience utilities for quantising state to images and exporting GIFs of simulated trajectories.
  • Uses mlxp to manage experiments, making it simple to sweep parameters or override settings from the command-line.

Repository Layout

  • main.py – entry point that launches simulations, saves trajectories, and writes GIFs.
  • parabellum/ – core package with the Env class, datatypes, and visualisation helpers.
  • conf/config.yaml – default experiment configuration (location, unit counts, rules, and runtime parameters).
  • logs/, cache/ – directories created by mlxp and helper libraries for outputs and cached assets.

Requirements

  • Python 3.11 (the project pins >=3.11,<3.12).
  • System libraries needed by geospatial packages such as GDAL/PROJ (required by rasterio, cartopy, and osmnx).
  • Network access the first time you generate a new map so OpenStreetMap tiles and features can be downloaded.

Installation

The project is set up for uv; a lockfile is included.

# create (or reuse) a virtual environment and install dependencies
uv sync

Running a Simulation

With dependencies installed, run the main entry point. mlxp will load conf/config.yaml by default and create a run directory under logs/.

uv run python main.py

Each execution downloads the requested map (if not cached), simulates the configured number of steps, and stores an animated replay (that optionally overlays unit positions on the base imagery).

To override configuration values from the CLI, append Hydra-style assignments:

uv run python main.py steps=400 sims=4 teams.blu.troop=6

Configuration

All runtime settings live in conf/config.yaml:

  • Top-level parameters (steps, knn, noise, etc.) control simulation length, perception range, and stochasticity.
  • place and size define the map to fetch from OpenStreetMap and its pixel resolution.
  • teams lists unit counts per type for the blue (blu) and red (red) forces.
  • rules encodes per-unit attributes such as health, damage, movement speed, and sight radius.

mlxp writes the resolved configuration for each run under logs/, making it straightforward to audit experiments.

Programmatic Use

You can instantiate the environment directly for integration with custom training or evaluation loops:

from omegaconf import OmegaConf
from jax import random
from parabellum import Env

cfg = OmegaConf.load("conf/config.yaml")
env = Env(cfg)
obs, state = env.init(random.PRNGKey(0))
# ... compute actions and call env.step(...) as needed

The Env exposes JAX-native arrays for unit state, making it easy to vectorise across simulations or plug into learning pipelines.

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

parabellum-0.0.154.tar.gz (11.1 MB view details)

Uploaded Source

Built Distribution

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

parabellum-0.0.154-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file parabellum-0.0.154.tar.gz.

File metadata

  • Download URL: parabellum-0.0.154.tar.gz
  • Upload date:
  • Size: 11.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for parabellum-0.0.154.tar.gz
Algorithm Hash digest
SHA256 60a580ca5309570950e01f527cb094c4738148e796834db4aac499e69b7515db
MD5 3bc4713dd506e3c80c5c4ba6dad6127a
BLAKE2b-256 a49b515f1856359b15528978528623b742cd25562ac292e3d995b78070bdb2eb

See more details on using hashes here.

File details

Details for the file parabellum-0.0.154-py3-none-any.whl.

File metadata

  • Download URL: parabellum-0.0.154-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for parabellum-0.0.154-py3-none-any.whl
Algorithm Hash digest
SHA256 93f7aa30fedfb42fabcc23b3653b72bb2a75881c907afcace7cee7693e989cd7
MD5 d02cf94b896932da6ddc1d94e0a58643
BLAKE2b-256 64286bf34140d29fa703ce1cc7d65a55f9be8ee61808d4fc33025c6f8d3b1b68

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