部分可观测多智能体寻路(PO-MAPF)是一个具有挑战性的问题,与常规的MAPF有根本的不同。在常规MAPF中,中央控制器在智能体开始执行前为所有智能体构建一个联合计划。然而,PO-MAPF本质上是分散的,决策(如规划)与执行交织在一起。在每个时间步,智能体接收环境的局部观察,并决定采取何种行动。智能体的最终目标是到达各自的目标,同时避免与其他智能体和静态障碍物发生碰撞。
POGEMA代表部分可观测多智能体网格环境。它是一个专门设计的网格环境,具有灵活性、可调性和可扩展性。它可以适应各种PO-MAPF设置。目前,支持一种相对标准的设置,其中智能体可以在网格的相邻单元格之间移动,每个动作(移动或等待)需要一个时间步。智能体之间不进行信息共享。POGEMA可以生成随机地图和智能体的起始/目标位置。它还可以接受自定义地图作为输入。
安装
只需从PyPI安装:
pip install pogema
使用示例
from pogema import pogema_v0, GridConfig
env = pogema_v0(grid_config=GridConfig())
obs, info = env.reset()
while True:
# 使用随机策略进行动作
obs, reward, terminated, truncated, info = env.step(env.sample_actions())
env.render()
if all(terminated) or all(truncated):
break
基准实现
基准实现作为单独的仓库提供。
接口
Pogema提供了与多种MARL框架的集成:PettingZoo、PyMARL和SampleFactory。
PettingZoo
from pogema import pogema_v0, GridConfig
# 创建带有PettingZoo接口的Pogema环境
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完全适用于单智能体寻路任务。
from pogema import pogema_v0, GridConfig
env = pogema_v0(GridConfig(integration="gymnasium"))
使用stable-baselines3的DQN训练解决单智能体寻路任务的示例:
自定义
随机地图
from pogema import pogema_v0, GridConfig
# 定义随机配置
grid_config = GridConfig(num_agents=4, # 智能体数量
size=8, # 网格大小
density=0.4, # 障碍物密度
seed=1, # 设置为None以在每次重置时随机生成
# 障碍物、智能体和目标位置
max_episode_steps=128, # 最大步数
obs_radius=3, # 定义视野范围
)
env = pogema_v0(grid_config=grid_config)
env.reset()
env.render()
自定义地图
from pogema import pogema_v0, GridConfig
grid = """
.....#.....
.....#.....
...........
.....#.....
.....#.....
#.####.....
.....###.##
.....#.....
.....#.....
...........
.....#.....
"""
# 定义新配置,包含8个随机放置的智能体
grid_config = GridConfig(map=grid, num_agents=8)
# 创建自定义Pogema环境
env = pogema_v0(grid_config=grid_config)
引用
如果您在研究中使用了本仓库或希望引用它,请引用我们的论文:
@misc{skrynnik2024pogema,
title={POGEMA: A Benchmark Platform for Cooperative Multi-Agent Navigation},
author={Alexey Skrynnik and Anton Andreychuk and Anatolii Borzilov and Alexander Chernyavskiy and Konstantin Yakovlev and Aleksandr Panov},
year={2024},
eprint={2407.14931},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2407.14931},
}