二十一點¶
此環境是玩具文字環境的一部分,其中包含有關環境的一般資訊。
動作空間 |
|
觀察空間 |
|
匯入 |
|
二十一點是一種紙牌遊戲,目標是透過獲得的牌點數總和比莊家更接近21點(但不超過21點)來擊敗莊家。
描述¶
遊戲開始時,莊家有一張明牌和一張蓋牌,而玩家有兩張明牌。所有牌都從無限牌堆中抽取(即有放回地抽取)。
牌面價值為
人頭牌(傑克、皇后、國王)點數為10。
A可以算作11點(稱為“可用A”)或1點。
數字牌(2-10)的價值等於其牌面數字。
玩家持有牌的總點數。玩家可以請求額外牌(hit),直到他們決定停止(stick)或超過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: 初始版本釋出