Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/20/18 14:53:51 (5 years ago)
Author:
bwerth
Message:

#2943 worked on MOBasicProblem and MOAnalyzers

Location:
branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis

  • branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis/3.3/MultiObjective/HypervolumeAnalyzer.cs

    r16303 r16310  
    3030using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3131
    32 namespace HeuristicLab.Problems.TestFunctions.MultiObjective {
     32namespace HeuristicLab.Analysis {
    3333  [StorableClass]
    3434  [Item("HypervolumeAnalyzer", "Computes the enclosed Hypervolume between the current front and a given reference Point")]
    35   public class HypervolumeAnalyzer : MOTFAnalyzer {
     35  public class HypervolumeAnalyzer : MultiObjectiveSuccessAnalyzer {
     36    public override string ResultName => "Hypervolume";
    3637
    37     public ILookupParameter<DoubleArray> ReferencePointParameter {
    38       get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; }
    39     }
    40     public IResultParameter<DoubleValue> HypervolumeResultParameter {
    41       get { return (IResultParameter<DoubleValue>)Parameters["Hypervolume"]; }
    42     }
    43     public IResultParameter<DoubleValue> BestKnownHypervolumeResultParameter {
    44       get { return (IResultParameter<DoubleValue>)Parameters["Best known hypervolume"]; }
    45     }
    46     public IResultParameter<DoubleValue> HypervolumeDistanceResultParameter {
    47       get { return (IResultParameter<DoubleValue>)Parameters["Absolute Distance to BestKnownHypervolume"]; }
    48     }
     38    public ILookupParameter<DoubleArray> ReferencePointParameter => (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"];
     39
     40    public IResultParameter<DoubleValue> BestKnownHypervolumeResultParameter => (IResultParameter<DoubleValue>)Parameters["Best known hypervolume"];
     41
     42    public IResultParameter<DoubleValue> HypervolumeDistanceResultParameter => (IResultParameter<DoubleValue>)Parameters["Absolute Distance to BestKnownHypervolume"];
    4943
    5044
    5145    [StorableConstructor]
    52     protected HypervolumeAnalyzer(bool deserializing)
    53       : base(deserializing) {
    54     }
     46    protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) {}
    5547
    56     protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner)
    57       : base(original, cloner) {
    58     }
     48    protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) : base(original, cloner) {}
     49
    5950    public override IDeepCloneable Clone(Cloner cloner) {
    6051      return new HypervolumeAnalyzer(this, cloner);
     
    6354    public HypervolumeAnalyzer() {
    6455      Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation"));
    65       Parameters.Add(new ResultParameter<DoubleValue>("Hypervolume", "The hypervolume of the current generation"));
     56      Parameters.Add(new ResultParameter<DoubleValue>("Hypervolume", "The hypervolume of the current generation", "Results", new DoubleValue(double.NaN)));
    6657      Parameters.Add(new ResultParameter<DoubleValue>("Best known hypervolume", "The optimal hypervolume"));
    6758      Parameters.Add(new ResultParameter<DoubleValue>("Absolute Distance to BestKnownHypervolume", "The difference between the best known and the current hypervolume"));
    68       HypervolumeResultParameter.DefaultValue = new DoubleValue(0);
    69       BestKnownHypervolumeResultParameter.DefaultValue = new DoubleValue(0);
    70       HypervolumeDistanceResultParameter.DefaultValue = new DoubleValue(0);
    71 
    72 
     59      BestKnownHypervolumeResultParameter.DefaultValue = new DoubleValue(double.NaN);
     60      HypervolumeDistanceResultParameter.DefaultValue = new DoubleValue(double.NaN);
    7361    }
    7462
    7563    public override IOperation Apply() {
    76       var qualities = QualitiesParameter.ActualValue;
    77       var testFunction = TestFunctionParameter.ActualValue;
    78       var objectives = qualities[0].Length;
    79       var referencePoint = ReferencePointParameter.ActualValue;
     64      var qualities = QualitiesParameter.ActualValue.Select(x => x.CloneAsArray()).ToArray();
     65      var referencePoint = ReferencePointParameter.ActualValue.ToArray();
     66      var best = BestKnownHypervolumeResultParameter.ActualValue.Value;
     67      var maximization = MaximizationParameter.ActualValue.ToArray();
    8068
    81       var best = BestKnownHypervolumeResultParameter.ActualValue.Value;
    82       if (referencePoint.SequenceEqual(testFunction.ReferencePoint(objectives))) {
    83         best = Math.Max(best, testFunction.OptimalHypervolume(objectives));
    84       }
    85 
    86       var hv = HypervolumeCalculator.CalculateHypervolume(qualities.Select(x=>x.CloneAsArray()).ToArray(), referencePoint.ToArray(), testFunction.Maximization(objectives));
    87 
    88       if (hv > best) {
    89         best = hv;
    90       }
    91 
    92       HypervolumeResultParameter.ActualValue.Value = hv;
     69      var hv = HypervolumeCalculator.CalculateHypervolume(qualities, referencePoint, maximization);
     70      if (hv > best || double.IsNaN(best)) best = hv;
     71      ResultParameter.ActualValue.Value = hv;
    9372      BestKnownHypervolumeResultParameter.ActualValue.Value = best;
    9473      HypervolumeDistanceResultParameter.ActualValue.Value = best - hv;
     
    9675      return base.Apply();
    9776    }
    98 
    9977  }
    10078}
Note: See TracChangeset for help on using the changeset viewer.