Mémoire tampon d'expérience (experience replay)
Vous allez maintenant créer la structure de données qui prend en charge l'Experience Replay, ce qui permettra à votre agent d'apprendre beaucoup plus efficacement.
Cette mémoire tampon doit prendre en charge deux opérations :
- Stocker des expériences en mémoire pour un échantillonnage ultérieur.
- « Rejouer » un lot aléatoire d'expériences passées depuis sa mémoire.
Comme les données échantillonnées de la mémoire tampon serviront d'entrée à un réseau de neurones, la mémoire doit retourner des tenseurs torch pour plus de commodité.
Les modules torch et random ainsi que la classe deque ont été importés dans votre environnement d'exercice.
Cette activité fait partie du cours
Deep Reinforcement Learning en Python
Instructions de l’exercice
- Complétez la méthode
push()deReplayBufferen ajoutantexperience_tupleà la mémoire du tampon. - Dans la méthode
sample(), tirez un échantillon aléatoire de taillebatch_sizeà partir deself.memory. - Toujours dans
sample(), l'échantillon est d'abord obtenu comme une liste de tuples ; assurez-vous qu'il soit transformé en un tuple de listes. - Transformez
actions_tensorpour obtenir la forme(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