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