code: def sample_minibatch(self, batch_size):
          
          pool_size = len(self)
          if pool_size == 0:
              return []
  
          delta_p = self._memory[0] / batch_size
          chosen_idx = []
          # if all priorities sum to ~0  choose randomly otherwise random sample
          if abs(self._memory[0]) < util.epsilon:
              chosen_idx = np.random.randint(self._capacity - 1, self._capacity - 1 + len(self), size=batch_size).tolist()
          else:
              for i in xrange(batch_size):
                  lower = max(i * delta_p, 0)
                  upper = min((i + 1) * delta_p, self._memory[0])
                  p = random.uniform(lower, upper)
                  chosen_idx.append(self._sample_with_priority(p))
          return [(i, self._memory[i]) for i in chosen_idx]
docs: Sample minibatch of size batch_size.