训练 REINFORCE 算法
现在,您已经可以用 REINFORCE 来训练 Lunar Lander 了!您需要实现 REINFORCE 的训练循环,其中包含 REINFORCE 的损失计算。
鉴于损失计算跨越内外两层循环,这一次您不会使用 calculate_loss() 函数。
当回合结束后,您可以用这两个量来计算损失。
作为参考,下面是 REINFORCE 损失函数的表达式:
您还将再次使用 describe_episode() 函数,在每个回合打印智能体的表现。
本练习是课程的一部分
Python 中的深度强化学习
练习说明
- 将所选动作的对数概率追加到本回合的对数概率列表中。
- 用当前步的折扣回报累加到本回合回报。
- 计算 REINFORCE 回合损失。
交互式实操练习
通过完成这段示例代码来试试这个练习。
for episode in range(50):
state, info = env.reset()
done = False
episode_reward = 0
step = 0
episode_log_probs = torch.tensor([])
R = 0
while not done:
step += 1
action, log_prob = select_action(policy_network, state)
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
episode_reward += reward
# Append to the episode action log probabilities
episode_log_probs = torch.cat((____, ____))
# Increment the episode return
R += (____ ** step) * ____
state = next_state
# Calculate the episode loss
loss = ____ * ____.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
describe_episode(episode, reward, episode_reward, step)