在 REINFORCE 中選擇動作
撰寫 REINFORCE 的 select_action 函式,讓你的 REINFORCE 智慧體在每一步都能選擇動作。
在 DQN 中,網路的 forward 傳遞會回傳 Q 值;在 REINFORCE 中,則是回傳動作機率,你可以直接從中抽樣動作。
一個 policy network 與一個 state 已載入到你的環境中。
torch.distributions.Categorical 已以 Categorical 匯入。
本練習屬於課程
Python 的深度強化學習
練習說明
- 取得動作機率,型別為 torch 張量。
- 依據動作機率建立相對應的 torch 分佈物件。
- 從該分佈中抽樣一個動作。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
def select_action(policy_network, state):
# Obtain the action probabilities
action_probs = ____
print('Action probabilities:', action_probs)
# Instantiate the action distribution
action_dist = Categorical(____)
# Sample an action from the distribution
action = ____
log_prob = action_dist.log_prob(action)
return action.item(), log_prob.reshape(1)
state = torch.rand(8)
action, log_prob = select_action(policy_network, state)
print('Sampled action index:', action)
print(f'Log probability of sampled action: {log_prob.item():.2f}')