并行 API

除了主 API,我们还有一个次要的并行 API,适用于所有智能体同时采取动作并获得观察的环境。可以通过 <game>.parallel_env() 来创建支持并行 API 的环境。此 API 基于部分可观察随机博弈(POSGs)的范式,其细节类似于 RLlib 的多智能体环境规范,不同之处在于我们允许智能体之间存在不同的观察空间和动作空间。

有关与 AEC API 的比较,请参阅 关于 AEC。更多信息请参阅 PettingZoo:多智能体强化学习的标准 API

PettingZoo 封装器可用于在并行和 AEC 环境之间进行转换,但存在一些限制(例如,AEC 环境必须在每个周期结束时只更新一次)。

示例

PettingZoo Butterfly 提供了并行环境的标准示例,例如 活塞球

我们提供了创建两个自定义并行环境的教程:剪刀石头布(并行)和一个简单的网格世界环境

用法

并行环境可以如下方式交互

from pettingzoo.butterfly import pistonball_v6
parallel_env = pistonball_v6.parallel_env(render_mode="human")
observations, infos = parallel_env.reset(seed=42)

while parallel_env.agents:
    # this is where you would insert your policy
    actions = {agent: parallel_env.action_space(agent).sample() for agent in parallel_env.agents}

    observations, rewards, terminations, truncations, infos = parallel_env.step(actions)
parallel_env.close()

ParallelEnv

class pettingzoo.utils.env.ParallelEnv[source]

并行环境类。

它会同时执行每个活动智能体的步骤。如果你不确定自己是否正确实现了 ParallelEnv,请尝试在网站的开发者文档中运行 parallel_api_test

agents

所有当前智能体名称的列表,通常是整数。这些名称可能会随着环境的进行而改变(即可以添加或移除智能体)。

类型:

list[AgentID]

num_agents

智能体列表的长度。

类型:

int

possible_agents

环境可能生成的所有 possible_agents 的列表。等同于观察空间和动作空间中的智能体列表。这不能通过游戏或重置来改变。

类型:

list[AgentID]

max_num_agents

possible_agents 列表的长度。

类型:

int

observation_spaces

一个字典,包含每个智能体的观察空间,以智能体名称为键。这不能通过游戏或重置来改变。

类型:

Dict[AgentID, gym.spaces.Space]

action_spaces

一个字典,包含每个智能体的动作空间,以智能体名称为键。这不能通过游戏或重置来改变。

类型:

Dict[AgentID, gym.spaces.Space]

step(actions: dict[AgentID, ActionType]) tuple[dict[AgentID, ObsType], dict[AgentID, float], dict[AgentID, bool], dict[AgentID, bool], dict[AgentID, dict]][source]

接收一个以智能体名称为键的动作字典。

返回观察字典、奖励字典、终止字典、截断字典和信息字典,每个字典都以智能体为键。

reset(seed: int | None = None, options: dict | None = None) tuple[dict[AgentID, ObsType], dict[AgentID, dict]][source]

重置环境。

并返回一个观察字典(以智能体名称为键)

render() None | ndarray | str | list[source]

如果支持,显示环境的渲染帧。

默认环境中的其他渲染模式包括 ‘rgb_array’,它返回一个 numpy 数组,并得到除经典环境外所有环境的支持;以及 ‘ansi’,它返回打印的字符串(经典环境特有)。

close()[source]

关闭渲染窗口。

state() ndarray[source]

返回状态。

State 返回环境的全局视图,适用于 QMIX 等集中训练分散执行方法。

observation_space(agent: AgentID) Space[source]

接收智能体并返回该智能体的观察空间。

必须对相同的智能体名称返回相同的值

默认实现是返回 observation_spaces 字典

action_space(agent: AgentID) Space[source]

接收智能体并返回该智能体的动作空间。

必须对相同的智能体名称返回相同的值

默认实现是返回 action_spaces 字典