合作 Pong¶

此环境属于 butterfly 环境。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
动作 |
离散 |
并行 API |
是 |
手动控制 |
是 |
智能体 |
|
智能体 |
2 |
动作形状 |
Discrete(3) |
动作值 |
[0, 1] |
观测形状 |
(280, 480, 3) |
观测值 |
[0, 255] |
状态形状 |
(560, 960, 3) |
状态值 |
(0, 255) |
合作 Pong 是一款简单的 Pong 游戏,目标是将球保持在场上尽可能长时间。当球从屏幕左边缘或右边缘出界时,游戏结束。有两个智能体(球拍),一个沿着屏幕左边缘移动,另一个沿着右边缘移动。所有球的碰撞都是弹性的。每次重置时,球总是从屏幕中心以随机方向开始移动。为了让学习更具挑战性,右侧球拍默认为分层蛋糕形状。每个智能体的观测空间是屏幕属于它自己的一半。智能体有两种可能的动作(向上/向下移动)。如果球保持在界内,每个智能体在每个时间步都会收到一个奖励,奖励值为 max_reward / max_cycles
(默认为 0.11)。否则,如果球出界,每个智能体都会收到一个 off_screen_penalty
(默认为 -10) 的惩罚奖励,游戏结束。
手动控制¶
使用 'W' 和 'S' 键移动左侧球拍。使用 '上' 和 '下' 方向键移动右侧球拍。
参数¶
cooperative_pong_v5.env(ball_speed=9, left_paddle_speed=12,
right_paddle_speed=12, cake_paddle=True, max_cycles=900, bounce_randomness=False, max_reward=100, off_screen_penalty=-10)
ball_speed
:球的速度(像素)
left_paddle_speed
:左侧球拍的速度(像素)
right_paddle_speed
:右侧球拍的速度(像素)
cake_paddle
:如果为 True,右侧球拍将呈现 4 层婚礼蛋糕的形状
max_cycles
:在 max_cycles 步后,所有智能体将返回完成
bounce_randomness
:如果为 True,球与球拍的每次碰撞都会在球的方向上增加一个小的随机角度,球速保持不变。
max_reward
:在 max_cycles 时间步内给予每个智能体的总奖励
off_screen_penalty
:如果球出界,对每个智能体给予的负奖励惩罚
版本历史¶
v5:修复了球传送 bug
v4:添加了 max_reward 和 off_screen_penalty 参数并更改了默认值,修复了球偶尔会传送的故障,奖励重新设计 (1.14.0)
v3:将观测空间更改为包含整个屏幕 (1.10.0)
v2:杂项修复 (1.4.0)
v1:修复了
dones
计算中的 bug (1.3.1)v0:初始版本发布 (1.0.0)
用法¶
AEC¶
from pettingzoo.butterfly import cooperative_pong_v5
env = cooperative_pong_v5.env(render_mode="human")
env.reset(seed=42)
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
if termination or truncation:
action = None
else:
# this is where you would insert your policy
action = env.action_space(agent).sample()
env.step(action)
env.close()
并行¶
from pettingzoo.butterfly import cooperative_pong_v5
env = cooperative_pong_v5.parallel_env(render_mode="human")
observations, infos = env.reset()
while env.agents:
# this is where you would insert your policy
actions = {agent: env.action_space(agent).sample() for agent in env.agents}
observations, rewards, terminations, truncations, infos = env.step(actions)
env.close()