二十一点¶

此环境是玩具文本环境的一部分,其中包含有关环境的通用信息。
动作空间 |
|
观测空间 |
|
导入 |
|
二十一点是一种纸牌游戏,目标是通过获得总点数更接近 21 点(不超过 21 点)的牌来击败庄家。
描述¶
游戏开始时,庄家有一张明牌和一张暗牌,而玩家有两张明牌。所有牌都从无限牌堆中抽取(即有放回地抽取)。
牌的点数是
花牌(J、Q、K)的点数为 10。
A 可以计为 11 点(称为“可用 A”)或 1 点。
数字牌(2-10)的点数等于其数字。
玩家的点数为所持牌的点数之和。玩家可以要求加牌(hit),直到他们决定停牌(stick)或超过 21 点(爆牌,立即输牌)。
玩家停牌后,庄家亮出其暗牌,并抽牌直到其点数之和达到 17 点或更高。如果庄家爆牌,玩家获胜。
如果玩家和庄家都没有爆牌,则根据谁的点数更接近 21 点来决定结果(赢、输、平局)。
此环境对应于 Sutton 和 Barto 在《Reinforcement Learning: An Introduction》的示例 5.1 中描述的二十一点问题版本 [1]。
动作空间¶
动作形状为 (1,)
,取值范围为 {0, 1}
,表示停牌或加牌。
0:停牌
1:加牌
观测空间¶
观测由一个 3 元组组成,包含:玩家当前的点数之和、庄家一张明牌的点数值(1-10,其中 1 代表 A)以及玩家是否持有可用 A(0 或 1)。
观测以 (int(), int(), int())
的形式返回。
起始状态¶
起始状态使用以下值初始化。
观测 |
值 |
---|---|
玩家当前点数之和 |
4, 5, …, 21 |
庄家明牌的点数值 |
1, 2, …, 10 |
可用 A |
0, 1 |
奖励¶
回合结束¶
如果发生以下情况,回合结束
终止
玩家加牌且手牌点数之和超过 21 点。
玩家停牌。
A 始终计为可用(11 点),除非它使玩家爆牌。
信息¶
不返回额外信息。
参数¶
import gymnasium as gym
gym.make('Blackjack-v1', natural=False, sab=False)
natural=False
:是否为以天生二十一点开始游戏(即以一张 A 和一张 10 点牌开始,总点数为 21 点)给予额外奖励。
sab=False
:是否遵循 Sutton 和 Barto 书中概述的确切规则。如果 sab
为 True
,则关键字参数 natural
将被忽略。如果玩家获得天生二十一点而庄家没有,则玩家将获胜(即获得 +1 的奖励)。反向规则不适用。如果玩家和庄家都获得天生二十一点,则为平局(即奖励 0)。
参考文献¶
[1] R. Sutton 和 A. Barto,“Reinforcement Learning: An Introduction” 2020。[在线]。可用网址:http://www.incompleteideas.net/book/RLbook2020.pdf
版本历史¶
v1:修复了二十一点中的天生牌处理
v0:初始版本发布