Mémoire tampon de relecture
Vous allez maintenant créer la structure de données nécessaire à la fonctionnalité Experience Replay, qui permettra à votre agent d'apprendre beaucoup plus efficacement.
Ce tampon de relecture doit prendre en charge deux opérations :
- Enregistrer des expériences dans sa mémoire pour les réutiliser ultérieurement.
- « Rejouer » un échantillon aléatoire d'expériences passées provenant de sa mémoire.
Étant donné que les données échantillonnées à partir du tampon de relecture seront utilisées pour alimenter un réseau neuronal, le tampon doit renvoyer des tenseurs d'torch s pour plus de commodité.
Les modules torch et random ainsi que la classe deque ont été importés dans votre environnement d'exercice.
Cet exercice fait partie du cours
Apprentissage par renforcement profond en Python
Instructions
- Veuillez compléter la méthode d'
push()deReplayBufferen ajoutantexperience_tupleà la mémoire tampon. sample()Dans la méthode d'échantillonnage aléatoire, prélevez un échantillon aléatoire de taillebatch_sizeà partir deself.memory.- Encore une fois dans l'
sample(), l'échantillon est initialement dessiné sous forme de liste de tuples ; veuillez vous assurer qu'il est transformé en un tuple de listes. - Veuillez transformer l'
actions_tensoren(batch_size, 1)au lieu de(batch_size).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
class ReplayBuffer:
def __init__(self, capacity):
self.memory = deque([], maxlen=capacity)
def push(self, state, action, reward, next_state, done):
experience_tuple = (state, action, reward, next_state, done)
# Append experience_tuple to the memory buffer
self.memory.____
def __len__(self):
return len(self.memory)
def sample(self, batch_size):
# Draw a random sample of size batch_size
batch = ____(____, ____)
# Transform batch into a tuple of lists
states, actions, rewards, next_states, dones = ____
states_tensor = torch.tensor(states, dtype=torch.float32)
rewards_tensor = torch.tensor(rewards, dtype=torch.float32)
next_states_tensor = torch.tensor(next_states, dtype=torch.float32)
dones_tensor = torch.tensor(dones, dtype=torch.float32)
# Ensure actions_tensor has shape (batch_size, 1)
actions_tensor = torch.tensor(actions, dtype=torch.long).____
return states_tensor, actions_tensor, rewards_tensor, next_states_tensor, dones_tensor