四子棋¶

此环境属于经典环境。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
动作 |
离散 |
并行 API |
是 |
手动控制 |
否 |
智能体 |
|
智能体 |
2 |
动作形状 |
(1,) |
动作值 |
Discrete(7) |
观察形状 |
(6, 7, 2) |
观察值 |
[0,1] |
四子棋是一款双人回合制游戏,玩家必须垂直、水平或对角线连接四个自己的棋子。玩家将各自的棋子放入一个立式棋盘的列中,每个棋子都会落下,直到到达列底或现有棋子上方。玩家不能在已满的列中放置棋子,当一名玩家连接了四个棋子,或者当所有 7 列都被填满时,游戏结束。
观察空间¶
观察是一个字典,其中包含一个 'observation'
元素(即下文描述的常规强化学习观察)和一个 'action_mask'
,后者包含合法动作,详见合法动作掩码部分。
主要的观察空间是 6x7 网格的两个平面。每个平面代表一个特定智能体的棋子,网格中的每个位置代表相应智能体棋子的放置情况。1 表示该智能体在该单元格中放置了棋子,0 表示他们未在该单元格中放置棋子。0 意味着该单元格要么为空,要么另一个智能体在该单元格中放置了棋子。
合法动作掩码¶
当前智能体的合法动作可在字典观察的 action_mask
元素中找到。action_mask
是一个二进制向量,向量中的每个索引表示该动作是否合法。对于非当前回合的智能体,action_mask
将全为零。执行非法动作将导致游戏结束,非法移动的智能体获得 -1 的奖励,所有其他智能体获得 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.raw_env(render_mode: str | None =None, screen_scaling: int =9)[source]¶
-
- observation_space(agent)[source]¶
接收智能体并返回该智能体的观察空间。
必须为相同的智能体名称返回相同的值
默认实现是返回 observation_spaces 字典