Example #1
0
        public ColumnVector fitnessHistory;         // [vector<double>]

        /// <summary>
        ///
        /// </summary>
        /// <param name="params_"></param>
        /// <param name="m"></param>
        /// <param name="sigma_"></param>
        public CMAState(CMAParams params_, ColumnVector m, double sigma_)
        {
            p     = params_;
            C     = new SquareMatrix(p.N);
            B     = new SquareMatrix(p.N);
            d     = new double[p.N];
            pc    = new double[p.N];
            ps    = new double[p.N];
            mean  = m;
            sigma = sigma_;

            gen            = 0;
            fitnessHistory = new ColumnVector(3);

            double trace = p.InitialStdDevs.Sum(x => x * x);

            /* Initialize covariance structure */

            for (int i = 0; i < p.N; ++i)
            {
                B[i, i] = 1.0;
                d[i]    = p.InitialStdDevs[i] * Math.Sqrt(p.N / trace);
                C[i, i] = d[i] * d[i];
                pc[i]   = 0.0;
                ps[i]   = 0.0;
            }
        }
Example #2
0
        /// <summary>
        /// http://eodev.sourceforge.net/eo/doc/html/_c_m_a_state_8cpp_source.html
        /// </summary>
        public CmaEs(
            Func <double[], object, double> fitnessMinimizationFunction,
            double[] initialParameters,
            object userData = null,
            double[] minimumStandardDeviations = null,
            double[] initialStandardDeviations = null,
            double stopFitnessMinimization     = 1e-10,
            int additionalPopulationSize       = 0,
            int maxRestarts                           = 100,
            double stopEvalsMultiple                  = 50.0,
            double restartPopulationMultiple          = 2.0,
            double initialVarianceEstimates           = 0.5,
            double recombinationRatio                 = 0.5,
            double objectiveFunctionTolerance         = 1e-12,
            double standardDeviationToleranceMultiple = 1e-12)
        {
            int dimensions = initialParameters.Length;

            if (recombinationRatio <= 0)
            {
                recombinationRatio = 0.5;
            }

            if (minimumStandardDeviations == null)
            {
                minimumStandardDeviations = new double[dimensions];
                for (int i = 0; i < dimensions; i++)
                {
                    minimumStandardDeviations[i] = DEFAULT_MIN_STDDEV;
                }
            }

            if (initialStandardDeviations == null)
            {
                initialStandardDeviations = new double[dimensions];
                for (int i = 0; i < dimensions; i++)
                {
                    initialStandardDeviations[i] = DEFAULT_INITIAL_STDDEV;
                }
            }

            int lambda = 4 + additionalPopulationSize + (int)(3.0 * Math.Log((double)dimensions));

            if (lambda > MAX_POPULATIONSIZE)
            {
                lambda = MAX_POPULATIONSIZE;
            }

            int mu = (int)Math.Floor(lambda * recombinationRatio);

            this.StopEvals                          = 100 + (int)(stopEvalsMultiple * Math.Pow(dimensions + 3, 2) / Math.Sqrt(lambda));
            this.ObjectiveFunction                  = fitnessMinimizationFunction;
            this.InitialParameters                  = initialParameters;
            this.UserData                           = userData;
            this.StopFitnessMinimization            = stopFitnessMinimization;
            this.MaxRestarts                        = maxRestarts;
            this.InitialVarianceEstimate            = initialVarianceEstimates;
            this.RecombinationRatio                 = recombinationRatio;
            this.RestartPopulationMultiple          = restartPopulationMultiple;
            this.ObjectiveFunctionTolerance         = objectiveFunctionTolerance;
            this.StandardDeviationToleranceMultiple = standardDeviationToleranceMultiple;

            _initialCmaParams = new CMAParams(
                dimensions,
                MAX_GEN,
                lambda,
                mu,
                minimumStandardDeviations,
                initialStandardDeviations,
                CMAParams.WeightType.Logarithmic);
        }