Changeset 16310 for branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis/3.3/MultiObjective/HypervolumeAnalyzer.cs
- Timestamp:
- 11/20/18 14:53:51 (5 years ago)
- Location:
- branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis
- Property svn:mergeinfo changed
/branches/2916_IndexedDataTableSerialization/HeuristicLab.Analysis (added) merged: 15918 /trunk/HeuristicLab.Analysis (added) merged: 16177
- Property svn:mergeinfo changed
-
branches/2943_MOBasicProblem_MOCMAES/HeuristicLab.Analysis/3.3/MultiObjective/HypervolumeAnalyzer.cs
r16303 r16310 30 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 31 32 namespace HeuristicLab. Problems.TestFunctions.MultiObjective{32 namespace HeuristicLab.Analysis { 33 33 [StorableClass] 34 34 [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"; 36 37 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"]; 49 43 50 44 51 45 [StorableConstructor] 52 protected HypervolumeAnalyzer(bool deserializing) 53 : base(deserializing) { 54 } 46 protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) {} 55 47 56 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) 57 : base(original, cloner) { 58 } 48 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) : base(original, cloner) {} 49 59 50 public override IDeepCloneable Clone(Cloner cloner) { 60 51 return new HypervolumeAnalyzer(this, cloner); … … 63 54 public HypervolumeAnalyzer() { 64 55 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))); 66 57 Parameters.Add(new ResultParameter<DoubleValue>("Best known hypervolume", "The optimal hypervolume")); 67 58 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); 73 61 } 74 62 75 63 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(); 80 68 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; 93 72 BestKnownHypervolumeResultParameter.ActualValue.Value = best; 94 73 HypervolumeDistanceResultParameter.ActualValue.Value = best - hv; … … 96 75 return base.Apply(); 97 76 } 98 99 77 } 100 78 }
Note: See TracChangeset
for help on using the changeset viewer.