PettingZoo1 类似于 Gym 的多智能体版本。Gym2是 OpenAI 开发的一个著名的强化学习库,它为环境提供了标准的 API,可以轻松地使用不同的强化学习代码库进行学习。
文档:https://www.pettingzoo.ml
代码:https://github.com/Farama-Foundation/PettingZoo
但是当前大多数单智能体环境库存在一些问题。
因此,为了解决上述问题,PettingZoo引入了AEG(Agent Environment Cycle games)作为PettingZoo API的基础。在AEG模型中,智能体依次看到他们的观察结果、采取行动,从其他智能体发出奖励,并选择下一个要采取行动的智能体。这实际上是POSG模型的一个顺序步进形式。
按顺序步进形式建模多智能体环境有许多好处:
PettingZoo的设计还考虑了以下原则:
当前PettingZoo支持的多智能体游戏环境如下表所示。
游戏环境 | 示例图 |
---|---|
Atari: Multi-player Atari 2600 games (包含合作、竞争、混合环境) pip install pettingzoo[sisl] | |
Butterfly: 合作式游戏 pip install pettingzoo[butterfly] | |
Classic: 经典游戏,比如棋牌、卡牌游戏等。pip install pettingzoo[classic] | |
MAgent: 网格世界中的大量像素智能体,在战斗或其他竞争场景中进行交互。4pip install pettingzoo[magent] | |
MPE: 一组面向通信的粒子环境,粒子可以移动、通信、互相看到、互相推动,并与固定的地标交互。5 pip install pettingzoo[mpe] | |
SISL: 3个合作环境 6 pip install pettingzoo[sisl] |
配置虚拟环境7:
# create venv
python3 -m venv marl-env
# active venv
source marl-env/bin/activate
# upgrade really old pip version on my system
pip install --upgrade pip
安装pettingzoo包:
# install packages
pip install pettingzoo[classic]
pip install spyder-notebook
pip install dill
import random
import numpy as np
from collections import defaultdict
import dill
from pettingzoo.classic import tictactoe_v3
env = tictactoe_v3.env()
有的环境可以在初始化时进行参数配置:
cooperative_pong.env(ball_speed=18, left_paddle_speed=25,
right_paddle_speed=25, is_cake_paddle=True, max_cycles=900, bounce_randomness=False)
env.reset()
for agent in env.agent_iter():
observation, reward, done, info = env.last()
action = policy(observation, agent)
env.step(action)
这段代码中,agent_iter(max_iter=2**63)
返回一个迭代器,它产生环境的当前智能体。max_iter它在环境中的所有代理都完成或(已执行步骤)时终止。
last(observe=True)
返回 observation, reward, done, info
,代表当前能够行动的代理。返回的奖励是代理自上次行动以来收到的累积奖励。如果 observe 设置为False,则不会计算观测值,并将None在其位置返回。请注意,完成单个代理并不意味着环境已完成。
reset()
重置环境,并在第一次调用时设置它以供使用。只有在调用此函数后,对象才会agents变得可用。
step(action)
在环境中采取并执行代理的动作,自动将控制权切换到下一个代理。
agent_selection
显示当前选择的代理。
agents
列出所有可用的代理。
完整 API 文档:
https://www.pettingzoo.ml/api