Začněte nyníZačněte zdarma

Buffer pro experience replay

Teď vytvoříš datovou strukturu pro Experience Replay, která agentovi umožní učit se mnohem efektivněji.

Tento replay buffer by měl podporovat dvě operace:

  • Ukládání zkušeností do paměti pro pozdější výběr vzorků.
  • „Přehrání" náhodně vybraných minulých zkušeností z paměti.

Protože data odebraná z replay bufferu budou sloužit jako vstup do neuronové sítě, buffer by měl pro pohodlí vracet tensory knihovny torch.

Moduly torch a random a třída deque jsou v prostředí cvičení již naimportovány.

Toto cvičení je součástí kurzu

Deep Reinforcement Learning v Pythonu

Zobrazit kurz

Pokyny k cvičení

  • Dokonči metodu push() třídy ReplayBuffer tak, že přidáš experience_tuple do paměti bufferu.
  • V metodě sample() vyber náhodný vzorek o velikosti batch_size z self.memory.
  • Stále v metodě sample() je vzorek zpočátku vrácen jako seznam n-tic; zajisti jeho převod na n-tici seznamů.
  • Transformuj actions_tensor do tvaru (batch_size, 1) místo (batch_size).

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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
Upravit a spustit kód