Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/31/15 13:18:59 (9 years ago)
Author:
pfleck
Message:

#2269 Added AgeInheritance as own type and value for consistent configuration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/Alps.cs

    r12260 r12271  
    2121
    2222using System;
    23 using System.Collections.Generic;
    2423using System.Linq;
    2524using HeuristicLab.Analysis;
     
    3635
    3736namespace HeuristicLab.Algorithms.ALPS {
    38   [Item("ALPS", "A base class for all ALPS-based algorithms.")]
     37  [Item("ALPS", "Base class for all ALPS-based algorithms.")]
    3938  [StorableClass]
    4039  public abstract class Alps : HeuristicOptimizationEngineAlgorithm, IStorableContent {
     
    7675      get { return (IValueParameter<IntArray>)Parameters["AgeLimits"]; }
    7776    }
    78     private IValueParameter<ReductionOperation> AgeInheritanceParameter {
    79       get { return (IValueParameter<ReductionOperation>)Parameters["AgeInheritance"]; }
     77    private IValueParameter<EnumValue<AgeInheritance>> AgeInheritanceParameter {
     78      get { return (IValueParameter<EnumValue<AgeInheritance>>)Parameters["AgeInheritance"]; }
     79    }
     80    private IValueParameter<ReductionOperation> AgeInheritanceReductionParameter {
     81      get { return (IValueParameter<ReductionOperation>)Parameters["AgeInheritanceReduction"]; }
    8082    }
    8183    private IValueParameter<IntValue> MatingPoolRangeParameter {
     
    118120      set { AgeLimitsParameter.Value = value; }
    119121    }
    120     public ReductionOperation AgeInheritance {
     122    public EnumValue<AgeInheritance> AgeInheritance {
    121123      get { return AgeInheritanceParameter.Value; }
    122124      set { AgeInheritanceParameter.Value = value; }
     125    }
     126    private ReductionOperation AgeInheritanceReduction {
     127      get { return AgeInheritanceReductionParameter.Value; }
     128      set { AgeInheritanceReductionParameter.Value = value; }
    123129    }
    124130    public IntValue MatingPoolRange {
     
    168174      Parameters.Add(new ValueParameter<IntValue>("AgeGap", "The frequency of reseeding the lowest layer and scaling factor for the age-limits for the layers", new IntValue(20)));
    169175      Parameters.Add(new ValueParameter<IntArray>("AgeLimits", new IntArray(new int[0])) { Hidden = true });
    170       Parameters.Add(new ValueParameter<ReductionOperation>("AgeInheritance", "The operator for determining the age of an offspring based the parents' age.", new ReductionOperation(ReductionOperations.Max)) { Hidden = true });
     176      Parameters.Add(new ValueParameter<EnumValue<AgeInheritance>>("AgeInheritance", "The operator for determining the age of an offspring based the parents' age.", new EnumValue<AgeInheritance>(ALPS.AgeInheritance.Older)));
     177      Parameters.Add(new ValueParameter<ReductionOperation>("AgeInheritanceReduction") { Hidden = true });
    171178      Parameters.Add(new ValueParameter<IntValue>("MatingPoolRange", "The range of layers used for creating a mating pool. (1 = current + previous layer)", new IntValue(1)) { Hidden = true });
    172179      Parameters.Add(new ValueParameter<PercentValue>("MatingPoolSelectionPercentage", "Percentage of the previous layers used for creating a mating pool.", new PercentValue(1.0, restrictToUnitInterval: true)) { Hidden = true });
     
    175182      layerQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
    176183
    177       // Create Operator Graph
    178 
    179       RecalculateAgeLimits();
     184      ParameterizeAgeLimits();
     185      ParameterizeAgeInheritanceReduction();
    180186
    181187      ParameterizeAnalyzers();
     
    185191    }
    186192
     193
     194    #region Events
    187195    public override void Prepare() {
    188196      if (Problem != null)
     
    190198    }
    191199
    192     #region Events
    193200    protected override void OnProblemChanged() {
    194201      base.OnProblemChanged();
     
    227234    private void AgeGapParameter_ValueChanged(object sender, EventArgs e) {
    228235      AgeGap.ValueChanged += AgeGap_ValueChanged;
    229       RecalculateAgeLimits();
     236      ParameterizeAgeLimits();
    230237    }
    231238    private void AgeGap_ValueChanged(object sender, EventArgs e) {
    232       RecalculateAgeLimits();
     239      ParameterizeAgeLimits();
    233240    }
    234241    private void AgingSchemeParameter_ValueChanged(object sender, EventArgs e) {
    235242      AgingScheme.ValueChanged += AgingScheme_ValueChanged;
    236       RecalculateAgeLimits();
     243      ParameterizeAgeLimits();
    237244    }
    238245    private void AgingScheme_ValueChanged(object sender, EventArgs e) {
    239       RecalculateAgeLimits();
     246      ParameterizeAgeLimits();
    240247    }
    241248    private void NumberOfLayersParameter_ValueChanged(object sender, EventArgs e) {
    242249      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
    243       RecalculateAgeLimits();
     250      ParameterizeAgeLimits();
    244251    }
    245252    private void NumberOfLayers_ValueChanged(object sender, EventArgs e) {
    246       RecalculateAgeLimits();
     253      ParameterizeAgeLimits();
     254    }
     255    private void AgeInheritanceParameter_ValueChanged(object sender, EventArgs e) {
     256      AgeInheritance.ValueChanged += AgeInheritance_ValueChanged;
     257      ParameterizeAgeInheritanceReduction();
     258    }
     259    private void AgeInheritance_ValueChanged(object sender, EventArgs e) {
     260      ParameterizeAgeInheritanceReduction();
    247261    }
    248262    private void AnalyzerOperators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IAnalyzer>> e) {
     
    278292      NumberOfLayersParameter.ValueChanged += NumberOfLayersParameter_ValueChanged;
    279293      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
     294      AgeInheritanceParameter.ValueChanged += AgeInheritanceParameter_ValueChanged;
     295      AgeInheritance.ValueChanged += AgeInheritance_ValueChanged;
    280296      Analyzer.Operators.ItemsAdded += AnalyzerOperators_ItemsAdded;
    281297      LayerAnalyzer.Operators.ItemsAdded += LayerAnalyzerOperators_ItemsAdded;
     
    307323      }
    308324    }
     325
     326    private void ParameterizeAgeInheritanceReduction() {
     327      AgeInheritanceReduction.Value = GetAgeInheritanceReduction(AgeInheritance.Value);
     328    }
     329    protected abstract ReductionOperations GetAgeInheritanceReduction(AgeInheritance ageInheritance);
     330    private void ParameterizeAgeLimits() {
     331      var scheme = AgingScheme.Value;
     332      int ageGap = AgeGap.Value;
     333      int numberOfLayers = NumberOfLayers.Value;
     334      AgeLimits = scheme.CalculateAgeLimits(ageGap, numberOfLayers);
     335    }
    309336    protected virtual void ParameterizeStochasticOperator(IOperator @operator) {
    310337      var stochasticOperator = @operator as IStochasticOperator;
     
    338365    }
    339366    #endregion
    340 
    341     private void RecalculateAgeLimits() {
    342       var scheme = AgingScheme.Value;
    343       int ageGap = AgeGap.Value;
    344       int numberOfLayers = NumberOfLayers.Value;
    345       AgeLimits = AgingSchemeCalculator.CalculateAgeLimits(scheme, ageGap, numberOfLayers);
    346     }
    347367  }
    348368}
Note: See TracChangeset for help on using the changeset viewer.