Träna REINFORCE-algoritmen
Nu är du redo att träna din Lunar Lander med REINFORCE! Det enda du behöver göra är att implementera REINFORCE-träningsloopen, inklusive beräkningen av REINFORCE-förlusten.
Eftersom förlusten beräknas över både den inre och den yttre loopen använder du ingen calculate_loss()-funktion den här gången.
När episoden är avslutad kan du använda båda dessa värden för att beräkna förlusten.
Här är uttrycket för REINFORCE-förlustfunktionen som referens:
Du använder återigen funktionen describe_episode() för att skriva ut hur agenten presterar i varje episod.
Den här övningen är en del av kursen
Djup förstärkningsinlärning i Python
Övningsinstruktioner
- Lägg till log-sannolikheten för den valda åtgärden i episodens log-sannolikheter.
- Öka episodens avkastning med den diskonterade belöningen för det aktuella steget.
- Beräkna REINFORCE-episodförlusten.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)