并行 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’。