CommencezCommencez gratuitement

Entraîner l'algorithme REINFORCE

Vous êtes prêt à entraîner votre Lunar Lander avec REINFORCE! Tout ce qu'il vous reste à faire, c'est d'implanter la boucle d'entraînement REINFORCE, y compris le calcul de la perte REINFORCE.

Comme les étapes de calcul de la perte s'étendent à la fois sur la boucle interne et la boucle externe, vous n'utiliserez pas de fonction calculate_loss() cette fois.

Quand l'épisode est terminé, vous pouvez utiliser ces deux quantités pour calculer la perte.

Pour référence, voici l'expression de la fonction de perte REINFORCE :

Vous utiliserez encore la fonction describe_episode() pour afficher la performance de votre agent à chaque épisode.

Cette activité fait partie du cours

Deep Reinforcement Learning en Python

Voir le cours

Instructions de l’exercice

  • Ajouter la log-probabilité de l'action sélectionnée à la liste des log-probabilités de l'épisode.
  • Incrémenter le retour d'épisode avec la récompense actualisée de l'étape courante.
  • Calculer la perte d'épisode REINFORCE.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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)
Modifier et exécuter le code