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(); } }
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; } }