Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/01/15 16:47:32 (9 years ago)
Author:
pfleck
Message:

#2027

  • Removed MaximumIterationsTerminator and MaximumEvaluatedSolutionsTermimator because they practically do the same.
  • Add the possibility for ThresholdTerminators to use a foreign parameter (e.g. MaximumSelectionPressure). This way the terminator can use parameters which are still relevant for the algorithm and still provide consistent management of the terminators.
  • Renamed IThresholdTerminator to ISingleValueTerminator.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/TerminationCriteria/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithm.cs

    r12410 r12411  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Linq;
    2425using HeuristicLab.Analysis;
     
    110111      get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
    111112    }
    112     private ValueParameter<IntValue> MaximumEvaluatedSolutionsParameter {
    113       get { return (ValueParameter<IntValue>)Parameters["MaximumEvaluatedSolutions"]; }
     113    private IFixedValueParameter<IntValue> MaximumEvaluatedSolutionsParameter {
     114      get { return (IFixedValueParameter<IntValue>)Parameters["MaximumEvaluatedSolutions"]; }
    114115    }
    115116    private IFixedValueParameter<BoolValue> FillPopulationWithParentsParameter {
     
    194195      set { AnalyzerParameter.Value = value; }
    195196    }
    196     public IntValue MaximumEvaluatedSolutions {
    197       get { return MaximumEvaluatedSolutionsParameter.Value; }
    198       set { MaximumEvaluatedSolutionsParameter.Value = value; }
     197    public int MaximumEvaluatedSolutions {
     198      get { return MaximumEvaluatedSolutionsParameter.Value.Value; }
     199      set { MaximumEvaluatedSolutionsParameter.Value.Value = value; }
    199200    }
    200201    public bool FillPopulationWithParents {
     
    221222    private SuccessfulOffspringAnalyzer successfulOffspringAnalyzer;
    222223    [Storable]
    223     private MaximumIterationsTerminator generationsTerminator;
    224     [Storable]
    225     private ComparisonTerminator<IntValue> evaluatedSolutionsTerminator;
     224    private ComparisonTerminator<IntValue> generationsTerminator;
     225    [Storable]
     226    private ComparisonTerminator<IntValue> evaluationsTerminator;
    226227    [Storable]
    227228    private ComparisonTerminator<DoubleValue> selectionPressureTerminator;
     
    255256      successfulOffspringAnalyzer = cloner.Clone(original.successfulOffspringAnalyzer);
    256257      generationsTerminator = cloner.Clone(original.generationsTerminator);
    257       evaluatedSolutionsTerminator = cloner.Clone(original.evaluatedSolutionsTerminator);
     258      evaluationsTerminator = cloner.Clone(original.evaluationsTerminator);
    258259      selectionPressureTerminator = cloner.Clone(original.selectionPressureTerminator);
    259260      qualityTerminator = cloner.Clone(original.qualityTerminator);
     
    284285      Parameters.Add(new ValueLookupParameter<IntValue>("SelectedParents", "How much parents should be selected each time the offspring selection step is performed until the population is filled. This parameter should be about the same or twice the size of PopulationSize for smaller problems, and less for large problems.", new IntValue(200)));
    285286      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze each generation.", new MultiAnalyzer()));
    286       Parameters.Add(new ValueParameter<IntValue>("MaximumEvaluatedSolutions", "The maximum number of evaluated solutions (approximately).", new IntValue(int.MaxValue)));
     287      Parameters.Add(new FixedValueParameter<IntValue>("MaximumEvaluatedSolutions", "The maximum number of evaluated solutions (approximately).", new IntValue(int.MaxValue)));
    287288      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 });
    288289      Parameters.Add(new ValueParameter<MultiTerminator>("Termination", "The termination criteria which sould be checked.", new MultiTerminator()));
     
    344345      UpdateAnalyzers();
    345346
    346       generationsTerminator = new MaximumIterationsTerminator();
    347       evaluatedSolutionsTerminator = new ComparisonTerminator<IntValue>("EvaluatedSolutions", ComparisonType.Less, new IntValue(int.MaxValue)) { Name = "Evaluations" };
    348       selectionPressureTerminator = new ComparisonTerminator<DoubleValue>("SelectionPressure", ComparisonType.Less, new DoubleValue(200)) { Name = "Selection Pressure" };
    349       qualityTerminator = new SingleObjectiveQualityTerminator();
    350       executionTimeTerminator = new ExecutionTimeTerminator(this, new TimeSpanValue(TimeSpan.FromMinutes(5))) { Name = "Execution Time" };
    351       ParameterizeTerminators();
    352       UpdateTerminators();
    353 
    354347      foreach (IDiscreteDoubleValueModifier modifier in ApplicationManager.Manager.GetInstances<IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
    355348        ComparisonFactorModifierParameter.ValidValues.Add(modifier);
     
    357350      if (linearModifier != null) ComparisonFactorModifierParameter.Value = linearModifier;
    358351      ParameterizeComparisonFactorModifiers();
     352
     353      generationsTerminator = new ComparisonTerminator<IntValue>("Generations", ComparisonType.Less, MaximumGenerationsParameter) { Name = "Generations" };
     354      evaluationsTerminator = new ComparisonTerminator<IntValue>("EvaluatedSolutions", ComparisonType.Less, MaximumEvaluatedSolutionsParameter) { Name = "Evaluations" };
     355      selectionPressureTerminator = new ComparisonTerminator<DoubleValue>("SelectionPressure", ComparisonType.Less, MaximumSelectionPressure) { Name = "Selection Pressure" };
     356      qualityTerminator = new SingleObjectiveQualityTerminator() { Name = "Quality" };
     357      executionTimeTerminator = new ExecutionTimeTerminator(this, new TimeSpanValue(TimeSpan.FromMinutes(5)));
     358      ParameterizeTerminators();
     359      UpdateTerminators();
    359360
    360361      Initialize();
     
    503504    }
    504505    private void ParameterizeTerminators() {
    505       generationsTerminator.IterationsParameter.ActualName = "Generations";
    506       generationsTerminator.MaximumIterationsParameter = MaximumGenerationsParameter;
    507 
    508506      qualityTerminator.Parameterize(qualityAnalyzer.CurrentBestQualityParameter, Problem);
    509507    }
     
    566564    }
    567565    private void UpdateTerminators() {
    568       // ToDo restore checked state
    569       Terminators.Operators.Clear();
     566      var newTerminators = new Dictionary<ITerminator, bool> {
     567        {generationsTerminator, !Terminators.Operators.Contains(generationsTerminator) || Terminators.Operators.ItemChecked(generationsTerminator)},
     568        {selectionPressureTerminator, !Terminators.Operators.Contains(selectionPressureTerminator) || Terminators.Operators.ItemChecked(selectionPressureTerminator) },
     569        {evaluationsTerminator, Terminators.Operators.Contains(evaluationsTerminator) && Terminators.Operators.ItemChecked(evaluationsTerminator)},
     570        {qualityTerminator, Terminators.Operators.Contains(qualityTerminator) && Terminators.Operators.ItemChecked(qualityTerminator) },
     571        {executionTimeTerminator, Terminators.Operators.Contains(executionTimeTerminator) && Terminators.Operators.ItemChecked(executionTimeTerminator)}
     572      };
    570573      if (Problem != null) {
    571574        foreach (var terminator in Problem.Operators.OfType<ITerminator>())
    572           Terminators.Operators.Add(terminator);
    573       }
    574       Terminators.Operators.Add(generationsTerminator);
    575       Terminators.Operators.Add(evaluatedSolutionsTerminator);
    576       Terminators.Operators.Add(selectionPressureTerminator);
    577       Terminators.Operators.Add(qualityTerminator, checkedState: false);
    578       Terminators.Operators.Add(executionTimeTerminator, checkedState: false);
     575          newTerminators.Add(terminator, !Terminators.Operators.Contains(terminator) || Terminators.Operators.ItemChecked(terminator));
     576      }
     577
     578      Terminators.Operators.Clear();
     579      foreach (var newTerminator in newTerminators)
     580        Terminators.Operators.Add(newTerminator.Key, newTerminator.Value);
    579581    }
    580582    private OffspringSelectionGeneticAlgorithmMainLoop FindMainLoop(IOperator start) {
Note: See TracChangeset for help on using the changeset viewer.