Trénink algoritmu REINFORCE
Teď je čas natrénovat Lunar Lander pomocí algoritmu REINFORCE! Zbývá ti implementovat trénovací smyčku REINFORCE včetně výpočtu loss funkce.
Protože výpočet loss funkce zasahuje do vnitřní i vnější smyčky, tentokrát funkci calculate_loss() nepoužiješ.
Jakmile je epizoda dokončena, můžeš obě tyto hodnoty využít k výpočtu loss.
Pro přehled, tady je výraz pro loss funkci algoritmu REINFORCE:
Funkci describe_episode() znovu použiješ k výpisu průběhu učení agenta v každé epizodě.
Toto cvičení je součástí kurzu
Deep Reinforcement Learning v Pythonu
Pokyny k cvičení
- Přidej logaritmickou pravděpodobnost vybrané akce do seznamu log pravděpodobností epizody.
- Přičti diskontovanou odměnu aktuálního kroku k výnosu epizody.
- Vypočítej loss epizody podle algoritmu REINFORCE.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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)