// TODO: Consider Laplacian distribution.

        /// <summary>
        ///  Create a weight mutation strategy that applies deltas to a random subset of weights, with deltas sampled from a gaussian distribution.
        /// </summary>
        /// <param name="selectionStrategy">Weight selection strategy.</param>
        /// <param name="stdDev">Gaussian standard deviation.</param>
        /// <returns>A new instance of <see cref="DeltaWeightMutationStrategy"/>.</returns>
        public static DeltaWeightMutationStrategy CreateGaussianDeltaStrategy(
            ISubsetSelectionStrategy selectionStrategy,
            double stdDev)
        {
            var sampler = GaussianDistributionSamplerFactory.CreateStatelessSampler <double>(0, stdDev);

            return(new DeltaWeightMutationStrategy(selectionStrategy, sampler));
        }
    // TODO: Consider Laplacian distribution.

    /// <summary>
    /// Create a weight mutation strategy that replaces a random subset of weights, with new weights sampled
    /// from a Gaussian distribution.
    /// </summary>
    /// <param name="selectionStrategy">Weight selection strategy.</param>
    /// <param name="stdDev">Gaussian standard deviation.</param>
    /// <returns>A new instance of <see cref="ResetWeightMutationStrategy{T}"/>.</returns>
    public static ResetWeightMutationStrategy <T> CreateGaussianResetStrategy(
        ISubsetSelectionStrategy selectionStrategy,
        double stdDev)
    {
        var sampler = GaussianDistributionSamplerFactory.CreateStatelessSampler <T>(0, stdDev);

        return(new ResetWeightMutationStrategy <T>(selectionStrategy, sampler));
    }