Changeset 15049


Ignore:
Timestamp:
06/23/17 15:39:35 (3 months ago)
Author:
abeham
Message:

#2792: adapted OSGA, Island-GA, Island-OSGA, and SASEGASA as well

  • added default crossover logic to SASEGASA
Location:
trunk/sources
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs

    r14185 r15049  
    211211        Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", (BoolValue)new BoolValue(false).AsReadOnly()) { Hidden = true });
    212212      }
     213      var optionalMutatorParameter = MutatorParameter as OptionalConstrainedValueParameter<IManipulator>;
     214      if (optionalMutatorParameter != null) {
     215        Parameters.Remove(optionalMutatorParameter);
     216        Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     217        foreach (var m in optionalMutatorParameter.ValidValues)
     218          MutatorParameter.ValidValues.Add(m);
     219        if (optionalMutatorParameter.Value == null) MutationProbability.Value = 0; // to guarantee that the old configuration results in the same behavior
     220        else Mutator = optionalMutatorParameter.Value;
     221        optionalMutatorParameter.ValidValues.Clear(); // to avoid dangling references to the old parameter its valid values are cleared
     222      }
    213223      #endregion
    214224
     
    240250      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    241251      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
    242       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     252      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
    243253      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
    244254      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
     
    551561      IManipulator oldMutator = MutatorParameter.Value;
    552562      MutatorParameter.ValidValues.Clear();
     563      IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault();
     564
    553565      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name)) {
    554566        ParameterizeStochasticOperatorForIsland(mutator);
     
    558570        IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
    559571        if (mutator != null) MutatorParameter.Value = mutator;
    560       }
     572        else oldMutator = null;
     573      }
     574
     575      if (oldMutator == null && defaultMutator != null)
     576        MutatorParameter.Value = defaultMutator;
    561577    }
    562578    private void UpdateAnalyzers() {
  • trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs

    r14185 r15049  
    280280      if (!Parameters.ContainsKey("FillPopulationWithParents"))
    281281        Parameters.Add(new FixedValueParameter<BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded.", new BoolValue(false)) { Hidden = true });
     282
     283      var optionalMutatorParameter = MutatorParameter as OptionalConstrainedValueParameter<IManipulator>;
     284      if (optionalMutatorParameter != null) {
     285        Parameters.Remove(optionalMutatorParameter);
     286        Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     287        foreach (var m in optionalMutatorParameter.ValidValues)
     288          MutatorParameter.ValidValues.Add(m);
     289        if (optionalMutatorParameter.Value == null) MutationProbability.Value = 0; // to guarantee that the old configuration results in the same behavior
     290        else Mutator = optionalMutatorParameter.Value;
     291        optionalMutatorParameter.ValidValues.Clear(); // to avoid dangling references to the old parameter its valid values are cleared
     292      }
    282293      #endregion
    283294
     
    311322      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    312323      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
    313       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     324      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
    314325      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
    315326      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
     
    642653      IManipulator oldMutator = MutatorParameter.Value;
    643654      MutatorParameter.ValidValues.Clear();
     655      IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault();
     656
    644657      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name))
    645658        MutatorParameter.ValidValues.Add(mutator);
     659
    646660      if (oldMutator != null) {
    647661        IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
    648662        if (mutator != null) MutatorParameter.Value = mutator;
    649       }
     663        else oldMutator = null;
     664      }
     665
     666      if (oldMutator == null && defaultMutator != null)
     667        MutatorParameter.Value = defaultMutator;
    650668    }
    651669    private void UpdateAnalyzers() {
  • trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs

    r14185 r15049  
    228228      if (!Parameters.ContainsKey("FillPopulationWithParents"))
    229229        Parameters.Add(new FixedValueParameter<BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded.", new BoolValue(false)) { Hidden = true });
     230
     231      var optionalMutatorParameter = MutatorParameter as OptionalConstrainedValueParameter<IManipulator>;
     232      if (optionalMutatorParameter != null) {
     233        Parameters.Remove(optionalMutatorParameter);
     234        Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     235        foreach (var m in optionalMutatorParameter.ValidValues)
     236          MutatorParameter.ValidValues.Add(m);
     237        if (optionalMutatorParameter.Value == null) MutationProbability.Value = 0; // to guarantee that the old configuration results in the same behavior
     238        else Mutator = optionalMutatorParameter.Value;
     239        optionalMutatorParameter.ValidValues.Clear(); // to avoid dangling references to the old parameter its valid values are cleared
     240      }
    230241      #endregion
    231242
     
    250261      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    251262      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
    252       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     263      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
    253264      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
    254265      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
     
    487498      IManipulator oldMutator = MutatorParameter.Value;
    488499      MutatorParameter.ValidValues.Clear();
     500      IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault();
     501
    489502      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name))
    490503        MutatorParameter.ValidValues.Add(mutator);
     504
    491505      if (oldMutator != null) {
    492506        IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
    493507        if (mutator != null) MutatorParameter.Value = mutator;
    494       }
     508        else oldMutator = null;
     509      }
     510
     511      if (oldMutator == null && defaultMutator != null)
     512        MutatorParameter.Value = defaultMutator;
    495513    }
    496514    private void UpdateAnalyzers() {
  • trunk/sources/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASA.cs

    r14185 r15049  
    256256      if (!Parameters.ContainsKey("FillPopulationWithParents"))
    257257        Parameters.Add(new FixedValueParameter<BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded.", new BoolValue(false)) { Hidden = true });
     258
     259      var optionalMutatorParameter = MutatorParameter as OptionalConstrainedValueParameter<IManipulator>;
     260      if (optionalMutatorParameter != null) {
     261        Parameters.Remove(optionalMutatorParameter);
     262        Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     263        foreach (var m in optionalMutatorParameter.ValidValues)
     264          MutatorParameter.ValidValues.Add(m);
     265        if (optionalMutatorParameter.Value == null) MutationProbability.Value = 0; // to guarantee that the old configuration results in the same behavior
     266        else Mutator = optionalMutatorParameter.Value;
     267        optionalMutatorParameter.ValidValues.Clear(); // to avoid dangling references to the old parameter its valid values are cleared
     268      }
    258269      #endregion
    259270
     
    282293      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    283294      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
    284       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     295      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
    285296      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
    286297      Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
     
    561572      ICrossover oldCrossover = CrossoverParameter.Value;
    562573      CrossoverParameter.ValidValues.Clear();
     574      ICrossover defaultCrossover = Problem.Operators.OfType<ICrossover>().FirstOrDefault();
     575
    563576      foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>().OrderBy(x => x.Name))
    564577        CrossoverParameter.ValidValues.Add(crossover);
     578
    565579      if (oldCrossover != null) {
    566580        ICrossover crossover = CrossoverParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldCrossover.GetType());
    567581        if (crossover != null) CrossoverParameter.Value = crossover;
    568       }
     582        else oldCrossover = null;
     583      }
     584      if (oldCrossover == null && defaultCrossover != null)
     585        CrossoverParameter.Value = defaultCrossover;
    569586    }
    570587    private void UpdateMutators() {
    571588      IManipulator oldMutator = MutatorParameter.Value;
    572589      MutatorParameter.ValidValues.Clear();
     590      IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault();
     591
    573592      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name))
    574593        MutatorParameter.ValidValues.Add(mutator);
     594
    575595      if (oldMutator != null) {
    576596        IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
    577597        if (mutator != null) MutatorParameter.Value = mutator;
    578       }
     598        else oldMutator = null;
     599      }
     600
     601      if (oldMutator == null && defaultMutator != null)
     602        MutatorParameter.Value = defaultMutator;
    579603    }
    580604    private void UpdateAnalyzers() {
Note: See TracChangeset for help on using the changeset viewer.