Skip to main content

Partially Observable Grid Environment for Multiple Agents

Project description

Pogema logo

Partially-Observable Grid Environment for Multiple Agents

CodeFactor Downloads CI CodeQL

Partially Observable Multi-Agent Pathfinding (PO-MAPF) is a challenging problem that fundamentally differs from regular MAPF. In regular MAPF, a central controller constructs a joint plan for all agents before they start execution. However, PO-MAPF is intrinsically decentralized, and decision-making, such as planning, is interleaved with execution. At each time step, an agent receives a local observation of the environment and decides which action to take. The ultimate goal for the agents is to reach their goals while avoiding collisions with each other and the static obstacles.

POGEMA stands for Partially-Observable Grid Environment for Multiple Agents. It is a grid-based environment that was specifically designed to be flexible, tunable, and scalable. It can be tailored to a variety of PO-MAPF settings. Currently, the somewhat standard setting is supported, in which agents can move between the cardinal-adjacent cells of the grid, and each action (move or wait) takes one time step. No information sharing occurs between the agents. POGEMA can generate random maps and start/goal locations for the agents. It also accepts custom maps as input.

Installation

Just install from PyPI:

pip install pogema

Using Example

from pogema import pogema_v0, Hard8x8

env = pogema_v0(grid_config=Hard8x8())

obs, info = env.reset()

while True:
    # Using random policy to make actions
    obs, reward, terminated, truncated, info = env.step(env.sample_actions())
    env.render()
    if all(terminated) or all(truncated):
        break

Open In Colab

Environments

Config agents density num agents horizon
Easy8x8 2.2% 1 64
Normal8x8 4.5% 2 64
Hard8x8 8.9% 4 64
ExtraHard8x8 17.8% 8 64
Easy16x16 2.2% 4 128
Normal16x16 4.5% 8 128
Hard16x16 8.9% 16 128
ExtraHard16x16 17.8% 32 128
Easy32x32 2.2% 16 256
Normal32x32 4.5% 32 256
Hard32x32 8.9% 64 256
ExtraHard32x32 17.8% 128 256
Easy64x64 2.2% 64 512
Normal64x64 4.5% 128 512
Hard64x64 8.9% 256 512
ExtraHard64x64 17.8% 512 512

Baselines

The baseline implementations are available as a separate repository.

Interfaces

Pogema provides integrations with a range of MARL frameworks: PettingZoo, PyMARL and SampleFactory.

PettingZoo

from pogema import pogema_v0, GridConfig

# Create Pogema environment with PettingZoo interface
env = pogema_v0(GridConfig(integration="PettingZoo"))

PyMARL

from pogema import pogema_v0, GridConfig

env = pogema_v0(GridConfig(integration="PyMARL"))

SampleFactory

from pogema import pogema_v0, GridConfig

env = pogema_v0(GridConfig(integration="SampleFactory"))

Gymnasium

Pogema is fully capable for single-agent pathfinding tasks.

import gymnasium as gym
import pogema

# This interface provides experience only for agent with id=0,
# other agents will take random actions.
env = gym.make("Pogema-v0")

Example of training stable-baselines3 DQN to solve single-agent pathfinding tasks: Open In Colab

Customization

Random maps

from pogema import pogema_v0, GridConfig

# Define random configuration
grid_config = GridConfig(num_agents=4,  # number of agents
                         size=8, # size of the grid
                         density=0.4,  # obstacle density
                         seed=1,  # set to None for random 
                                  # obstacles, agents and targets 
                                  # positions at each reset
                         max_episode_steps=128,  # horizon
                         obs_radius=3,  # defines field of view
                         )

env = pogema_v0(grid_config=grid_config)
env.reset()
env.render()

Custom maps

from pogema import pogema_v0, GridConfig

grid = """
.....#.....
.....#.....
...........
.....#.....
.....#.....
#.####.....
.....###.##
.....#.....
.....#.....
...........
.....#.....
"""

# Define new configuration with 8 randomly placed agents
grid_config = GridConfig(map=grid, num_agents=8)

# Create custom Pogema environment
env = pogema_v0(grid_config=grid_config)

Citation

If you use this repository in your research or wish to cite it, please make a reference to our paper:

@misc{https://doi.org/10.48550/arxiv.2206.10944,
  doi = {10.48550/ARXIV.2206.10944},  
  url = {https://arxiv.org/abs/2206.10944},
  author = {Skrynnik, Alexey and Andreychuk, Anton and Yakovlev, Konstantin and Panov, Aleksandr I.},
  keywords = {Machine Learning (cs.LG), Artificial Intelligence (cs.AI), Multiagent Systems (cs.MA), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title = {POGEMA: Partially Observable Grid Environment for Multiple Agents},
  publisher = {arXiv},
  year = {2022},
  copyright = {arXiv.org perpetual, non-exclusive license}
}

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

pogema-1.2.3a2.tar.gz (33.0 kB view details)

Uploaded Source

Built Distribution

pogema-1.2.3a2-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

Details for the file pogema-1.2.3a2.tar.gz.

File metadata

  • Download URL: pogema-1.2.3a2.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.18

File hashes

Hashes for pogema-1.2.3a2.tar.gz
Algorithm Hash digest
SHA256 cb1de09f9b6561dc5e2da4d066b6b3c926ba8dea6ebc3bed599746797e70ad93
MD5 7147bcc7e2c630ba801564f44a9021a2
BLAKE2b-256 2f0bdf1f4397b0c3111f2c2dd3d30a0c86266f1b7ffcde5343a7e049b617f1ee

See more details on using hashes here.

Provenance

File details

Details for the file pogema-1.2.3a2-py3-none-any.whl.

File metadata

  • Download URL: pogema-1.2.3a2-py3-none-any.whl
  • Upload date:
  • Size: 30.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.18

File hashes

Hashes for pogema-1.2.3a2-py3-none-any.whl
Algorithm Hash digest
SHA256 e850f508b9eff8b9889156012b9930b2f9ae39844b3abea9c50dbfaebf14f61f
MD5 d4d18769fe36abe82d59045a3894c4cd
BLAKE2b-256 ffcd401c81f14cc4e658ced93d84a83b1dd5bd7a4cdf9c9be5dbb0c7169e4c0b

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page