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