昨天我們深入探討了 Q-learning 和深度 Q 網絡(DQN)的核心概念,理解了這些演算法如何讓機器在不斷學習中變得「聰明」。今天,我們將把理論付諸實踐,進行一個實際的 Q-learning 實作,利用 Python 和 OpenAI Gym 平台來搭建一個強化學習的環境,將幫助你更好地掌握 Q-learning 的實際運行過程。
1. 初始化環境與 Q-table
選擇一個強化學習的經典環境,例如 CartPole-v1,並初始化環境和 Q-table:
import gym
import numpy as np
# 初始化環境
env = gym.make('CartPole-v1')
# 定義動作空間和狀態空間
action_space = env.action_space.n
state_space = env.observation_space.shape[0]
# 初始化 Q-table (離散化後的狀態,動作空間)
q_table = np.zeros((state_space, action_space))
2. 設置學習參數
定義學習率(alpha)、折扣因子(gamma)和探索策略(ε-greedy):
alpha = 0.1 # 學習率
gamma = 0.99 # 折扣因子
epsilon = 1.0 # 探索率
epsilon_decay = 0.995 # 探索率衰減
epsilon_min = 0.01 # 最小探索率
episodes = 1000 # 訓練回合數
3. 編寫 Q-learning 演算法
在此步驟中,實現 Q-learning 演算法,並在每回合進行訓練:
def discretize_state(state):
# 簡單離散化狀態空間的示例(可以依照需求進行調整)
return tuple(state.astype(int))
for episode in range(episodes):
state = env.reset() # 重置環境
state = discretize_state(state) # 離散化狀態
done = False
total_reward = 0
while not done:
# ε-greedy 策略:隨機選擇探索或利用
if np.random.uniform(0, 1) < epsilon:
action = env.action_space.sample() # 探索
else:
action = np.argmax(q_table[state]) # 利用
# 執行動作,觀察回饋
next_state, reward, done, _ = env.step(action)
next_state = discretize_state(next_state)
total_reward += reward
# 更新 Q-table
best_future_q = np.max(q_table[next_state])
q_table[state, action] += alpha * (reward + gamma * best_future_q - q_table[state, action])
state = next_state
# 每回合結束後更新探索率
epsilon = max(epsilon_min, epsilon * epsilon_decay)
4. 視覺化結果
可以追蹤每回合的總獎勵,並通過繪圖來視覺化訓練結果:
import matplotlib.pyplot as plt
# 繪製總獎勵的變化曲線
plt.plot(range(episodes), total_rewards)
plt.xlabel('回合數')
plt.ylabel('總獎勵')
plt.title('Q-learning 訓練結果')
plt.show()
無論是傳統的 Q-learning,還是 DQN 這樣的進階技術,它們都幫助 AI 在複雜的環境中學會做出最優決策。隨著強化學習的發展,這些技術將進一步推動 AI 的應用。