四子棋

../../../_images/classic_connect_four.gif

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

导入

from pettingzoo.classic import connect_four_v3

动作

离散

并行 API

手动控制

智能体

agents= ['player_0', 'player_1']

智能体

2

动作形状

(1,)

动作值

Discrete(7)

观察形状

(6, 7, 2)

观察值

[0,1]

四子棋是一款双人回合制游戏,玩家必须垂直、水平或对角线连接四个自己的棋子。玩家将各自的棋子放入一个立式棋盘的列中,每个棋子都会落下,直到到达列底或现有棋子上方。玩家不能在已满的列中放置棋子,当一名玩家连接了四个棋子,或者当所有 7 列都被填满时,游戏结束。

观察空间

观察是一个字典,其中包含一个 'observation' 元素(即下文描述的常规强化学习观察)和一个 'action_mask',后者包含合法动作,详见合法动作掩码部分。

主要的观察空间是 6x7 网格的两个平面。每个平面代表一个特定智能体的棋子,网格中的每个位置代表相应智能体棋子的放置情况。1 表示该智能体在该单元格中放置了棋子,0 表示他们未在该单元格中放置棋子。0 意味着该单元格要么为空,要么另一个智能体在该单元格中放置了棋子。

动作空间

动作空间是从 0 到 6(包括)的整数集合,其中动作代表棋子应放入的列。

奖励

如果一个智能体成功连接了四个自己的棋子,他们将获得 1 分奖励。同时,对手智能体将获得 -1 分。如果游戏以平局结束,则两名玩家都获得 0 分奖励。

版本历史

  • v3: 修复了 observe() 的任意调用中的错误 (1.8.0)

  • v2: 观察中的合法动作掩码替换了 infos 中的非法移动列表 (1.5.0)

  • v1: 由于采用了新的智能体迭代方案(即所有智能体完成后才进行迭代),所有环境的版本都已提升 (1.4.0)

  • v0: 初始版本发布 (1.0.0)

用法

AEC

from pettingzoo.classic import connect_four_v3

env = connect_four_v3.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:
        mask = observation["action_mask"]
        # this is where you would insert your policy
        action = env.action_space(agent).sample(mask)

    env.step(action)
env.close()

API

class pettingzoo.classic.connect_four.connect_four.env(**kwargs)[source]
class pettingzoo.classic.connect_four.connect_four.raw_env(render_mode: str | None =None, screen_scaling: int =9)[source]
action_space(agent)[source]

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

必须为相同的智能体名称返回相同的值

默认实现是返回 action_spaces 字典

close()[source]

关闭所有应释放的资源。

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

observation_space(agent)[source]

接收智能体并返回该智能体的观察空间。

必须为相同的智能体名称返回相同的值

默认实现是返回 observation_spaces 字典

observe(agent)[source]

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

last() 调用此函数。

render()[source]

按照 self.render_mode 指定的方式渲染环境。

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

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

将环境重置到起始状态。

step(action)[source]

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

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