REINFORCE 中的动作选择
编写 REINFORCE 的 select_action 函数,供您的 REINFORCE 智能体在每一步选择动作时使用。
在 DQN 中,网络的前向传播返回的是 Q 值;而在 REINFORCE 中,返回的是动作概率,可直接据此采样得到动作。
环境中已为您加载了策略网络和状态。
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}')