Leduc Hold’em

../../../_images/classic_leduc_holdem.gif

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

导入

from pettingzoo.classic import leduc_holdem_v4

动作

Parallel API

手动控制

智能体

agents= ['player_0', 'player_1']

智能体

2

动作空间形状

离散(4)

动作值

离散(4)

观测空间形状

(36,)

观测值

[0, 1]

Leduc Hold'em 是 Limit Texas Hold'em(限注德州扑克)的一个变种,固定为 2 名玩家、2 轮游戏,牌组包含 6 张牌(2 种花色的 J、Q 和 K)。游戏开始时,每位玩家发一张牌,下注后,翻开一张公共牌。接着进行另一轮。游戏结束时,手牌最好的玩家获胜并获得奖励 (+1),输家获得 -1。任何时候,任何玩家都可以弃牌。

我们的实现封装了 RLCard,您可以参考其文档以获取更多详细信息。如果您在研究中使用此游戏,请引用他们的工作。

观测空间

观测是一个字典,其中包含一个 'observation' 元素(即下面描述的常规强化学习观测)和一个 'action_mask' 元素(用于存放合法动作,在合法动作掩码部分描述)。

RLCard 所述,主观测空间的前 3 个条目对应玩家手牌(J、Q 和 K),接下来的 3 个条目代表公共牌。索引 6 到 19 和 20 到 33 分别编码当前玩家和对手的筹码数量。

索引

描述

0 - 2

当前玩家手牌
0: J, 1: Q, 2: K

3 - 5

公共牌
3: J, 4: Q, 5: K

6 - 20

当前玩家筹码
6: 0 筹码, 7: 1 筹码, …, 20: 14 筹码

21 - 35

对手筹码
21: 0 筹码, 22: 1 筹码, …, 35: 14 筹码

动作空间

动作 ID

动作

0

跟注

1

加注

2

弃牌

3

过牌

奖励

赢家

输家

+加注筹码 / 2

-加注筹码 / 2

版本历史

  • v4: 升级到 RLCard 1.0.3 (1.11.0)

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

  • v2: 提升了 RLCard 版本,修复了错误,将观测中的合法动作掩码替换了信息中的非法动作列表 (1.5.0)

  • v1: 提升了 RLCard 版本,修复了观测空间,采用了新的智能体迭代方案,在智能体完成后遍历所有智能体 (1.4.0)

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

用法

AEC

from pettingzoo.classic import leduc_holdem_v4

env = leduc_holdem_v4.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.rlcard_envs.leduc_holdem.env(**kwargs)[source]
class pettingzoo.classic.rlcard_envs.leduc_holdem.raw_env(render_mode: str | None = None, screen_height: int | None = 1000)[source]
render()[source]

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

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