开始使用免费开始使用

训练 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)
编辑并运行代码