Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/15/16 19:27:12 (8 years ago)
Author:
bwerth
Message:

#1087 several fixes according to the review comments 35 and 38

File:
1 edited

Legend:

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

    r14085 r14090  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
    2324using System.Linq;
     
    3435  public class HypervolumeAnalyzer : MOTFAnalyzer {
    3536
    36     public ILookupParameter<DoubleArray> ReferencePointParameter {
    37       get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; }
    38     }
    39 
    40     public IFixedValueParameter<DoubleValue> BestKnownHyperVolumeParameter {
    41       get { return (IFixedValueParameter<DoubleValue>)Parameters["BestKnownHyperVolume"]; }
    42     }
    43 
    44     public double BestKnownHyperVolume {
    45       get { return BestKnownHyperVolumeParameter.Value.Value; }
    46       set { BestKnownHyperVolumeParameter.Value.Value = value; }
    47     }
    48 
    4937    [StorableConstructor]
    5038    protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) { }
     
    5745    }
    5846
    59     public HypervolumeAnalyzer() {
    60       Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation"));
    61       Parameters.Add(new FixedValueParameter<DoubleValue>("BestKnownHyperVolume", "The currently best known hypervolume", new DoubleValue(0)));
    62     }
     47    public HypervolumeAnalyzer() { }
    6348
    6449    public override IOperation Apply() {
     
    6651      var qualities = QualitiesParameter.ActualValue;
    6752      var testFunction = TestFunctionParameter.ActualValue;
    68       var referencePoint = ReferencePointParameter.ActualValue;
    6953      int objectives = qualities[0].Length;
    70 
    71 
     54      var referencePoint = testFunction.ReferencePoint(objectives);
    7255
    7356      if (!results.ContainsKey("Hypervolume")) results.Add(new Result("Hypervolume", typeof(DoubleValue)));
    7457      if (!results.ContainsKey("Absolute Distance to BestKnownHypervolume")) results.Add(new Result("Absolute Distance to BestKnownHypervolume", typeof(DoubleValue)));
    7558
    76       double best;
     59      double best = testFunction.OptimalHypervolume(objectives);
    7760      if (!results.ContainsKey("BestKnownHypervolume")) {
    7861        results.Add(new Result("BestKnownHypervolume", typeof(DoubleValue)));
    79         best = BestKnownHyperVolumeParameter.Value.Value;
    80       } else {
    81         best = ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value;
    8262      }
    83 
     63      best = Math.Max(best, ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value);
    8464
    8565      IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true);
    8666
    87       double hv = front.Any() ? Hypervolume.Calculate(front, referencePoint.CloneAsArray(), testFunction.Maximization(objectives)) : 0;
    88 
     67      double hv = Hypervolume.Calculate(front, (double[])referencePoint.Clone(), testFunction.Maximization(objectives));
    8968
    9069      if (double.IsNaN(best) || best < hv) {
     
    9372      }
    9473
    95       results["Hypervolume"].Value = new DoubleValue(hv);
    96       results["BestKnownHypervolume"].Value = new DoubleValue(best);
    97       results["Absolute Distance to BestKnownHypervolume"].Value = new DoubleValue(best - hv);
     74      ((DoubleValue)(results["Hypervolume"].Value)).Value = hv;
     75      ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value = best;
     76      ((DoubleValue)(results["Absolute Distance to BestKnownHypervolume"].Value)).Value = best - hv;
    9877
    9978      return base.Apply();
Note: See TracChangeset for help on using the changeset viewer.