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
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)