Skip to main content

Python PyPI tests pre-commit Code style: black

MOMAland is an open source Python library for developing and comparing multi-objective multi-agent reinforcement learning algorithms by providing a standard API to communicate between learning algorithms and environments, as well as a standard set of environments compliant with that API. Essentially, the environments follow the standard PettingZoo APIs, but return vectorized rewards as numpy arrays instead of scalar values.

The documentation website is at https://momaland.farama.org/, and we have a public discord server (which we also use to coordinate development work) that you can join here.

Environments

MOMAland includes environments taken from the MOMARL literature, as well as multi-objective version of classical environments, such as SISL or Butterfly. The full list of environments is available at https://momaland.farama.org/environments/all-envs/.

Installation

To install MOMAland, use:

pip install momaland

This does not include dependencies for all components of MOMAland (not everything is required for the basic usage, and some can be problematic to install on certain systems).

  • pip install "momaland[testing]" to install dependencies for API testing.
  • pip install "momaland[learning]" to install dependencies for the supplied learning algorithms.
  • pip install "momaland[all]" for all dependencies for all components.

API

Similar to PettingZoo, the MOMAland API models environments as simple Python env classes. Creating environment instances and interacting with them is very simple - here's an example using the "momultiwalker_stability_v0" environment:

from momaland.envs.momultiwalker_stability import momultiwalker_stability_v0 as _env
import numpy as np

# .env() function will return an AEC environment, as per PZ standard
env = _env.env(render_mode="human")

env.reset(seed=42)
for agent in env.agent_iter():
    # vec_reward is a numpy array
    observation, vec_reward, termination, truncation, info = env.last()

    if termination or truncation:
        action = None
    else:
        action = env.action_space(agent).sample() # this is where you would insert your policy

    env.step(action)
env.close()

# optionally, you can scalarize the reward with weights
# Making the vector reward a scalar reward to shift to single-objective multi-agent (aka PettingZoo)
# We can assign different weights to the objectives of each agent.
weights = {
    "walker_0": np.array([0.7, 0.3]),
    "walker_1": np.array([0.5, 0.5]),
    "walker_2": np.array([0.2, 0.8]),
}
env = LinearizeReward(env, weights)

For details on multi-objective multi-agent RL definitions, see Multi-Objective Multi-Agent Decision Making: A Utility-based Analysis and Survey.

You can also check more examples in this colab notebook! MOMAland Demo in Collab

Learning Algorithms

We provide a set of learning algorithms that are compatible with the MOMAland environments. The learning algorithms are implemented in the learning/ directory. To keep everything as self-contained as possible, each algorithm is implemented as a single-file (close to cleanRL's philosophy).

Nevertheless, we reuse tools provided by other libraries, like multi-objective evaluations and performance indicators from MORL-Baselines.

Here is a list of algorithms that are currently implemented:

Name Single/Multi-policy Reward Utility Observation space Action space Paper
MOMAPPO (OLS) continuous,
discrete
Multi Team Team / Linear Any Any
Scalarized IQL Single Individual Individual / Linear Discrete Discrete
Centralization wrapper Any Team Team / Any Discrete Discrete
Linearization wrapper Single Any Individual / Linear Any Any

Environment Versioning

MOMAland keeps strict versioning for reproducibility reasons. All environments end in a suffix like "_v0". When changes are made to environments that might impact learning results, the number is increased by one to prevent potential confusion.

Development Roadmap

We have a roadmap for future development available here.

Project Maintainers

Project Managers: Roxana Radulescu (@rradules)

Maintenance for this project is also contributed by the broader Farama team: farama.org/team.

Citing

If you use this repository in your research, please cite:

@article{felten2026momaland,
  title   = {{MOMAland}: A Set of Benchmarks for Multi-Objective Multi-Agent Reinforcement Learning},
  author  = {Florian Felten and Umut Ucak and Hicham Azmani and Gao Peng and Willem Röpke and Hendrik Baier and Patrick Mannion and Diederik M. Roijers and Jordan K. Terry and El-Ghazali Talbi and Grégoire Danoy and Ann Nowé and Roxana R\u{a}dulescu},
  journal = {Journal of Data-centric Machine Learning Research},
  year    = {2026},
  volume  = {3},
  number  = {15},
  pages   = {1--49},
  url     = {https://openreview.net/forum?id=vzHLRK0sSp}
}

Development

Setup pre-commit

Clone the repo and run pre-commit install to setup the pre-commit hooks.

Metadata

Release files for momaland 0.3.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 momaland 0.3.0
File Size Uploaded Provenance Actions
momaland-0.3.0.tar.gz 1.0 MB Without provenance Details for momaland-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for momaland 0.3.0
File Interpreter ABI Platform Actions
momaland-0.3.0-py3-none-any.whl Python 3 none any Details for momaland-0.3.0-py3-none-any.whl

Total release size: 2.2 MB

Release files / momaland-0.3.0.tar.gz

Download URL momaland-0.3.0.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
1b202f7814f9b9affd863c49e6594347b1551dcf1a088d954f5bf2809d22359e
BLAKE2b-256 checksum
How to use checksums
cacfc9858b085a97790b47ab54100354497f35f8bd653c2c387a7698f4a0fc73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / momaland-0.3.0-py3-none-any.whl

Download URL momaland-0.3.0-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b57fd6c8bf48e86cb4a13bc63b157155b9efe29b60e498f8a5a7c816e5026397
BLAKE2b-256 checksum
How to use checksums
6d50a13216af18a3566e4a2b3e99caa94ad44613860aa7d2a45f47c0937ed743
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for momaland 0.3.0

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