石头剪刀布¶

该环境是 经典环境 的一部分。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
行动 |
离散 |
Parallel API |
是 |
手动控制 |
否 |
智能体 |
|
智能体 |
2 |
行动形状 |
Discrete(3) |
行动值 |
Discrete(3) |
观测形状 |
Discrete(4) |
观测值 |
Discrete(4) |
石头剪刀布是一个双人手势游戏,每位玩家选择石头、剪刀或布中的一个,然后同时亮出选择。如果双方选择相同,则为平局。然而,如果选择不同,胜者判定规则如下:石头胜剪刀,剪刀胜布,布胜石头。
可以通过添加新的行动对来扩展游戏,增加额外的行动。成对添加新行动可以使游戏更平衡。这意味着最终游戏将拥有奇数个行动,每个行动恰好能战胜其他行动的一半,同时被另一半击败。这种游戏最常见的扩展是 石头剪刀布蜥蜴斯波克,其中只增加了一对额外的行动。
参数¶
rps_v2.env(num_actions=3, max_cycles=15)
num_actions
:游戏中适用的行动数量。石头剪刀布游戏的默认值为 3。此参数必须是大于 3 的奇数整数。如果给定值为 5,则游戏扩展为石头剪刀布蜥蜴斯波克。
max_cycles
:经过 max_cycles 步后,所有智能体将返回完成(done)。
观测空间¶
石头剪刀布¶
如果需要 3 个行动,则玩的是标准的石头剪刀布游戏。观测值是对手的最后行动,其空间是一个标量值,有 4 个可能的值。由于双方玩家同时亮出选择,所以在双方行动之前,观测值为 None。因此,3 代表尚未采取行动。石头用 0 表示,布用 1 表示,剪刀用 2 表示。
值 |
观测 |
---|---|
0 |
石头 |
1 |
布 |
2 |
剪刀 |
3 |
None |
扩展游戏¶
如果游戏中需要的行动数量大于 3,观测值仍然是对手的最后行动,其空间是具有 1 + n 个可能值的标量,其中 n 是行动的数量。在双方玩家行动之前,观测值也将为 None,并且空间中最大的可能标量值 1 + n 代表尚未采取行动。额外行动从 0 石头行动开始按递增顺序编码。如果需要 5 个行动,游戏将扩展到石头剪刀布蜥蜴斯波克。下表显示了一个具有 7 个可能行动的观测空间的示例。
值 |
观测 |
---|---|
0 |
石头 |
1 |
布 |
2 |
剪刀 |
3 |
蜥蜴 |
4 |
斯波克 |
5 |
行动_6 |
6 |
行动_7 |
7 |
None |
行动空间¶
石头剪刀布¶
行动空间是一个标量值,有 3 个可能的值。这些值编码如下:石头是 0,布是 1,剪刀是 2。
值 |
行动 |
---|---|
0 |
石头 |
1 |
布 |
2 |
剪刀 |
扩展游戏¶
行动空间是一个标量值,有 n 个可能的值,其中 n 是额外行动对的数量。下表显示了 7 个可能行动的值编码示例。
值 |
行动 |
---|---|
0 |
石头 |
1 |
布 |
2 |
剪刀 |
3 |
蜥蜴 |
4 |
斯波克 |
5 |
行动_6 |
6 |
行动_7 |
奖励¶
胜者 |
败者 |
---|---|
+1 |
-1 |
如果游戏平局,双方玩家将获得 0 的奖励。
版本历史¶
v2: 合并石头剪刀布和石头剪刀布蜥蜴斯波克环境,添加 num_actions 和 max_cycles 参数 (1.9.0)
v1: 由于采用了新的智能体迭代方案,其中所有智能体在完成后都会被迭代,因此提升了所有环境的版本 (1.4.0)
v0: 初始版本发布 (1.0.0)
用法¶
AEC¶
from pettingzoo.classic import rps_v2
env = rps_v2.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()
Parallel¶
from pettingzoo.classic import rps_v2
env = rps_v2.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.classic.rps.rps.raw_env(num_actions: int | None = 3, max_cycles: int | None = 15, render_mode: str | None =None, screen_height: int | None =800)[source]¶
石头剪刀布的双人环境。
可扩展到石头剪刀布蜥蜴斯波克、行动_6、行动_7...等多种行动的环境。观测值仅为对手的最后行动。
- observation_space(agent)[source]¶
接受智能体作为输入,并返回该智能体的观测空间。
必须为相同的智能体名称返回相同的值
默认实现是返回 observation_spaces 字典