CommencerCommencer gratuitement

Formation de l'algorithme REINFORCE

Vous êtes prêt à entraîner votre Lunar Lander à l'aide de REINFORCE ! Il vous suffit de mettre en œuvre la boucle d'entraînement REINFORCE, y compris le calcul des pertes REINFORCE.

Étant donné que les étapes de calcul des pertes s'étendent à la fois sur les boucles internes et externes, vous n'utiliserez pas la fonction « calculate_loss() » cette fois-ci.

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

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

Vous utiliserez à nouveau la fonction « describe_episode() » pour imprimer les performances de votre agent à chaque épisode.

Cet exercice fait partie du cours

Apprentissage par renforcement profond en Python

Afficher le cours

Instructions

  • Ajoutez la probabilité du journal de l'action sélectionnée aux probabilités du journal de l'épisode.
  • Augmentez le nombre d'épisodes retournés avec la récompense réduite de l'étape actuelle.
  • Calculez la perte par épisode REINFORCE.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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