并行 API

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

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

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

示例

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

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

用法

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

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

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

类型:

list[AgentID]

max_num_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 | np.ndarray | str | list[source]

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

默认环境中的其他渲染模式包括返回 numpy 数组且所有非经典环境都支持的 ‘rgb_array’,以及返回打印字符串(经典环境特有)的 ‘ansi’

close()[source]

关闭渲染窗口。

state() ndarray[source]

返回状态。

State 返回环境的全局视图,适用于像 QMIX 这样的集中训练分布式执行方法。

observation_space(agent: AgentID) Space[source]

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

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

默认实现是返回 observation_spaces 字典

action_space(agent: AgentID) Space[source]

接收智能体名称并返回该智能体的行动空间。

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

默认实现是返回 action_spaces 字典