Буфер 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