Aan de slagGa gratis aan de slag

De REINFORCE-algoritme trainen

Je bent klaar om je Lunar Lander te trainen met REINFORCE! Het enige wat je hoeft te doen is de REINFORCE-trainingslus implementeren, inclusief de berekening van de REINFORCE-loss.

Omdat de stappen voor de loss-berekening zowel in de binnenste als de buitenste lus plaatsvinden, gebruik je dit keer geen calculate_loss()-functie.

Wanneer de episode is voltooid, kun je beide grootheden gebruiken om de loss te berekenen.

Ter referentie: dit is de uitdrukking voor de REINFORCE-verliesfunctie:

Je gebruikt opnieuw de functie describe_episode() om bij elke episode te printen hoe je agent het doet.

Deze oefening maakt deel uit van de cursus

Deep Reinforcement Learning in Python

Cursus bekijken

Oefeninstructies

  • Voeg de logkans van de gekozen actie toe aan de logkansen van de episode.
  • Verhoog de episodereturn met de verdisconteerde beloning van de huidige stap.
  • Bereken de REINFORCE-episodeloss.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
Code bewerken en uitvoeren