Changeset 17225 for branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers
- Timestamp:
- 08/29/19 13:53:26 (5 years ago)
- Location:
- branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/CrowdingAnalyzer.cs
r16723 r17225 30 30 namespace HeuristicLab.Problems.TestFunctions.MultiObjective { 31 31 [StorableType("F06FB45C-051E-4AD8-BD82-16DA9DCBCACB")] 32 [Item("CrowdingAnalyzer", "Th e mean crowding distance for each point of the Front (see Multi-Objective Performance Metrics - Shodhganga for more information)")]32 [Item("CrowdingAnalyzer", "This analyzer is functionally equivalent to the CrowdingAnalyzer in HeuristicLab.Analysis, but is kept as not to break backwards compatibility")] 33 33 public class CrowdingAnalyzer : MOTFAnalyzer { 34 35 public ILookupParameter<DoubleMatrix> BoundsParameter {36 get { return (ILookupParameter<DoubleMatrix>)Parameters["Bounds"]; }37 }38 34 39 35 public IResultParameter<DoubleValue> CrowdingResultParameter { … … 43 39 [StorableConstructor] 44 40 protected CrowdingAnalyzer(StorableConstructorFlag _) : base(_) { } 45 public CrowdingAnalyzer(CrowdingAnalyzer original, Cloner cloner) 46 : base(original, cloner) { 47 } 41 public CrowdingAnalyzer(CrowdingAnalyzer original, Cloner cloner): base(original, cloner) {} 48 42 public override IDeepCloneable Clone(Cloner cloner) { 49 43 return new CrowdingAnalyzer(this, cloner); … … 51 45 52 46 public CrowdingAnalyzer() { 53 Parameters.Add(new LookupParameter<DoubleMatrix>("Bounds", 54 "The bounds of the solution given as either one line for all variables or a line for each variable. The first column specifies lower bound, the second upper bound.")); 55 Parameters.Add(new ResultParameter<DoubleValue>("Crowding", "The average corwding value of all points (excluding infinities)")); 47 Parameters.Add(new ResultParameter<DoubleValue>("Crowding", "The average corwding distance of all points (excluding infinities)")); 56 48 CrowdingResultParameter.DefaultValue = new DoubleValue(double.NaN); 57 58 49 } 59 50 60 51 public override IOperation Apply() { 61 52 var qualities = QualitiesParameter.ActualValue; 62 var bounds = BoundsParameter.ActualValue; 63 64 var crowdingDistance = Crowding.Calculate(qualities.Select(x => x.ToArray()), bounds.CloneAsMatrix()); 53 var crowdingDistance = CrowdingCalculator.CalculateCrowding(qualities); 65 54 CrowdingResultParameter.ActualValue.Value = crowdingDistance; 66 67 55 return base.Apply(); 68 56 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/GenerationalDistanceAnalyzer.cs
r16723 r17225 30 30 namespace HeuristicLab.Problems.TestFunctions.MultiObjective { 31 31 [StorableType("EBC72F16-E329-4D18-800C-8642EFD0F05C")] 32 [Item("GenerationalDistanceAnalyzer", "Th e generational distance between the current and the best known front (see Multi-Objective Performance Metrics - Shodhganga for more information)")]32 [Item("GenerationalDistanceAnalyzer", "This analyzer is functionally equivalent to the GenerationalDistanceAnalyzer in HeuristicLab.Analysis, but is kept as not to break backwards compatibility")] 33 33 public class GenerationalDistanceAnalyzer : MOTFAnalyzer { 34 34 … … 63 63 public override IOperation Apply() { 64 64 var qualities = QualitiesParameter.ActualValue; 65 int objectives = qualities[0].Length; 66 67 var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(objectives); 65 var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(qualities[0].Length); 68 66 if (optimalfront == null) return base.Apply(); 69 67 70 var distance = GenerationalDistance.Calculate(qualities.Select(x => x.CloneAsArray()), optimalfront, Dampening); 71 GenerationalDistanceResultParameter.ActualValue.Value = distance; 72 68 var q = qualities.Select(x => x.ToArray()); 69 GenerationalDistanceResultParameter.ActualValue.Value = GenerationalDistance.Calculate(q, optimalfront, Dampening); 73 70 return base.Apply(); 74 71 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/HypervolumeAnalyzer.cs
r16723 r17225 32 32 namespace HeuristicLab.Problems.TestFunctions.MultiObjective { 33 33 [StorableType("13D363E4-76FF-4A5A-9B2C-767D9E880E4B")] 34 [Item("HypervolumeAnalyzer", " Computes the enclosed Hypervolume between the current front and a given reference Point")]34 [Item("HypervolumeAnalyzer", "This analyzer is functionally equivalent to the HypervolumeAnalyzer in HeuristicLab.Analysis, but is kept as not to break backwards compatibility")] 35 35 public class HypervolumeAnalyzer : MOTFAnalyzer { 36 36 … … 38 38 get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; } 39 39 } 40 40 41 public IResultParameter<DoubleValue> HypervolumeResultParameter { 41 42 get { return (IResultParameter<DoubleValue>)Parameters["Hypervolume"]; } 42 43 } 44 43 45 public IResultParameter<DoubleValue> BestKnownHypervolumeResultParameter { 44 46 get { return (IResultParameter<DoubleValue>)Parameters["Best known hypervolume"]; } 45 47 } 48 46 49 public IResultParameter<DoubleValue> HypervolumeDistanceResultParameter { 47 50 get { return (IResultParameter<DoubleValue>)Parameters["Absolute Distance to BestKnownHypervolume"]; } … … 53 56 } 54 57 55 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) 56 : base(original, cloner) { 57 } 58 protected HypervolumeAnalyzer(HypervolumeAnalyzer original, Cloner cloner) : base(original, cloner) {} 59 58 60 public override IDeepCloneable Clone(Cloner cloner) { 59 61 return new HypervolumeAnalyzer(this, cloner); … … 68 70 BestKnownHypervolumeResultParameter.DefaultValue = new DoubleValue(0); 69 71 HypervolumeDistanceResultParameter.DefaultValue = new DoubleValue(0); 70 71 72 72 } 73 73 … … 75 75 var qualities = QualitiesParameter.ActualValue; 76 76 var testFunction = TestFunctionParameter.ActualValue; 77 intobjectives = qualities[0].Length;77 var objectives = qualities[0].Length; 78 78 var referencePoint = ReferencePointParameter.ActualValue; 79 79 80 doublebest = BestKnownHypervolumeResultParameter.ActualValue.Value;80 var best = BestKnownHypervolumeResultParameter.ActualValue.Value; 81 81 if (referencePoint.SequenceEqual(testFunction.ReferencePoint(objectives))) { 82 82 best = Math.Max(best, testFunction.OptimalHypervolume(objectives)); 83 83 } 84 84 85 IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true); 86 87 double hv = Hypervolume.Calculate(front, referencePoint.ToArray(), testFunction.Maximization(objectives)); 85 var hv = HypervolumeCalculator.CalculateHypervolume(qualities.Select(x=>x.CloneAsArray()).ToArray(), referencePoint.ToArray(), testFunction.Maximization(objectives)); 88 86 89 87 if (hv > best) { -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/InvertedGenerationalDistanceAnalyzer.cs
r16723 r17225 30 30 namespace HeuristicLab.Problems.TestFunctions.MultiObjective { 31 31 [StorableType("EC99F3C1-D8D2-4738-9523-0D07438647A5")] 32 [Item("InvertedGenerationalDistanceAnalyzer", "Th e inverted generational distance between the current and the best known front (see Multi-Objective Performance Metrics - Shodhganga for more information)")]32 [Item("InvertedGenerationalDistanceAnalyzer", "This analyzer is functionally equivalent to the InvertedGenerationalDistanceAnalyzer in HeuristicLab.Analysis, but is kept as not to break backwards compatibility")] 33 33 public class InvertedGenerationalDistanceAnalyzer : MOTFAnalyzer { 34 public override bool EnabledByDefault { get { return false; } } 34 public override bool EnabledByDefault { 35 get { return false; } 36 } 35 37 36 38 private IFixedValueParameter<DoubleValue> DampeningParameter { … … 51 53 Parameters.Add(new ResultParameter<DoubleValue>("Inverted Generational Distance", "The genrational distance between the current front and the optimal front")); 52 54 InvertedGenerationalDistanceResultParameter.DefaultValue = new DoubleValue(double.NaN); 53 54 55 } 55 56 … … 64 65 public override IOperation Apply() { 65 66 var qualities = QualitiesParameter.ActualValue; 66 var testFunction = TestFunctionParameter.ActualValue; 67 int objectives = qualities[0].Length; 68 69 var optimalfront = testFunction.OptimalParetoFront(objectives); 67 var optimalfront = TestFunctionParameter.ActualValue.OptimalParetoFront(qualities[0].Length); 70 68 if (optimalfront == null) return base.Apply(); 71 69 72 var invertedGenerationalDistance = InvertedGenerationalDistance.Calculate(qualities.Select(q => q.ToArray()), optimalfront, DampeningParameter.Value.Value); 73 InvertedGenerationalDistanceResultParameter.ActualValue.Value = invertedGenerationalDistance; 74 70 var q = qualities.Select(x => x.ToArray()); 71 InvertedGenerationalDistanceResultParameter.ActualValue.Value = InvertedGenerationalDistance.Calculate(q, optimalfront, Dampening); 75 72 return base.Apply(); 76 73 } 77 78 79 74 } 80 75 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/MOTFAnalyzer.cs
r16723 r17225 33 33 [StorableType("CFBB2CAB-C1B7-4F14-9A01-6D5624B7B681")] 34 34 public abstract class MOTFAnalyzer : SingleSuccessorOperator, IMultiObjectiveTestFunctionAnalyzer { 35 public virtual bool EnabledByDefault { get { return true; } } 35 public virtual bool EnabledByDefault { 36 get { return true; } 37 } 36 38 37 39 public IScopeTreeLookupParameter<DoubleArray> QualitiesParameter { -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/ScatterPlotAnalyzer.cs
r16723 r17225 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Data; 25 26 using HeuristicLab.Encodings.RealVectorEncoding; 26 27 using HeuristicLab.Optimization; … … 41 42 } 42 43 43 44 44 [StorableConstructor] 45 45 protected ScatterPlotAnalyzer(StorableConstructorFlag _) : base(_) { } … … 52 52 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Individuals", "The individual solutions to the problem")); 53 53 Parameters.Add(new ResultParameter<ParetoFrontScatterPlot>("Scatterplot", "The scatterplot for the current and optimal (if known front)")); 54 55 54 } 56 55 … … 59 58 var individuals = IndividualsParameter.ActualValue; 60 59 var testFunction = TestFunctionParameter.ActualValue; 61 int objectives = qualities[0].Length;62 int problemSize = individuals[0].Length;60 var objectives = qualities.Length != 0 ? qualities[0].Length:0; 61 var problemSize = individuals.Length != 0 ? individuals[0].Length:0; 63 62 64 double[][] optimalFront = new double[0][]; 65 var front = testFunction.OptimalParetoFront(objectives); 66 if (front != null) optimalFront = front.ToArray(); 63 var optimalFront = new double[0][]; 64 if (testFunction != null) { 65 var front = testFunction.OptimalParetoFront(objectives); 66 if (front != null) optimalFront = front.ToArray(); 67 } 68 else { 69 var mat = BestKnownFrontParameter.ActualValue; 70 optimalFront = mat == null ? null : Enumerable.Range(0, mat.Rows).Select(r => Enumerable.Range(0, mat.Columns).Select(c => mat[r, c]).ToArray()).ToArray(); 71 } 67 72 68 73 var qualityClones = qualities.Select(s => s.ToArray()).ToArray(); … … 70 75 71 76 ScatterPlotResultParameter.ActualValue = new ParetoFrontScatterPlot(qualityClones, solutionClones, optimalFront, objectives, problemSize); 72 73 77 return base.Apply(); 74 78 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/Analyzers/SpacingAnalyzer.cs
r16723 r17225 21 21 22 22 using System.Linq; 23 using HEAL.Attic; 23 24 using HeuristicLab.Common; 24 25 using HeuristicLab.Core; 25 26 using HeuristicLab.Data; 26 27 using HeuristicLab.Optimization; 27 using HEAL.Attic;28 28 29 29 namespace HeuristicLab.Problems.TestFunctions.MultiObjective { 30 30 [StorableType("F32027A7-3116-4864-A404-820F866BFD65")] 31 [Item("SpacingAnalyzer", "Th e spacing of the current front (see Multi-Objective Performance Metrics - Shodhganga for more information)")]31 [Item("SpacingAnalyzer", "This analyzer is functionally equivalent to the SpacingAnalyzer in HeuristicLab.Analysis, but is kept as not to break backwards compatibility")] 32 32 public class SpacingAnalyzer : MOTFAnalyzer { 33 33 … … 35 35 get { return (IResultParameter<DoubleValue>)Parameters["Spacing"]; } 36 36 } 37 37 38 [StorableConstructor] 38 39 protected SpacingAnalyzer(StorableConstructorFlag _) : base(_) { } 39 40 40 41 41 protected SpacingAnalyzer(SpacingAnalyzer original, Cloner cloner) : base(original, cloner) { } … … 51 51 public override IOperation Apply() { 52 52 var qualities = QualitiesParameter.ActualValue; 53 var spacing = Spacing.Calculate(qualities.Select(q => q.ToArray())); 54 SpacingResultParameter.ActualValue.Value = spacing; 55 53 var q = qualities.Select(x => x.ToArray()); 54 SpacingResultParameter.ActualValue.Value = Spacing.Calculate(q); 56 55 return base.Apply(); 57 56 }
Note: See TracChangeset
for help on using the changeset viewer.