#### Gaussian Action Noise

A `GaussianActionNoise`

object has the following numeric value
properties.

Property | Description |
---|

`Mean` | Noise model mean |

`Variance` | Noise model variance |

`VarianceDecayRate` | Decay rate of the variance |

`VarianceMin` | Minimum variance, which must be less than `Variance` |

`LowerLimit` | Noise sample lower limit |

`UpperLimit` | Noise sample upper limit |

Gaussian noise is sampled as shown in the following code.

x = Mean + rand(ActionSize).*Variance
x = min(max(x,LowerLimit),UpperLimit);

At each sample time step, the variance decays as shown in the following code.

decayedVariance = Variance.*(1 - VarianceDecayRate);
Variance = max(decayedVariance,VarianceMin);

#### Ornstein-Uhlenbeck Action Noise

An `OrnsteinUhlenbeckActionNoise`

object has the following numeric
value properties.

Property | Description |
---|

`InitialAction` | Initial value of action for noise model |

`Mean` | Noise model mean |

`MeanAttractionConstant` | Constant specifying how quickly the noise model output is attracted to the
mean |

`Variance` | Noise model variance |

`VarianceDecayRate` | Decay rate of the variance |

`VarianceMin` | Minimum variance |

At each sample time step, the noise model is updated using the following formula,
where `Ts`

is the agent sample time.

x(k) = x(k-1) + MeanAttractionConstant.*(Mean - x(k-1)).*Ts
+ Variance.*randn(size(Mean)).*sqrt(Ts)

At each sample time step, the variance decays as shown in the following code.

decayedVariance = Variance.*(1 - VarianceDecayRate);
Variance = max(decayedVariance,VarianceMin);

For continuous action signals, it is important to set the noise variance appropriately
to encourage exploration. It is common to have `Variance*sqrt(Ts)`

be
between 1% and 10% of your action range.

If your agent converges on local optima too quickly, promote agent exploration by
increasing the amount of noise; that is, by increasing the variance. Also, to increase
exploration, you can reduce the `VarianceDecayRate`

.