Skip to main content

A multi-agent reinforcement learning environment for probing the overlap of MARL and social sciences

Project description

🚇 Collective Crossing

Waiting Policy Demo

Tests Coverage mypy Documentation

A multi-agent reinforcement learning environment for simulating collective behavior in tram boarding/exiting scenarios. This project provides a grid-world environment where multiple agents interact to achieve their goals while sharing some resources together.

🎯 Overview

The CollectiveCrossingEnv simulates a minimal tram boarding scenario where coordination is essential to find the optimal collective behavior:

  • Boarding agents 🚶‍♂️ start in the platform area and navigate to the tram door
  • Exiting agents 🚶‍♀️ start inside the tram and navigate to the exit
  • Simple collision avoidance 🛡️ prevents agents from occupying the same space, which makes the passing through the tram door a bottleneck and a challenge
  • Configurable geometry 🏗️ allows customization of tram size, door position, and environment
  • Flexible reward system 🎁 supports multiple reward strategies (default, simple distance, binary)
  • Customizable termination ⏹️ configurable episode termination conditions
  • Adaptive truncation ⏱️ flexible episode truncation policies
  • Configurable observations 👁️ customizable observation functions and spaces

🚀 Quick Start

from collectivecrossing import CollectiveCrossingEnv
from collectivecrossing.configs import CollectiveCrossingConfig
from collectivecrossing.reward_configs import DefaultRewardConfig
from collectivecrossing.terminated_configs import IndividualAtDestinationTerminatedConfig
from collectivecrossing.truncated_configs import MaxStepsTruncatedConfig
from collectivecrossing.observation_configs import DefaultObservationConfig

# Create environment with configurable systems
reward_config = DefaultRewardConfig(
    boarding_destination_reward=15.0,
    tram_door_reward=10.0,
    tram_area_reward=5.0,
    distance_penalty_factor=0.1
)

terminated_config = IndividualAtDestinationTerminatedConfig()
truncated_config = MaxStepsTruncatedConfig(max_steps=100)
observation_config = DefaultObservationConfig()

config = CollectiveCrossingConfig(
    width=12, 
    height=8, 
    division_y=4,
    tram_door_left=5, 
    tram_door_right=7, 
    tram_length=9,
    num_boarding_agents=5, 
    num_exiting_agents=3,
    exiting_destination_area_y=0, 
    boarding_destination_area_y=8,
    render_mode="rgb_array",
    reward_config=reward_config,
    terminated_config=terminated_config,
    truncated_config=truncated_config,
    observation_config=observation_config
)

env = CollectiveCrossingEnv(config=config)
observations, infos = env.reset(seed=42)

# Take actions for all agents
actions = {
    "boarding_0": 0,  # Move right
    "boarding_1": 1,  # Move up
    "boarding_2": 2,  # Move left
    "boarding_3": 3,  # Move down
    "boarding_4": 4,  # Wait
    "exiting_0": 0,   # Move right
    "exiting_1": 1,   # Move up
    "exiting_2": 2,   # Move left
}

# Step the environment
observations, rewards, terminated, truncated, infos = env.step(actions)

# Render the environment
rgb_array = env.render()

📚 Documentation

🌐 Live Documentation - Complete documentation site

🎮 Key Features

  • Multi-agent simulation with boarding and exiting agents
  • Collision avoidance prevents agents from overlapping
  • Configurable geometry customizable tram and door positions
  • Ray RLlib compatible uses MultiAgentEnv API
  • Multiple rendering modes ASCII and RGB visualization
  • Type-safe configuration using Pydantic v2 with automatic validation
  • Flexible reward system multiple reward strategies (default, simple distance, binary, constant negative)
  • Customizable termination configurable episode ending conditions (individual/all at destination)
  • Adaptive truncation flexible episode timeout policies (max steps, custom)
  • Configurable observations customizable observation functions and spaces
  • Comprehensive validation automatic parameter validation with helpful error messages

🛠️ Installation

Quick Install with pip

pip install collectivecrossing

Development Install

# Clone and install
git clone git@github.com:nima-siboni/collectivecrossing.git
cd collectivecrossing
uv sync

# Install development dependencies
uv sync --dev

# Optional: Install demo dependencies for RLlib examples
uv sync --group demo

See Installation Guide for detailed instructions.

🚀 Quick Deploy

# Deploy documentation to GitHub Pages
./scripts/docs.sh deploy

See Local Deployment Guide for details.

🧪 Testing

# Run tests
uv run pytest

# Run with coverage
uv run pytest --cov=collectivecrossing

# Run type checking
uv run mypy src/collectivecrossing/

# Run linting
uv run ruff check . --config tool-config.toml

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests
  5. Submit a pull request

See Development Guide for detailed contribution guidelines.

📄 License

This project is licensed under the Apache License 2.0.


Happy simulating! 🚇✨

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

collectivecrossing-0.1.3.tar.gz (30.1 MB view details)

Uploaded Source

Built Distribution

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

collectivecrossing-0.1.3-py3-none-any.whl (32.8 kB view details)

Uploaded Python 3

File details

Details for the file collectivecrossing-0.1.3.tar.gz.

File metadata

  • Download URL: collectivecrossing-0.1.3.tar.gz
  • Upload date:
  • Size: 30.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for collectivecrossing-0.1.3.tar.gz
Algorithm Hash digest
SHA256 27ccbb12db62b5f4be87929222fb59bd0a3babc22fcfcc8cf3efe403dbaadde5
MD5 db7c1e509dec01e899ffd85ad31ecfff
BLAKE2b-256 545d4b15beac04025adb8d3a1f799d64b6e94679240bec034871e1497f62a79a

See more details on using hashes here.

File details

Details for the file collectivecrossing-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for collectivecrossing-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d7b9271d103913708439f18736ebc02500e4cb4d517f9858c592f54f77b222e3
MD5 267d01d11795ac6decfa01966094b1e5
BLAKE2b-256 4c6c53571e12e8dcc9c31bac1d267726556ddfcb80600038c53ff3254525b160

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