Source code for catalyst.rl.exploration.gauss
import numpy as np
from catalyst.rl.core import ExplorationStrategy
[docs]class NoExploration(ExplorationStrategy):
    """
    For continuous environments only.
    Returns action produced by the actor network without changes.
    """
[docs]    def get_action(self, action):
        return action  
[docs]class GaussNoise(ExplorationStrategy):
    """
    For continuous environments only.
    Adds spherical Gaussian noise to the action produced by actor.
    """
    def __init__(self, sigma):
        super().__init__()
        self.sigma = sigma
[docs]    def set_power(self, value):
        super().set_power(value)
        self.sigma *= self._power 
[docs]    def get_action(self, action):
        noisy_action = np.random.normal(action, self.sigma)
        return noisy_action  
[docs]class OrnsteinUhlenbeckProcess(ExplorationStrategy):
    """
    For continuous environments only.
    Adds temporally correlated Gaussian noise generated with
    Ornstein-Uhlenbeck process.
    Paper: https://arxiv.org/abs/1509.02971
    """
    def __init__(self, sigma, theta, dt=1e-2):
        super().__init__()
        self.sigma = sigma
        self.theta = theta
        self.dt = dt
[docs]    def set_power(self, value):
        super().set_power(value)
        self.sigma *= self._power 
[docs]    def reset_state(self, action_size):
        self.x_prev = np.zeros(action_size) 
[docs]    def get_action(self, action):
        mu = self.x_prev * (1 - self.theta * self.dt)
        sigma = self.sigma * np.sqrt(self.dt)
        x = np.random.normal(mu, sigma)
        noisy_action = action + x
        self.x_prev = x
        return noisy_action  
__all__ = ["NoExploration", "GaussNoise", "OrnsteinUhlenbeckProcess"]