import numpy as np class RunningMeanStd(object): def __init__(self, epsilon=1e-4, shape=()): self.mean = np.zeros(shape, np.float64) self.var = np.ones(shape, np.float64) self.count = epsilon class Normalizer(RunningMeanStd): def __init__(self, input_dim, epsilon=1e-4, clip_obs=10.0): super().__init__(shape=input_dim) self.epsilon = epsilon self.clip_obs = clip_obs def normalize(self, input): return np.clip((input - self.mean) / np.sqrt(self.var + self.epsilon), -self.clip_obs, self.clip_obs)