Changeset 12410


Ignore:
Timestamp:
06/01/15 14:21:02 (4 years ago)
Author:
pfleck
Message:

#2027

  • Added IThresholdTerminator interface for more flexibility. The ThresholdTerminatorView now uses the interface instead of a concrete terminator.
  • Added MaximumIterationsTerminator and SingleObjectiveQualityTerminator as common used Terminators.
Location:
branches/TerminationCriteria
Files:
3 added
6 edited

Legend:

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

    r12408 r12410  
    8383      get { return (IFixedValueParameter<BoolValue>)Parameters["ReevaluateElites"]; }
    8484    }
    85     private ValueParameter<IntValue> MaximumGenerationsParameter {
    86       get { return (ValueParameter<IntValue>)Parameters["MaximumGenerations"]; }
     85    private IFixedValueParameter<IntValue> MaximumGenerationsParameter {
     86      get { return (IFixedValueParameter<IntValue>)Parameters["MaximumGenerations"]; }
    8787    }
    8888    private ValueLookupParameter<DoubleValue> SuccessRatioParameter {
     
    158158      set { ReevaluateElitesParameter.Value.Value = value; }
    159159    }
    160     public IntValue MaximumGenerations {
    161       get { return MaximumGenerationsParameter.Value; }
    162       set { MaximumGenerationsParameter.Value = value; }
     160    public int MaximumGenerations {
     161      get { return MaximumGenerationsParameter.Value.Value; }
     162      set { MaximumGenerationsParameter.Value.Value = value; }
    163163    }
    164164    public DoubleValue SuccessRatio {
     
    194194      set { AnalyzerParameter.Value = value; }
    195195    }
    196 
    197196    public IntValue MaximumEvaluatedSolutions {
    198197      get { return MaximumEvaluatedSolutionsParameter.Value; }
     
    222221    private SuccessfulOffspringAnalyzer successfulOffspringAnalyzer;
    223222    [Storable]
    224     private ComparisonTerminator<IntValue> generationsTerminator;
     223    private MaximumIterationsTerminator generationsTerminator;
    225224    [Storable]
    226225    private ComparisonTerminator<IntValue> evaluatedSolutionsTerminator;
     
    228227    private ComparisonTerminator<DoubleValue> selectionPressureTerminator;
    229228    [Storable]
    230     private ComparisonTerminator<DoubleValue> qualityTerminator;
     229    private SingleObjectiveQualityTerminator qualityTerminator;
    231230    [Storable]
    232231    private ExecutionTimeTerminator executionTimeTerminator;
     
    276275      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
    277276      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 });
    278       Parameters.Add(new ValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));
     277      Parameters.Add(new FixedValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    279278      Parameters.Add(new ValueLookupParameter<DoubleValue>("SuccessRatio", "The ratio of successful to total children that should be achieved.", new DoubleValue(1)));
    280279      Parameters.Add(new ValueLookupParameter<DoubleValue>("ComparisonFactorLowerBound", "The lower bound of the comparison factor (start).", new DoubleValue(0)));
     
    339338      ParameterizeSelectors();
    340339
     340      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
     341      selectionPressureAnalyzer = new ValueAnalyzer();
     342      successfulOffspringAnalyzer = new SuccessfulOffspringAnalyzer();
     343      ParameterizeAnalyzers();
     344      UpdateAnalyzers();
     345
     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
    341354      foreach (IDiscreteDoubleValueModifier modifier in ApplicationManager.Manager.GetInstances<IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
    342355        ComparisonFactorModifierParameter.ValidValues.Add(modifier);
     
    344357      if (linearModifier != null) ComparisonFactorModifierParameter.Value = linearModifier;
    345358      ParameterizeComparisonFactorModifiers();
    346 
    347       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    348       selectionPressureAnalyzer = new ValueAnalyzer();
    349       successfulOffspringAnalyzer = new SuccessfulOffspringAnalyzer();
    350       ParameterizeAnalyzers();
    351       UpdateAnalyzers();
    352 
    353       generationsTerminator = new ComparisonTerminator<IntValue>("Generations", ComparisonType.Less, new IntValue(50)) { Name = "Generations" };
    354       evaluatedSolutionsTerminator = new ComparisonTerminator<IntValue>("EvaluatedSolutions", ComparisonType.Less, new IntValue(int.MaxValue)) { Name = "Evaluations" };
    355       selectionPressureTerminator = new ComparisonTerminator<DoubleValue>("SelectionPressure", ComparisonType.Less, new DoubleValue(200)) { Name = "Selection Pressure" };
    356       qualityTerminator = new ComparisonTerminator<DoubleValue>(new DoubleValue()) { Name = "Quality" };
    357       executionTimeTerminator = new ExecutionTimeTerminator(this, new TimeSpanValue(TimeSpan.FromMinutes(5))) { Name = "Execution Time" };
    358       ParameterizeTerminators();
    359       UpdateTerminators();
    360359
    361360      Initialize();
     
    504503    }
    505504    private void ParameterizeTerminators() {
    506       qualityTerminator.ComparisonValueParameter.ActualName = qualityAnalyzer.CurrentBestQualityParameter.Name;
    507       if (Problem != null) {
    508         var maximizationParameter = (IValueParameter<BoolValue>)Problem.MaximizationParameter;
    509         if (maximizationParameter != null) {
    510           bool maximization = maximizationParameter.Value.Value;
    511           qualityTerminator.Comparison = maximization ? ComparisonType.Less : ComparisonType.Greater;
    512           qualityTerminator.Threshold.Value = maximization ? double.MaxValue : double.MinValue;
    513         }
    514       }
     505      generationsTerminator.IterationsParameter.ActualName = "Generations";
     506      generationsTerminator.MaximumIterationsParameter = MaximumGenerationsParameter;
     507
     508      qualityTerminator.Parameterize(qualityAnalyzer.CurrentBestQualityParameter, Problem);
    515509    }
    516510    private void ParameterizeComparisonFactorModifiers() {
     
    572566    }
    573567    private void UpdateTerminators() {
     568      // ToDo restore checked state
    574569      Terminators.Operators.Clear();
    575570      if (Problem != null) {
  • branches/TerminationCriteria/HeuristicLab.Termination/3.3/HeuristicLab.Termination-3.3.csproj

    r12402 r12410  
    7373  </PropertyGroup>
    7474  <ItemGroup>
     75    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
     76      <SpecificVersion>False</SpecificVersion>
     77      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
     78    </Reference>
    7579    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    7680      <SpecificVersion>False</SpecificVersion>
     
    141145  </ItemGroup>
    142146  <ItemGroup>
     147    <Compile Include="IThresholdTerminator.cs" />
     148    <Compile Include="MaximumIterationsTerminator.cs" />
     149    <Compile Include="SingleObjectiveQualityTerminator.cs" />
    143150    <Compile Include="ThresholdTerminator.cs" />
    144151    <Compile Include="Views\ThresholdTerminatorView.cs">
  • branches/TerminationCriteria/HeuristicLab.Termination/3.3/TerminationOperator.cs

    r12405 r12410  
    8282    public override IOperation InstrumentedApply() {
    8383      var next = new OperationCollection(base.InstrumentedApply());
    84       if (TerminateParameter.ActualValue != null && TerminateParameter.ActualValue.Value) {
     84      if (TerminateParameter.ActualValue.Value) {
    8585        if (TerminateBranch != null) next.Insert(0, ExecutionContext.CreateOperation(TerminateBranch));
    8686      } else {
  • branches/TerminationCriteria/HeuristicLab.Termination/3.3/ThresholdTerminator.cs

    r12408 r12410  
    3131  [Item("ThresholdTerminator", "Base class for all termination criteria which specifies some threshold.")]
    3232  [StorableClass]
    33   public abstract class ThresholdTerminator<T> : Terminator where T : class, IItem, IStringConvertibleValue, new() {
     33  public abstract class ThresholdTerminator<T> : Terminator, IThresholdTerminator where T : class, IItem, IStringConvertibleValue, new() {
    3434    public IFixedValueParameter<T> ThresholdParameter {
    3535      get { return (IFixedValueParameter<T>)Parameters["Threshold"]; }
     36    }
     37    IParameter IThresholdTerminator.ThresholdParameter {
     38      get { return ThresholdParameter; }
    3639    }
    3740
  • branches/TerminationCriteria/HeuristicLab.Termination/3.3/Views/ThresholdTerminatorView.Designer.cs

    r12408 r12410  
    2525
    2626namespace HeuristicLab.Termination.Views {
    27   partial class ThresholdTerminatorView<T> where T : class, IItem, IComparable, IStringConvertibleValue, new() {
     27  partial class ThresholdTerminatorView {
    2828    /// <summary>
    2929    /// Required designer variable.
  • branches/TerminationCriteria/HeuristicLab.Termination/3.3/Views/ThresholdTerminatorView.cs

    r12408 r12410  
    2020#endregion
    2121
    22 using System;
    23 using HeuristicLab.Core;
    2422using HeuristicLab.Core.Views;
    25 using HeuristicLab.Data;
    2623using HeuristicLab.MainForm;
    2724
     
    2926
    3027  [View("ThresholdTerminator View")]
    31   [Content(typeof(ThresholdTerminator<>), true)]
    32   public partial class ThresholdTerminatorView<T> : ItemView where T : class, IItem, IComparable, IStringConvertibleValue, new() {
     28  [Content(typeof(IThresholdTerminator), true)]
     29  public partial class ThresholdTerminatorView : ItemView {
    3330
    34     public new ThresholdTerminator<T> Content {
    35       get { return (ThresholdTerminator<T>)base.Content; }
     31    public new IThresholdTerminator Content {
     32      get { return (IThresholdTerminator)base.Content; }
    3633      set { base.Content = value; }
    3734    }
     
    4542      viewHost.Content = null;
    4643      if (Content != null) {
    47         if (Content.ThresholdParameter.Value != null)
    48           viewHost.Content = Content.ThresholdParameter.Value;
     44        if (Content.ThresholdParameter.ActualValue != null)
     45          viewHost.Content = Content.ThresholdParameter.ActualValue;
    4946        else
    5047          viewHost.Content = Content.ThresholdParameter;
Note: See TracChangeset for help on using the changeset viewer.