Kom igångKom igång gratis

Träna REINFORCE-algoritmen

Nu är du redo att träna din Lunar Lander med REINFORCE! Det enda du behöver göra är att implementera REINFORCE-träningsloopen, inklusive beräkningen av REINFORCE-förlusten.

Eftersom förlusten beräknas över både den inre och den yttre loopen använder du ingen calculate_loss()-funktion den här gången.

När episoden är avslutad kan du använda båda dessa värden för att beräkna förlusten.

Här är uttrycket för REINFORCE-förlustfunktionen som referens:

Du använder återigen funktionen describe_episode() för att skriva ut hur agenten presterar i varje episod.

Den här övningen är en del av kursen

Djup förstärkningsinlärning i Python

Visa kurs

Övningsinstruktioner

  • Lägg till log-sannolikheten för den valda åtgärden i episodens log-sannolikheter.
  • Öka episodens avkastning med den diskonterade belöningen för det aktuella steget.
  • Beräkna REINFORCE-episodförlusten.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod