Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/13/17 17:46:58 (7 years ago)
Author:
mkommend
Message:

#2792: Merged r15006:r15008, r15047, r15049, r15070, r15107 into stable.

Location:
stable
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Algorithms.ALPS

  • stable/HeuristicLab.Algorithms.ALPS/3.3/AlpsOffspringSelectionGeneticAlgorithm.cs

    r14186 r15238  
    298298    [StorableHook(HookType.AfterDeserialization)]
    299299    private void AfterDeserialization() {
     300      // BackwardsCompatibility3.3
     301      #region Backwards compatible code, remove with 3.4
     302      var optionalMutatorParameter = MutatorParameter as OptionalConstrainedValueParameter<IManipulator>;
     303      if (optionalMutatorParameter != null) {
     304        Parameters.Remove(optionalMutatorParameter);
     305        Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     306        foreach (var m in optionalMutatorParameter.ValidValues)
     307          MutatorParameter.ValidValues.Add(m);
     308        if (optionalMutatorParameter.Value == null) MutationProbability = 0; // to guarantee that the old configuration results in the same behavior
     309        else Mutator = optionalMutatorParameter.Value;
     310        optionalMutatorParameter.ValidValues.Clear(); // to avoid dangling references to the old parameter its valid values are cleared
     311      }
     312      #endregion
    300313      Initialize();
    301314    }
     
    334347      Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction."));
    335348      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    336       Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     349      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
    337350      Parameters.Add(new FixedValueParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new PercentValue(0.05)));
    338351      Parameters.Add(new FixedValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
     
    755768    }
    756769    private void UpdateMutators() {
    757       var oldMutator = MutatorParameter.Value;
     770      IManipulator oldMutator = MutatorParameter.Value;
    758771      MutatorParameter.ValidValues.Clear();
    759       foreach (var mutator in Problem.Operators.OfType<IManipulator>().OrderBy(m => m.Name)) {
     772      IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault();
     773
     774      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name)) {
    760775        ParameterizeStochasticOperatorForLayer(mutator);
    761776        MutatorParameter.ValidValues.Add(mutator);
    762777      }
     778
    763779      if (oldMutator != null) {
    764         var mutator = MutatorParameter.ValidValues.FirstOrDefault(m => m.GetType() == oldMutator.GetType());
    765         if (mutator != null)
    766           MutatorParameter.Value = mutator;
    767       }
     780        IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
     781        if (mutator != null) MutatorParameter.Value = mutator;
     782        else oldMutator = null;
     783      }
     784
     785      if (oldMutator == null && defaultMutator != null)
     786        MutatorParameter.Value = defaultMutator;
    768787    }
    769788    private void UpdateTerminators() {
Note: See TracChangeset for help on using the changeset viewer.