Basic Usage - PettingZoo Documentation
PettingZoo
1. 介绍(Introduction)
本部分涵盖 PettingZoo 的基础使用、环境创建和环境测试。
(1)Basic Usage(基础使用)
介绍 PettingZoo 的基本用法,包括:
• 如何安装 PettingZoo
• 如何加载环境 并进行基本交互
• API 结构(如 AEC API 和 Parallel API)
示例代码:基本环境运行
import pettingzoo.butterfly as butterfly
# 加载 Pistonball 多智能体环境
env = butterfly.pistonball_v6.env(render_mode="human")# 重置环境
env.reset(seed=42)# 运行环境中的所有智能体
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
action = env.action_space(agent).sample() # 采取随机动作
env.step(action)
📌 解析:
• env.agent_iter():遍历所有智能体
• env.last():获取当前智能体的状态、奖励等信息
• env.step(action):执行动作,进入下一个智能体
(2)Environment Creation(环境创建)
该部分指导用户如何创建自定义多智能体环境,包括:
• 定义智能体数量
• 设定状态空间与动作空间
• 环境规则(奖励、终止条件等)
👉 详细文档:PettingZoo - Environment Creation
示例代码:创建自定义环境
from pettingzoo import AECEnv
from gymnasium import spacesclass CustomEnv(AECEnv):
def __init__(self):
self.agents = ["agent_1", "agent_2"]
self.action_spaces = {agent: spaces.Discrete(5) for agent in self.agents}
self.observation_spaces = {agent: spaces.Box(low=0, high=1, shape=(4,)) for agent in self.agents}def reset(self, seed=None):
pass # 这里定义环境的重置逻辑def step(self, action):
pass # 这里定义环境的执行逻辑
📌 解析:
• 继承 AECEnv,创建多智能体环境
• 定义 agents,指定智能体
• 设定 action_spaces 和 observation_spaces,定义动作和状态空间
(3)Testing Environments(环境测试)
该部分提供 PettingZoo 运行环境的自动化测试方法,用于:
• 检查环境是否符合 API 规范
• 确保自定义环境的稳定性
• 发现潜在的 bug 或异常
📌 示例:测试一个 PettingZoo 环境
from pettingzoo.test import api_test
from pettingzoo.butterfly import pistonball_v6env = pistonball_v6.env()
api_test(env) # 运行 API 规范测试
🔹 该代码可以检测 env 是否符合 PettingZoo API 标准。
2. API(应用编程接口)
PettingZoo 提供了多种 API,用于不同类型的多智能体任务。
(1)AEC API
(Agent Environment Cycle API,智能体-环境循环 API)
AEC API 适用于回合制(Turn-Based)环境,智能体按照固定顺序依次执行动作,例如:
• 棋类游戏(国际象棋、围棋)
• 扑克类游戏
• 策略性游戏
📌 示例代码:使用 AEC API
from pettingzoo.classic import chess_v5
env = chess_v5.env(render_mode="human")
env.reset()for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
action = env.action_space(agent).sample()
env.step(action)
🔹 在 AEC API 下,每个智能体轮流执行动作。
(2)Parallel API(并行 API)
Parallel API 适用于同时执行动作的多智能体环境,例如:
• 机器人仿真
• 多人竞技游戏
📌 示例代码:使用 Parallel API
from pettingzoo.butterfly import pistonball_v6
env = pistonball_v6.parallel_env(render_mode="human")
obs, info = env.reset()while env.agents:
actions = {agent: env.action_space(agent).sample() for agent in env.agents}
obs, rewards, terminations, truncations, infos = env.step(actions)
🔹 在 Parallel API 下,所有智能体同时执行动作。
(3)Wrappers(包装器)
PettingZoo 允许使用 Wrappers(包装器) 来修改环境行为,如:
• 状态归一化
• 动作离散化
• 数据记录与回放
📌 示例代码:使用 Gymnasium 兼容包装器
from pettingzoo.utils.wrappers import BaseWrapper
from pettingzoo.classic import chess_v5env = chess_v5.env()
wrapped_env = BaseWrapper(env)
wrapped_env.reset()
🔹 通过 Wrappers,用户可以更轻松地管理 PettingZoo 环境。
(4)Utils(实用工具)
PettingZoo 提供了一些实用工具(Utils),用于:
• 测试环境(test.py)
• 记录智能体交互日志
• 转换环境数据格式
3. Environments(环境)
PettingZoo 提供了多种环境类型,侧边栏展示了部分环境类别:
(1)Atari
• Atari 2600 游戏
• 例如:乒乓球(Pong)、太空侵略者(Space Invaders)等
• 适用于 像素级决策的 MARL 研究
📌 示例代码:加载 Atari 乒乓球环境
from pettingzoo.atari import pong_v3
env = pong_v3.env()
env.reset()
(2)Butterfly
• 适用于 合作型任务(Cooperative Games)
• 例如:Pistonball、Knights, Archers & Zombies
• 适合研究 多智能体协作行为
📌 示例代码:运行 Butterfly 任务
from pettingzoo.butterfly import knights_archers_zombies_v10
env = knights_archers_zombies_v10.env(render_mode="human")
env.reset()
4. 总结
PettingZoo 是一个 多智能体强化学习(MARL) 的标准化框架,提供:
✅ 多种环境(棋类、对抗、合作等)
✅ 两种 API(AEC API & Parallel API)
✅ 支持自定义环境开发
✅ 与主流强化学习库兼容
🚀 官方网站:PettingZoo