2020-03-18 21:45:41 +08:00
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
class OUNoise(object):
|
|
|
|
"""docstring for OUNoise"""
|
|
|
|
|
|
|
|
def __init__(self, sigma=0.3, theta=0.15, dt=1e-2, x0=None):
|
|
|
|
self.alpha = theta * dt
|
|
|
|
self.beta = sigma * np.sqrt(dt)
|
|
|
|
self.x0 = x0
|
|
|
|
self.reset()
|
|
|
|
|
|
|
|
def __call__(self, size, mu=.1):
|
|
|
|
if self.x is None or self.x.shape != size:
|
|
|
|
self.x = 0
|
2020-03-28 09:43:35 +08:00
|
|
|
r = self.beta * np.random.normal(size=size)
|
|
|
|
self.x = self.x + self.alpha * (mu - self.x) + r
|
2020-03-18 21:45:41 +08:00
|
|
|
return self.x
|
|
|
|
|
|
|
|
def reset(self):
|
|
|
|
self.x = None
|