并行 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’,它返回打印的字符串(经典环境特有)。