Changeset 14044 for branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/InvertedGenerationalDistanceAnalyzer.cs
- Timestamp:
- 07/12/16 18:20:50 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/InvertedGenerationalDistanceAnalyzer.cs
r14030 r14044 20 20 #endregion 21 21 22 using System.Linq; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 31 32 [Item("InvertedGenerationalDistanceAnalyzer", "The inverted generational distance between the current and the best known front (see Multi-Objective Performance Metrics - Shodhganga for more information)")] 32 33 public class InvertedGenerationalDistanceAnalyzer : MOTFAnalyzer { 33 [StorableHook(HookType.AfterDeserialization)] 34 private void AfterDeserialization() { 34 35 36 private IFixedValueParameter<DoubleValue> DampeningParameter { 37 get { return (IFixedValueParameter<DoubleValue>)Parameters["Dampening"]; } 35 38 } 39 40 public double Dampening { 41 get { return DampeningParameter.Value.Value; } 42 set { DampeningParameter.Value.Value = value; } 43 } 44 45 public InvertedGenerationalDistanceAnalyzer() { 46 Parameters.Add(new FixedValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1))); 47 } 48 36 49 [StorableConstructor] 37 50 protected InvertedGenerationalDistanceAnalyzer(bool deserializing) : base(deserializing) { } 38 public InvertedGenerationalDistanceAnalyzer(InvertedGenerationalDistanceAnalyzer original, Cloner cloner) : base(original, cloner) { 39 } 40 51 protected InvertedGenerationalDistanceAnalyzer(InvertedGenerationalDistanceAnalyzer original, Cloner cloner) : base(original, cloner) { } 41 52 public override IDeepCloneable Clone(Cloner cloner) { 42 53 return new InvertedGenerationalDistanceAnalyzer(this, cloner); 43 54 } 44 55 45 /// <summary> 46 /// </summary> 47 private IValueParameter<DoubleValue> DampeningParameter { 48 get { 49 return (IValueParameter<DoubleValue>)Parameters["Dampening"]; 50 } 51 set { 52 Parameters["Dampening"].ActualValue = value; 53 } 56 public override IOperation Apply() { 57 var results = ResultsParameter.ActualValue; 58 var qualities = QualitiesParameter.ActualValue; 59 var testFunction = TestFunctionParameter.ActualValue; 60 int objectives = qualities[0].Length; 61 62 var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives); 63 if (optimalfront == null) return base.Apply(); 64 65 if (!results.ContainsKey("InvertedGenerationalDistance")) results.Add(new Result("InvertedGenerationalDistance", new DoubleValue(double.NaN))); 66 var resultValue = (DoubleValue)results["InvertedGenerationalDistance"].Value; 67 68 var invertedGenerationalDistance = InvertedGenerationalDistance.Calculate(qualities.Select(q => q.ToArray()), optimalfront, DampeningParameter.Value.Value); 69 resultValue.Value = invertedGenerationalDistance; 70 71 return base.Apply(); 54 72 } 55 73 56 public InvertedGenerationalDistanceAnalyzer() {57 Parameters.Add(new ValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1)));58 }59 74 60 public override void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results) {61 int objectives = qualities[0].Length;62 var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives);63 if (optimalfront == null) return;64 if (!results.ContainsKey("InvertedGenerationalDistance")) results.Add(new Result("InvertedGenerationalDistance", typeof(DoubleValue)));65 results["InvertedGenerationalDistance"].Value = new DoubleValue(InvertedGenerationalDistance.Calculate(qualities, optimalfront, DampeningParameter.Value.Value));66 }67 75 } 68 76 }
Note: See TracChangeset
for help on using the changeset viewer.