Changeset 14092 for branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
- Timestamp:
- 07/18/16 13:50:08 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
r14090 r14092 35 35 public class HypervolumeAnalyzer : MOTFAnalyzer { 36 36 37 public ILookupParameter<DoubleArray> ReferencePointParameter { 38 get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; } 39 } 40 37 41 [StorableConstructor] 38 protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) { } 42 protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) { 43 } 39 44 40 45 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) … … 45 50 } 46 51 47 public HypervolumeAnalyzer() { } 52 public HypervolumeAnalyzer() { 53 Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation")); 54 } 48 55 49 56 public override IOperation Apply() { … … 52 59 var testFunction = TestFunctionParameter.ActualValue; 53 60 int objectives = qualities[0].Length; 54 var referencePoint = testFunction.ReferencePoint(objectives);61 var referencePoint = ReferencePointParameter.ActualValue; 55 62 56 if (!results.ContainsKey("Hypervolume")) results.Add(new Result("Hypervolume", typeof(DoubleValue)));57 if (!results.ContainsKey("Absolute Distance to BestKnownHypervolume")) results.Add(new Result("Absolute Distance to BestKnownHypervolume", typeof(DoubleValue)));63 if (!results.ContainsKey("Hypervolume")) results.Add(new Result("Hypervolume", new DoubleValue(0))); 64 if (!results.ContainsKey("Absolute Distance to BestKnownHypervolume")) results.Add(new Result("Absolute Distance to BestKnownHypervolume", new DoubleValue(0))); 58 65 59 66 double best = testFunction.OptimalHypervolume(objectives); 60 67 if (!results.ContainsKey("BestKnownHypervolume")) { 61 results.Add(new Result("BestKnownHypervolume", typeof(DoubleValue))); 68 results.Add(new Result("BestKnownHypervolume", new DoubleValue(0))); 69 } else { 70 best = Math.Max(best, ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value); 62 71 } 63 best = Math.Max(best, ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value); 72 64 73 65 74 IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true); 66 75 67 double hv = Hypervolume.Calculate(front, (double[])referencePoint.Clone(), testFunction.Maximization(objectives));76 double hv = Hypervolume.Calculate(front, referencePoint.ToArray(), testFunction.Maximization(objectives)); 68 77 69 78 if (double.IsNaN(best) || best < hv) {
Note: See TracChangeset
for help on using the changeset viewer.