IniziaInizia gratis

Addestrare l'algoritmo REINFORCE

Sei pronto ad addestrare il tuo Lunar Lander usando REINFORCE! Ti basta implementare il training loop di REINFORCE, inclusa la computazione della loss di REINFORCE.

Dato che i passaggi per calcolare la loss attraversano sia il loop interno che quello esterno, questa volta non userai una funzione calculate_loss().

Quando l'episodio è completo, puoi usare entrambe queste quantità per calcolare la loss.

Per riferimento, questa è l'espressione della funzione di loss di REINFORCE:

Userai di nuovo la funzione describe_episode() per stampare come sta andando il tuo agente a ogni episodio.

Questo esercizio fa parte del corso

Deep Reinforcement Learning in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Aggiungi la log-probabilità dell'azione selezionata alle log-probabilità dell'episodio.
  • Incrementa il ritorno dell'episodio con la ricompensa scontata dello step corrente.
  • Calcola la loss dell'episodio REINFORCE.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice