合作 Pong

../../../_images/butterfly_cooperative_pong.gif

此环境属于 butterfly 环境。请先阅读该页面以获取一般信息。

导入

from pettingzoo.butterfly import cooperative_pong_v5

动作

离散

并行 API

手动控制

智能体

agents= ['paddle_0', 'paddle_1']

智能体

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()

API

class pettingzoo.butterfly.cooperative_pong.cooperative_pong.env(**kwargs)[源]
class pettingzoo.butterfly.cooperative_pong.cooperative_pong.raw_env(**kwargs)[源]
action_space(agent)[源]

接受智能体并返回该智能体的动作空间。

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

默认实现是返回 action_spaces 字典

close()[源]

关闭任何应释放的资源。

关闭渲染窗口、子进程、网络连接或任何其他应释放的资源。

observation_space(agent)[源]

接受智能体并返回该智能体的观测空间。

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

默认实现是返回 observation_spaces 字典

observe(agent)[源]

返回智能体当前可以进行的观测。

last() 调用此函数。

render()[源]

根据 self.render_mode 指定的方式渲染环境。

渲染模式可以是 human 以显示窗口。默认环境中的其他渲染模式包括返回 numpy 数组的 ‘rgb_array’(经典环境之外的所有环境都支持),以及返回打印字符串的 ‘ansi’(经典环境特有)。

reset(seed=None, options=None)[源]

将环境重置到起始状态。

state()[源]

State 返回环境的全局视图。

它适用于像 QMIX 这样的集中式训练分散式执行方法

step(action)[源]

接受并执行环境中当前 agent_selection 的动作。

自动切换控制到下一个智能体。