第三部《強化學習》29/100 模擬遊戲實作:21 點 BlackJack 🃏 訓練會算牌的 AI!

更新 發佈閱讀 12 分鐘

AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》

29/100 第三週:📌 蒙地卡羅方法(Monte Carlo Methods)

29.模擬遊戲實作:21 點 BlackJack 🃏 訓練會算牌的 AI!

_______________________________________

🎯 單元導讀:

在理論學習了蒙地卡羅控制法後,現在是時候實戰演練!

我們選擇經典遊戲《Blackjack(21 點)》來進行模擬訓練,目標是:

✅ 透過蒙地卡羅學習,讓 AI 學會何時該「要牌」或「停牌」,最大化勝率!

這不只是遊戲,更是強化學習策略訓練的絕佳練習場!

________________________________________

🧠 一、什麼是 Blackjack?

Blackjack 的基本規則簡單明確:每輪開始玩家會獲得兩張起始牌,之後可以選擇「要牌」(拿一張新牌)或「停牌」(停止拿牌)。若手中點數超過 21 點則稱為爆牌,立即輸掉該局。遊戲不僅取決於自己的手牌點數,莊家的明牌與行為規則同樣影響勝負,因此在設計學習模型時,必須將「對手資訊」也納入決策考量。這樣的完整資訊與決策平衡,正好適合強化學習訓練策略選擇能力。

________________________________________

🧪 二、使用 OpenAI Gym 環境

Gym 提供了內建的 Blackjack-v1 環境:

pip install gym

環境特性:

observation: tuple of (player sum, dealer’s visible card, usable ace)

action: 0 = 停牌(stick), 1 = 要牌(hit)

________________________________________

💻 三、完整實作:First-Visit MC Control(On-policy)

python

import gym

import numpy as np

from collections import defaultdict

env = gym.make("Blackjack-v1")

def epsilon_greedy(Q, state, n_actions, epsilon):

if np.random.rand() < epsilon:

return np.random.randint(n_actions)

else:

return np.argmax(Q[state])

def mc_control_blackjack(num_episodes=500_000, gamma=1.0, epsilon=0.1):

Q = defaultdict(lambda: np.zeros(env.action_space.n))

returns = defaultdict(list)

for _ in range(num_episodes):

episode = []

state = env.reset()

done = False

while not done:

action = epsilon_greedy(Q, state, env.action_space.n, epsilon)

next_state, reward, done, _, _ = env.step(action)

episode.append((state, action, reward))

state = next_state

G = 0

visited = set()

for state, action, reward in reversed(episode):

G = gamma * G + reward

if (state, action) not in visited:

returns[(state, action)].append(G)

Q[state][action] = np.mean(returns[(state, action)])

visited.add((state, action))

return Q

這段程式碼利用蒙地卡羅控制(MC-Control)搭配 ε-greedy 策略來訓練 Blackjack 智能體。每次完整執行一場遊戲,記錄所有 (state, action, reward) 序列,並透過回溯累加回報 G 來更新 Q 值。採用 First-Visit 策略,避免重複更新同一回合內的相同行為,並用多次觀察到的回報平均值來穩定 Q 值估計。透過 ε-greedy 策略平衡探索與利用,AI 逐漸學會在不同手牌與莊家資訊下,什麼時候該要牌、什麼時候該停牌,最終形成穩定的決策策略。

________________________________________

📊 四、訓練後結果觀察(視覺化)

python

import matplotlib.pyplot as plt

def plot_policy(Q):

usable_ace = np.zeros((10, 10))

no_usable_ace = np.zeros((10, 10))

for player_sum in range(12, 22):

for dealer_card in range(1, 11):

state_1 = (player_sum, dealer_card, True)

state_2 = (player_sum, dealer_card, False)

usable_ace[player_sum - 12, dealer_card - 1] = np.argmax(Q[state_1])

no_usable_ace[player_sum - 12, dealer_card - 1] = np.argmax(Q[state_2])

fig, axs = plt.subplots(1, 2, figsize=(12, 5))

axs[0].imshow(usable_ace, cmap="gray")

axs[0].set_title("可用 A(usable ace)")

axs[1].imshow(no_usable_ace, cmap="gray")

axs[1].set_title("不可用 A(no usable ace)")

plt.show()

黑色格子代表「停牌」策略,白色代表「要牌」

可以觀察 AI 是否學會正確的行為選擇

這段程式碼用來將蒙地卡羅學習得到的 Q 值視覺化,幫助觀察 AI 在不同狀態下學會了什麼策略。plot_policy(Q) 函式會分別繪製在**有可用 A(usable ace)與沒有可用 A(no usable ace)**的兩種情況下,當玩家手牌總和為 12 到 21、莊家明牌為 1 到 10 的所有狀態,AI 選擇的動作。

對每個狀態,透過 np.argmax(Q[state]) 取出 AI 在該狀態下學到的最佳動作(0 代表停牌,1 代表要牌)。最後透過 matplotlib 繪製出灰階圖像,其中黑色格子代表 AI 選擇「停牌」,白色格子代表「要牌」。從圖像中可以清楚觀察 AI 在不同手牌與莊家情境下是否學會正確的策略,例如當玩家手牌總和大且莊家弱時應選擇停牌,當手牌小或莊家強時偏向要牌,這是驗證學習結果的重要工具。

________________________________________

🎮 五、訓練觀察與啟發

在蒙地卡羅學習過程中,AI 的策略會經歷逐步演變。初期因樣本不足,策略混亂且高度依賴探索;隨著經驗累積與 G 值平均,AI 逐漸形成穩定的 Q 值與較佳策略。在面對強莊家時,AI 會學會降低要牌風險,增加停牌的機率,以避免爆牌;而當手中有可用 A(軟牌)時,因具備超過 21 點時仍可轉換成 1 點的緩衝優勢,AI 更敢於採取積極的要牌行動。這些現象正反映出強化學習逐步學習環境風險與機會的能力。

________________________________________

🧩 六、延伸任務與思考

1️⃣ 將 ε 改為遞減,觀察收斂效果是否更穩定?

當 ε 固定時,後期仍持續有固定比例的隨機探索,可能在已經學到穩定策略後仍不必要地嘗試次優行動,影響穩定性。若改用遞減 ε(例如 ε = max(ε_min, ε × decay_rate)),則在初期大量探索、後期專注利用,可以加快收斂速度,讓 Q 值波動更小,策略更穩定。但若遞減太快,也可能早早陷入次優解,因此需要設計合理的衰減速度。

2️⃣ 嘗試用 Every-Visit MC 控制法,與 First-Visit 成效比較

First-Visit MC 每個 (state, action) 在一個 episode 內只更新第一次出現的樣本,能避免重複樣本偏差,收斂較穩定;而 Every-Visit MC 則對該 episode 內出現多次的 (state, action) 都進行更新,利用樣本數更多,學習速度通常較快,但若樣本變異性高,可能導致收斂過程震盪較大。兩者各有優缺點,實務上可依任務特性選擇。

3️⃣ 如果想讓 AI 學會「數牌」,你會如何增加觀察資訊?

目前的 state 只包含玩家手牌總點、莊家明牌與是否有 usable ace,無法反映牌堆剩餘牌型。若要讓 AI 學會「數牌」,可將牌堆中剩餘牌的資訊納入狀態表示,例如:

增加「已發出高牌 / 低牌的比例」作為額外狀態特徵;

設計簡化版的 running count;

使用部分可觀測記憶模擬卡牌流失情況。

如此 AI 不僅根據當前手牌做決策,也能依整體牌堆狀況調整策略,真正模擬人類數牌技巧。

________________________________________

✅ 七、小結與啟示:

• Blackjack 是強化學習中最經典的 MC 控制實驗平台

• 不需要模型,只靠試錯與統計就能學會接近最優策略

• 強化學習訓練出的策略會自動形成「算牌般」的邏輯行為

• 能有效理解 ε-Greedy、Q 值更新與 episode 累積報酬的實作方法!



留言
avatar-img
艾韓思 AIHANS|AI 應用工程筆記
34會員
672內容數
AIHANS沙龍是一個結合AI技術實戰、產業策略與自我成長的知識平台,主題涵蓋機器學習、生成式AI、創業經驗、財務規劃及哲學思辨。這裡不只提供系統化學習資源與實作案例,更強調理性思維與行動力的結合。無論你是AI初學者、創業者,還是追求人生升維的行者,都能在這裡找到前進的方向與志同道合的夥伴。
2025/09/24
Epsilon-Greedy 策略透過以 1−ε 機率選最佳行動、ε 機率隨機探索,平衡利用與探索,避免陷入次優解。固定 ε 簡單但收斂慢,動態衰減更實用。此方法廣泛應用於 Q-learning、MC 控制與 SARSA,是強化學習中最基礎且實用的探索機制。
2025/09/24
Epsilon-Greedy 策略透過以 1−ε 機率選最佳行動、ε 機率隨機探索,平衡利用與探索,避免陷入次優解。固定 ε 簡單但收斂慢,動態衰減更實用。此方法廣泛應用於 Q-learning、MC 控制與 SARSA,是強化學習中最基礎且實用的探索機制。
2025/09/24
蒙地卡羅控制透過完整回合試錯與回報平均更新 Q 值,並結合 ε-Greedy 改進策略,使 AI 能逐步逼近最優解。其優點是直觀、無需模型,適合模擬與探索初期,但在長回合或稀疏獎勵下學習效率低,常需與 TD 方法結合。
2025/09/24
蒙地卡羅控制透過完整回合試錯與回報平均更新 Q 值,並結合 ε-Greedy 改進策略,使 AI 能逐步逼近最優解。其優點是直觀、無需模型,適合模擬與探索初期,但在長回合或稀疏獎勵下學習效率低,常需與 TD 方法結合。
2025/09/24
On-policy 使用自身策略互動學習,穩健安全但效率較低;Off-policy 可用他人或歷史資料學習目標策略,效率高但可能不穩定。典型例子是 SARSA 與 Q-Learning,前者依實際行為更新,後者追求理想最優。兩者各有應用價值,實務常結合運用。
2025/09/24
On-policy 使用自身策略互動學習,穩健安全但效率較低;Off-policy 可用他人或歷史資料學習目標策略,效率高但可能不穩定。典型例子是 SARSA 與 Q-Learning,前者依實際行為更新,後者追求理想最優。兩者各有應用價值,實務常結合運用。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
1.不要讓棋譜或棋書擋到棋盤,視野可以看到完整的棋盤。 2.可以將佈局階段角落的變化背起來,之後進階背30手、50手,訓練記憶力。 3.有時可以猜猜看高手會下在哪個範圍,準確度慢慢提高,大局觀也會慢慢養成哦!
Thumbnail
1.不要讓棋譜或棋書擋到棋盤,視野可以看到完整的棋盤。 2.可以將佈局階段角落的變化背起來,之後進階背30手、50手,訓練記憶力。 3.有時可以猜猜看高手會下在哪個範圍,準確度慢慢提高,大局觀也會慢慢養成哦!
Thumbnail
在機器學習領域中,監督學習、無監督學習和強化學習是三種核心方法,它們在解決不同類型的問題時發揮著重要作用。
Thumbnail
在機器學習領域中,監督學習、無監督學習和強化學習是三種核心方法,它們在解決不同類型的問題時發揮著重要作用。
Thumbnail
延續上週提到的,「有哪些不訓練模型的情況下,能夠強化語言模型的能力」,這堂課接續介紹其中第 3、4 個方法
Thumbnail
延續上週提到的,「有哪些不訓練模型的情況下,能夠強化語言模型的能力」,這堂課接續介紹其中第 3、4 個方法
Thumbnail
這一節課說明,如何透過改變給模型的指示或咒語(prompt),來得到不同的結果 。如果直接說結論的話會是,在今天語言模型的能力之下,我們只要交代清楚任務就好,可以包括背景以及需求。而這節課很像是一堂模型咒語的歷史課 XD
Thumbnail
這一節課說明,如何透過改變給模型的指示或咒語(prompt),來得到不同的結果 。如果直接說結論的話會是,在今天語言模型的能力之下,我們只要交代清楚任務就好,可以包括背景以及需求。而這節課很像是一堂模型咒語的歷史課 XD
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News