CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Complétez la méthode push() de ReplayBuffer en ajoutant experience_tuple à la mémoire du tampon.
  • Dans la méthode sample(), tirez un échantillon aléatoire de taille batch_size à partir de self.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_tensor pour 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
Modifier et exécuter le code