Ejemplo n.º 1
0
        void InitialiseAgents(int MinMaxFlag, double[,] Bounds, ParameterTypes[] VariableType)
        {
            Agents = new double[PopulationSize, Dimensionality];
            Scores = new double[PopulationSize];

            SobolRNG initialisationRNG = new SobolRNG(Dimensionality, 777);

            double[] randoms;
            for (int i = 0; i < PopulationSize; ++i)
            {
                while (true)
                {
                    randoms = initialisationRNG.Next();

                    for (int j = 0; j < Dimensionality; ++j)
                    {
                        Agents[i, j] = AdjustValueForVariableType(VariableType[j], randoms[j] * Bounds[j, 0] + (1 - randoms[j]) * Bounds[j, 1]);
                    }

                    if (!PreviousParameterSets.ContainsKey(Agents.Row(i)))
                    {
                        PreviousParameterSets.Add(Agents.Row(i), true);
                        break;
                    }
                }
            }

            Scores = ScoreGeneration(MinMaxFlag, Agents);

            for (int i = 0; i < PopulationSize; ++i)
            {
                if (double.IsNaN(Scores[i]))
                {
                    StringBuilder sb = new StringBuilder("Error initialising differential evolution! (");
                    for (int j = 0; j < Dimensionality - 1; ++j)
                    {
                        sb.Append(Agents[i, j] + ",");
                    }

                    sb.Append(Agents[i, Dimensionality - 1] + ")");

                    throw new Exception(sb.ToString());
                }
            }
        }
Ejemplo n.º 2
0
        public void Initialise(int dimensionality, int populationSize, double differentialWeight, double crossoverProbability)
        {
            Dimensionality = dimensionality;
            PopulationSize = populationSize;

            DifferentialWeight   = differentialWeight;
            CrossoverProbability = crossoverProbability;

            ParallelOptions = new ParallelOptions();
            ParallelOptions.MaxDegreeOfParallelism = 1;

            // It's not possible to run this in parallel because generations need to run sequentially in
            // order to converge towards good solutions.
            //ParallelOptions.MaxDegreeOfParallelism = Environment.ProcessorCount;

            InitialisationRNG = new SobolRNG(Dimensionality, 777);
            MutationRNG       = new SobolRNG(4, 123);
            RecombinationRNG  = new SobolRNG(Dimensionality, 456);

            PreviousParameterSets = new Dictionary <double[], bool>();
        }