Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/12/16 18:20:50 (8 years ago)
Author:
mkommend
Message:

#1087: Refactored and improved analyzers for multi-objective test functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/InvertedGenerationalDistanceAnalyzer.cs

    r14030 r14044  
    2020#endregion
    2121
     22using System.Linq;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3132  [Item("InvertedGenerationalDistanceAnalyzer", "The inverted generational distance between the current and the best known front (see Multi-Objective Performance Metrics - Shodhganga for more information)")]
    3233  public class InvertedGenerationalDistanceAnalyzer : MOTFAnalyzer {
    33     [StorableHook(HookType.AfterDeserialization)]
    34     private void AfterDeserialization() {
     34
     35
     36    private IFixedValueParameter<DoubleValue> DampeningParameter {
     37      get { return (IFixedValueParameter<DoubleValue>)Parameters["Dampening"]; }
    3538    }
     39
     40    public double Dampening {
     41      get { return DampeningParameter.Value.Value; }
     42      set { DampeningParameter.Value.Value = value; }
     43    }
     44
     45    public InvertedGenerationalDistanceAnalyzer() {
     46      Parameters.Add(new FixedValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1)));
     47    }
     48
    3649    [StorableConstructor]
    3750    protected InvertedGenerationalDistanceAnalyzer(bool deserializing) : base(deserializing) { }
    38     public InvertedGenerationalDistanceAnalyzer(InvertedGenerationalDistanceAnalyzer original, Cloner cloner) : base(original, cloner) {
    39     }
    40 
     51    protected InvertedGenerationalDistanceAnalyzer(InvertedGenerationalDistanceAnalyzer original, Cloner cloner) : base(original, cloner) { }
    4152    public override IDeepCloneable Clone(Cloner cloner) {
    4253      return new InvertedGenerationalDistanceAnalyzer(this, cloner);
    4354    }
    4455
    45     /// <summary>
    46     /// </summary>
    47     private IValueParameter<DoubleValue> DampeningParameter {
    48       get {
    49         return (IValueParameter<DoubleValue>)Parameters["Dampening"];
    50       }
    51       set {
    52         Parameters["Dampening"].ActualValue = value;
    53       }
     56    public override IOperation Apply() {
     57      var results = ResultsParameter.ActualValue;
     58      var qualities = QualitiesParameter.ActualValue;
     59      var testFunction = TestFunctionParameter.ActualValue;
     60      int objectives = qualities[0].Length;
     61
     62      var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives);
     63      if (optimalfront == null) return base.Apply();
     64
     65      if (!results.ContainsKey("InvertedGenerationalDistance")) results.Add(new Result("InvertedGenerationalDistance", new DoubleValue(double.NaN)));
     66      var resultValue = (DoubleValue)results["InvertedGenerationalDistance"].Value;
     67
     68      var invertedGenerationalDistance = InvertedGenerationalDistance.Calculate(qualities.Select(q => q.ToArray()), optimalfront, DampeningParameter.Value.Value);
     69      resultValue.Value = invertedGenerationalDistance;
     70
     71      return base.Apply();
    5472    }
    5573
    56     public InvertedGenerationalDistanceAnalyzer() {
    57       Parameters.Add(new ValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1)));
    58     }
    5974
    60     public override void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results) {
    61       int objectives = qualities[0].Length;
    62       var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives);
    63       if (optimalfront == null) return;
    64       if (!results.ContainsKey("InvertedGenerationalDistance")) results.Add(new Result("InvertedGenerationalDistance", typeof(DoubleValue)));
    65       results["InvertedGenerationalDistance"].Value = new DoubleValue(InvertedGenerationalDistance.Calculate(qualities, optimalfront, DampeningParameter.Value.Value));
    66     }
    6775  }
    6876}
Note: See TracChangeset for help on using the changeset viewer.