Fonction de perte DQN minimale
Avec la fonction select_action() maintenant prête, il ne vous reste qu'une dernière étape avant de pouvoir entraîner votre agent : vous allez implémenter calculate_loss().
La fonction calculate_loss() retourne la perte du réseau pour une étape donnée de l'épisode.
Pour référence, la perte est donnée par :
Les données d'exemple suivantes ont été chargées dans l'exercice :
state = torch.rand(8)
next_state = torch.rand(8)
action = select_action(q_network, state)
reward = 1
gamma = .99
done = False
Cette activité fait partie du cours
Deep Reinforcement Learning en Python
Instructions de l’exercice
- Obtenez la valeur Q de l'état courant.
- Obtenez la valeur Q du prochain état.
- Calculez la valeur Q cible (ou TD-target).
- Calculez la fonction de perte, c.-à-d. l'erreur de Bellman au carré.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
def calculate_loss(q_network, state, action, next_state, reward, done):
q_values = q_network(state)
print(f'Q-values: {q_values}')
# Obtain the current state Q-value
current_state_q_value = q_values[____]
print(f'Current state Q-value: {current_state_q_value:.2f}')
# Obtain the next state Q-value
next_state_q_value = q_network(next_state).____
print(f'Next state Q-value: {next_state_q_value:.2f}')
# Calculate the target Q-value
target_q_value = ____ + gamma * ____ * (1-done)
print(f'Target Q-value: {target_q_value:.2f}')
# Obtain the loss
loss = nn.MSELoss()(____, ____)
print(f'Loss: {loss:.2f}')
return loss
calculate_loss(q_network, state, action, next_state, reward, done)