Blackjack(二十一點)

../../../_images/blackjack.gif

此環境是 Toy Text(玩具文字)環境的一部分,其中包含關於環境的一般資訊。

Action Space(動作空間)

Discrete(2)(離散(2))

Observation Space(觀察空間)

Tuple(Discrete(32), Discrete(11), Discrete(2))

import(導入)

gymnasium.make("Blackjack-v1")

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(獎勵)

  • win game(贏得遊戲):+1

  • lose game(輸掉遊戲):-1

  • draw game(平局):0

  • win game with natural blackjack(以自然 Blackjack 贏得遊戲):+1.5(如果 natural 為 True)+1(如果 natural 為 False)

Episode End(回合結束)

在以下情況下,回合結束:

  • Termination(終止)

  1. 玩家要牌且手牌總點數超過 21 點。

  2. 玩家停牌。

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 書中概述的確切規則。如果 sabTrue,則關鍵字參數 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:初始版本發布