ПочатиПочніть безкоштовно

Буфер experience replay

Тепер ви створите структуру даних для підтримки Experience Replay, що дасть змогу вашому агенту навчатися значно ефективніше.

Цей буфер має підтримувати дві операції:

  • Зберігати досвіди у своїй памʼяті для подальшої вибірки.
  • «Відтворювати» випадково вибраний пакет минулих досвідів зі своєї памʼяті.

Оскільки дані з буфера використовуватимуться як вхід до нейронної мережі, буфер для зручності має повертати Tensors бібліотеки torch.

Модулі torch і random, а також клас deque вже імпортовано у ваше середовище вправи.

Ця вправа є частиною курсу

Глибоке навчання з підкріпленням у Python

Переглянути курс

Інструкції до вправи

  • Доповніть метод push() класу ReplayBuffer, додаючи experience_tuple до памʼяті буфера.
  • У методі sample() виберіть випадкову вибірку розміру batch_size з self.memory.
  • Знову ж у sample(), вибірка спочатку повертається як список кортежів; перетворіть її на кортеж списків.
  • Перетворіть actions_tensor до форми (batch_size, 1) замість (batch_size).

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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
Редагувати та запускати код