二十一點¶

此環境是玩具文字環境的一部分,其中包含有關環境的一般資訊。
動作空間 |
|
觀測空間 |
|
import |
|
二十一點是一種紙牌遊戲,目標是擊敗莊家,方法是獲得總和接近 21 點(但不超過 21 點)的牌,比莊家的牌更接近。
描述¶
遊戲開始時,莊家有一張牌面朝上和一張牌面朝下,而玩家則有兩張牌面朝上。所有牌都從無限牌組中抽取(即有放回)。
紙牌點數如下:
人頭牌(J、Q、K)的點數為 10。
A 可以算作 11(稱為「可用的 A」)或 1。
數字牌(2-9)的值等於其數字。
玩家擁有手中牌的總和。玩家可以請求額外的牌(要牌),直到他們決定停止(停牌)或超過 21 點(爆牌,立即輸)。
在玩家停牌後,莊家會翻開他們的牌面朝下的牌,並抽牌直到他們的總和為 17 或更高。如果莊家爆牌,玩家獲勝。
如果玩家和莊家都沒有爆牌,則結果(贏、輸、平局)取決於誰的總和更接近 21。
此環境對應於 Sutton 和 Barto 在《強化學習:簡介》中範例 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,《強化學習:簡介》,2020 年。[線上]。可於:http://www.incompleteideas.net/book/RLbook2020.pdf
版本歷史¶
v1:修正二十一點中的自然處理
v0:初始版本發布