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

Вибірка з буфера PER

Перш ніж ви зможете використати клас Prioritized Experience Buffer для навчання агента, потрібно реалізувати метод .sample(). Цей метод приймає розмір вибірки, яку потрібно отримати, і повертає вибрані переходи у вигляді tensors, а також їхні індекси в буфері пам'яті та їхню вагу важливості.

У вашому середовищі вже попередньо завантажено буфер місткістю 10, з якого ви виконуватимете вибірку.

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

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

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

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

  • Обчисліть ймовірність вибірки, пов'язану з кожним переходом.
  • Витягніть індекси переходів у вибірці; np.random.choice(a, s, p=p) бере вибірку розміру s з поверненням із масиву a на основі масиву ймовірностей p.
  • Обчисліть вагу важливості для кожного переходу.

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

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

def sample(self, batch_size):
    priorities = np.array(self.priorities)
    # Calculate the sampling probabilities
    probabilities = ____ / np.sum(____)
    # Draw the indices for the sample
    indices = np.random.choice(____)
    # Calculate the importance weights
    weights = (1 / (len(self.memory) * ____)) ** ____
    weights /= np.max(weights)
    states, actions, rewards, next_states, dones = zip(*[self.memory[idx] for idx in indices])
    weights = [weights[idx] for idx in indices]
    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)
    weights_tensor = torch.tensor(weights, dtype=torch.float32)
    actions_tensor = torch.tensor(actions, dtype=torch.long).unsqueeze(1)
    return (states_tensor, actions_tensor, rewards_tensor, next_states_tensor,
            dones_tensor, indices, weights_tensor)

PrioritizedReplayBuffer.sample = sample
print("Sampled transitions:\n", buffer.sample(3))
Редагувати та запускати код