コード例 #1
0
        virtual public void InitializePopulation()
        {
            d_population.Clear();

            Optimization.Storage.Records.InitialPopulation initial = d_storage.ReadInitialPopulation();

            // Create initial population
            for (uint idx = 0; idx < d_settings.PopulationSize; ++idx)
            {
                // Create new solution
                Solution solution = CreateSolution(idx);

                // Set solution parameter template
                solution.Parameters = d_parameters;

                // Resetting the solution randomly initializes its parameters
                solution.Reset();

                if (initial != null)
                {
                    // Initialize solution from the specified initial population
                    SolutionFromInitial(solution, initial);
                }

                Add(solution);
            }

            foreach (Extension ext in d_extensions)
            {
                ext.InitializePopulation();
            }
        }
コード例 #2
0
        private void SolutionFromInitial(Solution solution, Optimization.Storage.Records.InitialPopulation population)
        {
            int idx = (int)System.Math.Round(State.Random.NextDouble() * (population.Population.Count - 1));

            Optimization.Storage.Records.InitialSolution sol = population.Population[idx];

            foreach (Parameter parameter in solution.Parameters)
            {
                // skip parameters that are not in the initial database
                if (!sol.Parameters.ContainsKey(parameter.Name))
                {
                    continue;
                }

                double val = sol.Parameters[parameter.Name];

                if (d_settings.InitialPopulationNoise > 0)
                {
                    val += (State.Random.NextDouble() * 2 - 1) * d_settings.InitialPopulationNoise * (parameter.Boundary.Max - parameter.Boundary.Min);
                    val  = System.Math.Max(System.Math.Min(val, parameter.Boundary.Max), parameter.Boundary.Min);
                }

                parameter.Value = val;
            }

            foreach (KeyValuePair <string, string> pair in sol.Data)
            {
                solution.Data[pair.Key] = pair.Value;
            }
        }