多智能体环境接口最容易混淆的是:一次 step 传一个动作,还是传所有当前智能体的动作字典。PettingZoo 用 AEC 和 Parallel 表达这两种交互方式。下面跑同一个石头剪刀布环境,只检查环境协议;固定出拳没有学习过程。
准备环境和动作含义
本例按 PettingZoo 1.27.0 的 make 接口编写,使用 Python 3.11。先在独立虚拟环境安装 pettingzoo==1.27.0 与 pygame==2.6.1。命令是 python -m pip install “pettingzoo==1.27.0” “pygame==2.6.1″。旧版本若不能导入 make,应查对应版本文档,不能混用入口。无渲染模式无需打开窗口。

rps-v2 有 player_0、player_1 两个个体,动作 0/1/2 分别是石头/布/剪刀。观察值 3 表示尚没有对手上一轮动作;它不是第 4 个可选动作。玩家 0 固定出石头,玩家 1 固定出剪刀,完整回合的即时奖励应为 +1 和 -1。
Parallel 一次提交联合动作
保存为 parallel_rps.py,执行 python parallel_rps.py。reset 返回观察字典和信息字典;step 的五个返回值都是按个体名称组织的字典。循环按 env.agents 取当前仍在环境里的个体,不按历史 possible_agents 强行发送失效动作。
from pettingzoo import make
env = make("parallel", "classic/rps-v2", max_cycles=3)
observations, infos = env.reset(seed=7)
rounds = 0
while env.agents:
actions = {a: (0 if a == "player_0" else 2) for a in env.agents}
observations, rewards, terminated, truncated, infos = env.step(actions)
rounds += 1
print(rounds, dict(rewards), dict(truncated))
assert rewards["player_0"] == 1 and rewards["player_1"] == -1
assert rounds == 3
env.close()
应有三轮,奖励每轮为 +1/-1,最后一轮因 max_cycles 达到而截断。不要把 truncation 当成“玩家输了”。如果出现无效动作错误,先核对 actions 的键和 action_space(agent),再看环境版本。
AEC 每次处理当前轮到的个体
下面是另一份独立脚本 aec_rps.py。AEC 先通过 agent_iter 得到当前个体,再用 last 读取它的观察和累计奖励。已终止或截断的个体要传 None,不能继续传出拳动作。last 里的奖励时点也不能直接当作 Parallel 同一轮返回值逐行比较。
from pettingzoo import make
env = make("aec", "classic/rps-v2", max_cycles=3)
env.reset(seed=7)
active_moves = 0
for agent in env.agent_iter():
observation, reward, terminated, truncated, info = env.last()
action = None if terminated or truncated else (0 if agent == "player_0" else 2)
if action is not None:
active_moves += 1
env.step(action)
env.close()
print("active moves:", active_moves)
assert active_moves == 6
这里应有 6 次有效个体动作,对应三轮双方出拳。AEC 的轮流调用不等于游戏一定轮流决策;石头剪刀布仍是同时决策游戏,环境管理了动作收集时点。并非所有 AEC 环境都能无条件转换成 Parallel。确认接口后再接入策略网络,并另行验证训练、合法动作和回合结束逻辑。
资料与核对依据
- https://pettingzoo.farama.org/api/parallel/
- https://pettingzoo.farama.org/api/aec/
- https://pettingzoo.farama.org/environments/classic/rps/
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32973.html