Changeset 14085 for branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
- Timestamp:
- 07/15/16 14:14:50 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
r14081 r14085 34 34 public class HypervolumeAnalyzer : MOTFAnalyzer { 35 35 36 public I ValueParameter<DoubleArray> ReferencePointParameter {37 get { return (I ValueParameter<DoubleArray>)Parameters["ReferencePoint"]; }36 public ILookupParameter<DoubleArray> ReferencePointParameter { 37 get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; } 38 38 } 39 39 … … 49 49 [StorableConstructor] 50 50 protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) { } 51 [StorableHook(HookType.AfterDeserialization)]52 private void AfterDeserialization() {53 RegisterEventHandlers();54 }55 51 56 52 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) 57 53 : base(original, cloner) { 58 RegisterEventHandlers();59 54 } 60 55 public override IDeepCloneable Clone(Cloner cloner) { … … 63 58 64 59 public HypervolumeAnalyzer() { 65 Parameters.Add(new ValueParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation"));60 Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation")); 66 61 Parameters.Add(new FixedValueParameter<DoubleValue>("BestKnownHyperVolume", "The currently best known hypervolume", new DoubleValue(0))); 67 68 RegisterEventHandlers();69 }70 71 private void RegisterEventHandlers() {72 ReferencePointParameter.ValueChanged += (o, e) => BestKnownHyperVolume = 0;73 62 } 74 63 … … 77 66 var qualities = QualitiesParameter.ActualValue; 78 67 var testFunction = TestFunctionParameter.ActualValue; 68 var referencePoint = ReferencePointParameter.ActualValue; 79 69 int objectives = qualities[0].Length; 70 71 80 72 81 73 if (!results.ContainsKey("Hypervolume")) results.Add(new Result("Hypervolume", typeof(DoubleValue))); … … 93 85 IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true); 94 86 95 double hv = front.Any() ? Hypervolume.Calculate(front, testFunction.ReferencePoint(objectives), testFunction.Maximization(objectives)) : 0;87 double hv = front.Any() ? Hypervolume.Calculate(front, referencePoint.CloneAsArray(), testFunction.Maximization(objectives)) : 0; 96 88 97 89
Note: See TracChangeset
for help on using the changeset viewer.