import copy
import random
import torch
[docs]class OUNoise:
"""Ornstein-Uhlenbeck process."""
def __init__(self, size, mu=0., theta=0.15, sigma=0.2):
"""Initialize parameters and noise process."""
self.mu = mu * torch.ones(size)
self.theta = theta
self.sigma = sigma
self.reset()
[docs] def reset(self):
"""Reset the internal state (= noise) to mean (mu)."""
self.state = copy.copy(self.mu)
[docs] def sample(self):
"""Update internal state and return it as a noise sample."""
x = self.state
dx = self.theta * (self.mu - x) + self.sigma * torch.tensor([random.random() for i in range(len(x))])
self.state = x + dx
return self.state