Blackjack(二十一點)¶

此環境是 Toy Text(玩具文字)環境的一部分,其中包含關於環境的一般資訊。
Action Space(動作空間) |
|
Observation Space(觀察空間) |
|
import(導入) |
|
Blackjack(二十一點)是一種紙牌遊戲,目標是透過取得總點數接近 21 點(但不超過 21 點)的牌,來擊敗莊家。
Description(描述)¶
遊戲開始時,莊家有一張面朝上和一張面朝下的牌,而玩家有兩張面朝上的牌。所有牌都從無限牌組中發出(即替換發牌)。
牌面點數如下:
公仔牌(J、Q、K)的點數為 10 點。
Ace(A)可以算作 11 點(稱為「可用 Ace」)或 1 點。
數字牌(2-10)的點數等於其數字。
玩家擁有手牌的總點數。玩家可以要求額外的牌(要牌),直到他們決定停止(停牌)或超過 21 點(爆牌,立即輸牌)。
在玩家停牌後,莊家揭開其面朝下的牌,並繼續要牌直到其總點數為 17 點或更高。如果莊家爆牌,則玩家獲勝。
如果玩家和莊家都沒有爆牌,則結果(贏、輸、平手)取決於誰的總點數更接近 21 點。
此環境對應於 Sutton 和 Barto 在《Reinforcement Learning: An Introduction》範例 5.1 中描述的 blackjack(二十一點)問題 [1]。
Action Space(動作空間)¶
動作形狀為 (1,)
,範圍為 {0, 1}
,表示是否停牌或要牌。
0:停牌
1:要牌
Observation Space(觀察空間)¶
觀察由一個 3 元組組成,包含:玩家的當前總點數、莊家一張明牌的點數(1-10,其中 1 代表 Ace(A)),以及玩家是否持有可用 Ace(A)(0 或 1)。
觀察以 (int(), int(), int())
的形式回傳。
Starting State(起始狀態)¶
起始狀態使用以下值初始化。
Observation(觀察) |
Values(值) |
---|---|
Player current sum(玩家當前總點數) |
4, 5, …, 21 |
Dealer showing card value(莊家明牌點數) |
1, 2, …, 10 |
Usable Ace(可用 Ace) |
0, 1 |
Rewards(獎勵)¶
Episode End(回合結束)¶
在以下情況下,回合結束:
Termination(終止)
玩家要牌且手牌總點數超過 21 點。
玩家停牌。
Ace(A)將始終被視為可用(11 點),除非它導致玩家爆牌。
Information(資訊)¶
不回傳額外資訊。
Arguments(參數)¶
import gymnasium as gym
gym.make('Blackjack-v1', natural=False, sab=False)
natural=False
:是否為起始就拿到 natural blackjack(自然 Blackjack)提供額外獎勵,即起始手牌為 Ace(A)和 10 點牌(總點數為 21 點)。
sab=False
:是否遵循 Sutton 和 Barto 書中概述的確切規則。如果 sab
為 True
,則關鍵字參數 natural
將被忽略。如果玩家獲得 natural blackjack(自然 Blackjack)而莊家沒有,則玩家獲勝(即獲得 +1 的獎勵)。反之規則不適用。如果玩家和莊家都獲得 natural blackjack(自然 Blackjack),則為平局(即獎勵 0)。
References(參考文獻)¶
[1] R. Sutton and A. Barto, “Reinforcement Learning: An Introduction” 2020. [Online]. Available: http://www.incompleteideas.net/book/RLbook2020.pdf
Version History(版本歷史)¶
v1:修正 Blackjack(二十一點)中的 natural(自然)處理方式
v0:初始版本發布