Git Product home page Git Product logo

lvyv / pogema Goto Github PK

View Code? Open in Web Editor NEW

This project forked from airi-institute/pogema

0.0 0.0 0.0 115 KB

POGEMA stands for Partially-Observable Grid Environment for Multiple Agents. This 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.

License: MIT License

Shell 0.08% Python 99.92%

pogema's Introduction

Pogema logo

Partially-Observable Grid Environment for Multiple Agents

CodeFactor Downloads CI CodeQL

Partially observable multi-agent pathfinding (PO-MAPF) is a challenging problem which fundamentally differs from regular MAPF, in which a central controller is assumed to construct a joint plan for all agents before they start execution. PO-MAPF is intrisically decentralized and decision making (e.g. planning) here is interleaved with the 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. This 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: agents can move between the cardinally-adjacent cells of the grid, each action (move or wait) takes one time step. No information sharing between the agents is happening.

POGEMA can generate random maps and start/goals locations for the agents. It also can take custom maps as the input.

Installation

Just install from PyPI:

pip install pogema

Using Example

from pogema import pogema_v0, Hard8x8
env = pogema_v0(grid_config=Hard8x8())

obs = env.reset()

done = [False, ...]

while not all(done):
    # Use random policy to make actions
    obs, reward, done, info = env.step([env.action_space.sample() for _ in range(len(obs))])

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"))

Classic Gym

Pogema is fully capable for single-agent pathfinding tasks.

import 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}
}

pogema's People

Contributors

tviskaron avatar eles13 avatar panyshevalex avatar konstantingordeev avatar konstantin-yakovlev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.