PettingZoo

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 spaces

class 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_v6

env = 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_v5

env = 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值