class_docstr: Additive Ornstein-Uhlenbeck process.
  
  Used in https://arxiv.org/abs/1509.02971 for exploration.
  
  Args:
      mu (float): Mean of the OU process
      theta (float): Friction to pull towards the mean
      sigma (float or ndarray): Scale of noise
      start_with_mu (bool): Start the process without noise
code: def select_action(self, t, greedy_action_func, action_value=None):
      a = greedy_action_func()
      if self.ou_state is None:
          if self.start_with_mu:
              self.ou_state = np.full(
                  a.shape, self.mu, dtype=np.float32
              )
          else:
              sigma_stable = self.sigma / np.sqrt(
                  2 * self.theta - self.theta**2
              )
              self.ou_state = np.random.normal(
                  size=a.shape, loc=self.mu, scale=sigma_stable
              ).astype(np.float32)
      else:
          self.evolve()
      noise = self.ou_state
      self.logger.debug("t:%s noise:%s", t, noise)
      return a + noise
  
file_path: pfrl/pfrl/explorers/additive_ou.py
imports: from logging import getLogger
  import numpy
  from pfrl import explorer
label_desc: Use image node_id 3 for calling the AdditiveOU obj's underlying member method code with example usage: obj.select_action(t, greedy_action_func, action_value) and returns: unknown