Leduc Hold’em¶

此环境属于经典环境系列。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
动作 |
|
Parallel API |
是 |
手动控制 |
否 |
智能体 |
|
智能体 |
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 |
当前玩家手牌 |
3 - 5 |
公共牌 |
6 - 20 |
当前玩家筹码 |
21 - 35 |
对手筹码 |
合法动作掩码¶
当前智能体可用的合法动作可在字典观测的 'action_mask'
元素中找到。'action_mask'
是一个二进制向量,向量的每个索引表示该动作是否合法。对于当前回合以外的任何智能体,'action_mask'
将全部为零。执行非法动作会导致游戏结束,非法动作的智能体获得 -1 的奖励,所有其他智能体获得 0 的奖励。
动作空间¶
动作 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()