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
<cours>Apprentissage par renforcement profond en Python</cours>Instructions de l’exercice
- 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 ce code d’exemple.
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