井字棋

../../../_images/classic_tictactoe.gif

该环境是经典环境的一部分。请先阅读该页面以获取一般信息。

导入

from pettingzoo.classic import tictactoe_v3

动作

离散

并行 API

手动控制

智能体

agents= ['player_1', 'player_2']

智能体

2

动作形状

(1)

动作值

[0, 8]

观察形状

(3, 3, 2)

观察值

[0,1]

井字棋是一个简单的回合制策略游戏,其中两名玩家 X 和 O 轮流在 3x3 的格子上标记位置。第一个将自己的标记放置在水平、垂直或对角线上三格相连的玩家获胜。

观察空间

观察是一个字典,其中包含一个 'observation' 元素(这是下面描述的常规 RL 观察)和一个 'action_mask' 元素(它包含合法动作,在合法动作掩码部分进行了描述)。

主要观察是 3x3 棋盘的两个平面。对于 player_1,第一个平面代表 X 的放置,第二个平面显示 O 的放置。每个单元格的可能值是 0 或 1;在第一个平面中,1 表示 X 已放置在该单元格中,0 表示 X 未在该单元格中。类似地,在第二个平面中,1 表示 O 已放置在该单元格中,而 0 表示 O 未放置。对于 player_2,观察是相同的,但 X 和 O 交换了位置,因此 O 被编码在平面 1 中,X 被编码在平面 2 中。这允许进行自博弈。

动作空间

从 0 到 8 的每个动作代表在对应单元格中放置 X 或 O。单元格的索引如下:

0 | 3 | 6
_________

1 | 4 | 7
_________

2 | 5 | 8

奖励

赢家

输家

+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 tictactoe_v3

env = tictactoe_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.tictactoe.tictactoe.env(**kwargs)[source]
class pettingzoo.classic.tictactoe.tictactoe.raw_env(render_mode: str | None = None, screen_height: int | None = 1000)[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 的动作。

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