Changeset 14097 for branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3
- Timestamp:
- 07/18/16 15:50:10 (8 years ago)
- Location:
- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3
- Files:
-
- 9 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/CrowdingAnalyzer.cs
r14085 r14097 37 37 } 38 38 39 public IResultParameter<DoubleValue> CrowdingResultParameter { 40 get { return (IResultParameter<DoubleValue>)Parameters["Crowding"]; } 41 } 42 39 43 [StorableConstructor] 40 44 protected CrowdingAnalyzer(bool deserializing) : base(deserializing) { } … … 49 53 Parameters.Add(new LookupParameter<DoubleMatrix>("Bounds", 50 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)")); 56 CrowdingResultParameter.DefaultValue = new DoubleValue(double.NaN); 57 51 58 } 52 59 53 60 public override IOperation Apply() { 54 var results = ResultsParameter.ActualValue;55 61 var qualities = QualitiesParameter.ActualValue; 56 62 var bounds = BoundsParameter.ActualValue; 57 63 58 if (!results.ContainsKey("Crowding")) results.Add(new Result("Crowding", new DoubleValue()));59 var resultValue = (DoubleValue)results["Crowding"].Value;60 61 64 var crowdingDistance = Crowding.Calculate(qualities.Select(x => x.ToArray()), bounds.CloneAsMatrix()); 62 resultValue.Value = crowdingDistance;65 CrowdingResultParameter.ActualValue.Value = crowdingDistance; 63 66 64 67 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/GenerationalDistanceAnalyzer.cs
r14085 r14097 20 20 #endregion 21 21 22 using System; 22 23 using System.Linq; 23 24 using HeuristicLab.Common; … … 43 44 } 44 45 46 public IResultParameter<DoubleValue> GenerationalDistanceResultParameter { 47 get { return (IResultParameter<DoubleValue>)Parameters["Generational Distance"]; } 48 } 49 45 50 [StorableConstructor] 46 51 protected GenerationalDistanceAnalyzer(bool deserializing) : base(deserializing) { } … … 52 57 public GenerationalDistanceAnalyzer() { 53 58 Parameters.Add(new FixedValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1))); 59 Parameters.Add(new ResultParameter<DoubleValue>("Generational Distance", "The genrational distance between the current front and the optimal front")); 60 GenerationalDistanceResultParameter.DefaultValue = new DoubleValue(double.NaN); 61 54 62 } 55 63 56 64 public override IOperation Apply() { 57 var results = ResultsParameter.ActualValue;58 65 var qualities = QualitiesParameter.ActualValue; 59 66 int objectives = qualities[0].Length; … … 62 69 if (optimalfront == null) return base.Apply(); 63 70 64 if (!results.ContainsKey("GenerationalDistance")) results.Add(new Result("GenerationalDistance", new DoubleValue()));65 var resultValue = (DoubleValue)results["GenerationalDistance"].Value;66 67 71 var distance = GenerationalDistance.Calculate(qualities.Select(x => x.CloneAsArray()), optimalfront, Dampening); 68 resultValue.Value = distance;72 GenerationalDistanceResultParameter.ActualValue.Value = distance; 69 73 70 74 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
r14092 r14097 38 38 get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; } 39 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 } 49 40 50 41 51 [StorableConstructor] … … 52 62 public HypervolumeAnalyzer() { 53 63 Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation")); 64 Parameters.Add(new ResultParameter<DoubleValue>("Hypervolume", "The hypervolume of the current generation")); 65 Parameters.Add(new ResultParameter<DoubleValue>("Best known hypervolume", "The optimal hypervolume")); 66 Parameters.Add(new ResultParameter<DoubleValue>("Absolute Distance to BestKnownHypervolume", "The difference between the best known and the current hypervolume")); 67 HypervolumeResultParameter.DefaultValue = new DoubleValue(0); 68 BestKnownHypervolumeResultParameter.DefaultValue = new DoubleValue(0); 69 HypervolumeDistanceResultParameter.DefaultValue = new DoubleValue(0); 70 71 54 72 } 55 73 56 74 public override IOperation Apply() { 57 var results = ResultsParameter.ActualValue;58 75 var qualities = QualitiesParameter.ActualValue; 59 76 var testFunction = TestFunctionParameter.ActualValue; … … 61 78 var referencePoint = ReferencePointParameter.ActualValue; 62 79 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))); 65 66 double best = testFunction.OptimalHypervolume(objectives); 67 if (!results.ContainsKey("BestKnownHypervolume")) { 68 results.Add(new Result("BestKnownHypervolume", new DoubleValue(0))); 69 } else { 70 best = Math.Max(best, ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value); 80 double best = BestKnownHypervolumeResultParameter.ActualValue.Value; 81 if (referencePoint.SequenceEqual(testFunction.ReferencePoint(objectives))) { 82 best = Math.Max(best, testFunction.OptimalHypervolume(objectives)); 71 83 } 72 73 84 74 85 IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true); … … 76 87 double hv = Hypervolume.Calculate(front, referencePoint.ToArray(), testFunction.Maximization(objectives)); 77 88 78 if ( double.IsNaN(best) || best < hv) {89 if (!double.IsNaN(hv) || best < hv) { 79 90 best = hv; 80 BestKnownFrontParameter.ActualValue = new DoubleMatrix(MultiObjectiveTestFunctionProblem.To2D(qualities.Select(q => q.ToArray()).ToArray()));81 91 } 82 92 83 ((DoubleValue)(results["Hypervolume"].Value)).Value = hv;84 ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value = best;85 ((DoubleValue)(results["Absolute Distance to BestKnownHypervolume"].Value)).Value = best - hv;93 HypervolumeResultParameter.ActualValue.Value = hv; 94 BestKnownHypervolumeResultParameter.ActualValue.Value = best; 95 HypervolumeDistanceResultParameter.ActualValue.Value = best - hv; 86 96 87 97 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/InvertedGenerationalDistanceAnalyzer.cs
r14085 r14097 43 43 } 44 44 45 public IResultParameter<DoubleValue> InvertedGenerationalDistanceResultParameter { 46 get { return (IResultParameter<DoubleValue>)Parameters["Inverted Generational Distance"]; } 47 } 48 45 49 public InvertedGenerationalDistanceAnalyzer() { 46 50 Parameters.Add(new FixedValueParameter<DoubleValue>("Dampening", "", new DoubleValue(1))); 51 Parameters.Add(new ResultParameter<DoubleValue>("Inverted Generational Distance", "The genrational distance between the current front and the optimal front")); 52 InvertedGenerationalDistanceResultParameter.DefaultValue = new DoubleValue(double.NaN); 53 47 54 } 55 48 56 49 57 [StorableConstructor] … … 55 63 56 64 public override IOperation Apply() { 57 var results = ResultsParameter.ActualValue;58 65 var qualities = QualitiesParameter.ActualValue; 59 66 var testFunction = TestFunctionParameter.ActualValue; … … 63 70 if (optimalfront == null) return base.Apply(); 64 71 65 if (!results.ContainsKey("InvertedGenerationalDistance")) results.Add(new Result("InvertedGenerationalDistance", new DoubleValue(double.NaN)));66 var resultValue = (DoubleValue)results["InvertedGenerationalDistance"].Value;67 68 72 var invertedGenerationalDistance = InvertedGenerationalDistance.Calculate(qualities.Select(q => q.ToArray()), optimalfront, DampeningParameter.Value.Value); 69 resultValue.Value = invertedGenerationalDistance;73 InvertedGenerationalDistanceResultParameter.ActualValue.Value = invertedGenerationalDistance; 70 74 71 75 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/ScatterPlotAnalyzer.cs
r14092 r14097 37 37 } 38 38 39 public IResultParameter<ScatterPlotContent> ScatterPlotResultParameter { 40 get { return (IResultParameter<ScatterPlotContent>)Parameters["Scatterplot"]; } 41 } 42 43 39 44 [StorableConstructor] 40 45 protected ScatterPlotAnalyzer(bool deserializing) : base(deserializing) { } … … 46 51 public ScatterPlotAnalyzer() { 47 52 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Individuals", "The individual solutions to the problem")); 53 Parameters.Add(new ResultParameter<ScatterPlotContent>("Scatterplot", "The scatterplot for the current and optimal (if known front)")); 54 48 55 } 49 56 50 57 public override IOperation Apply() { 51 var results = ResultsParameter.ActualValue;52 58 var qualities = QualitiesParameter.ActualValue; 53 59 var testFunction = TestFunctionParameter.ActualValue; 54 60 int objectives = qualities[0].Length; 55 61 var individuals = IndividualsParameter.ActualValue; 56 57 if (!results.ContainsKey("Scatterplot")) {58 results.Add(new Result("Scatterplot", typeof(ScatterPlotContent)));59 }60 62 61 63 double[][] optimalFront = new double[0][]; … … 66 68 var solutionClones = individuals.Select(s => s.ToArray()).ToArray(); 67 69 68 results["Scatterplot"].Value = new ScatterPlotContent(qualityClones, solutionClones, optimalFront, objectives);70 ScatterPlotResultParameter.ActualValue = new ScatterPlotContent(qualityClones, solutionClones, optimalFront, objectives); 69 71 70 72 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/SpacingAnalyzer.cs
r14044 r14097 31 31 [Item("SpacingAnalyzer", "The spacing of the current front (see Multi-Objective Performance Metrics - Shodhganga for more information)")] 32 32 public class SpacingAnalyzer : MOTFAnalyzer { 33 34 public IResultParameter<DoubleValue> SpacingResultParameter { 35 get { return (IResultParameter<DoubleValue>)Parameters["Spacing"]; } 36 } 33 37 [StorableConstructor] 34 38 protected SpacingAnalyzer(bool deserializing) : base(deserializing) { } 39 35 40 36 41 protected SpacingAnalyzer(SpacingAnalyzer original, Cloner cloner) : base(original, cloner) { } … … 39 44 } 40 45 41 public SpacingAnalyzer() { } 46 public SpacingAnalyzer() { 47 Parameters.Add(new ResultParameter<DoubleValue>("Spacing", "The spacing of the current front")); 48 SpacingResultParameter.DefaultValue = new DoubleValue(double.NaN); 49 } 42 50 43 51 public override IOperation Apply() { 44 var results = ResultsParameter.ActualValue;45 52 var qualities = QualitiesParameter.ActualValue; 46 47 if (!results.ContainsKey("Spacing")) results.Add(new Result("Spacing", new DoubleValue(0)));48 var resultValue = (DoubleValue)results["Spacing"].Value;49 50 53 var spacing = Spacing.Calculate(qualities.Select(q => q.ToArray())); 51 resultValue.Value = spacing;54 SpacingResultParameter.ActualValue.Value = spacing; 52 55 53 56 return base.Apply(); -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/HeuristicLab.Problems.MultiObjectiveTestFunctions-3.3.csproj
r14092 r14097 161 161 <Compile Include="Calculators\InvertedGenerationalDistance.cs" /> 162 162 <Compile Include="Calculators\GenerationalDistance.cs" /> 163 <Compile Include=" Calculators\Utilities.cs" />163 <Compile Include="Utilities.cs" /> 164 164 <Compile Include="Instances\MISCInstanceProvider.cs" /> 165 165 <Compile Include="Instances\ZDTInstanceProvider.cs" /> -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs
r14092 r14097 174 174 var front = TestFunction.OptimalParetoFront(Objectives); 175 175 if (front != null) { 176 BestKnownFrontParameter.Value = (DoubleMatrix) new DoubleMatrix(To2D(front.ToArray())).AsReadOnly();176 BestKnownFrontParameter.Value = (DoubleMatrix)Utilities.ToMatrix(front).AsReadOnly(); 177 177 } else BestKnownFrontParameter.Value = null; 178 178 … … 249 249 } 250 250 251 public static T[,] To2D<T>(T[][] source) {252 try {253 int firstDimension = source.Length;254 int secondDimension = source.GroupBy(row => row.Length).Single().Key; // throws InvalidOperationException if source is not rectangular255 256 var result = new T[firstDimension, secondDimension];257 for (int i = 0; i < firstDimension; ++i)258 for (int j = 0; j < secondDimension; ++j)259 result[i, j] = source[i][j];260 261 return result;262 }263 catch (InvalidOperationException) {264 throw new InvalidOperationException("The given jagged array is not rectangular.");265 }266 }267 268 251 #endregion 269 252 } -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Utilities.cs
r14096 r14097 22 22 using System.Collections.Generic; 23 23 using System.Linq; 24 using HeuristicLab.Data; 24 25 25 26 namespace HeuristicLab.Problems.MultiObjectiveTestFunctions { … … 44 45 } 45 46 47 internal static DoubleMatrix ToMatrix(IEnumerable<double[]> source) { 48 try { 49 int firstDimension = source.Count(); 50 int secondDimension = source.GroupBy(row => row.Length).Single().Key; // throws InvalidOperationException if source is not rectangular 51 52 var result = new DoubleMatrix(firstDimension, secondDimension); 53 var enumarator = source.GetEnumerator(); 54 for (int i = 0; i < firstDimension && enumarator.MoveNext(); ++i) 55 for (int j = 0; j < secondDimension; ++j) 56 result[i, j] = enumarator.Current[j]; 57 return result; 58 } 59 catch (InvalidOperationException) { 60 throw new InvalidOperationException("The given jagged array is not rectangular."); 61 } 62 } 63 46 64 internal class DimensionComparer : IComparer<double[]> { 47 65 private readonly int dim; -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Views/ScatterPlotContent.cs
r14093 r14097 28 28 namespace HeuristicLab.Problems.MultiObjectiveTestFunctions { 29 29 [StorableClass] 30 [Item("ScatterPlot", "The optimal front, current front and its associated Points in the searchspace")] 30 31 public class ScatterPlotContent : Item { 31 32 … … 37 38 } 38 39 39 set {40 private set { 40 41 qualities = value; 41 42 } … … 49 50 } 50 51 51 set {52 private set { 52 53 objectives = value; 53 54 } … … 61 62 } 62 63 63 set {64 private set { 64 65 solutions = value; 65 66 } … … 73 74 } 74 75 75 set {76 private set { 76 77 paretoFront = value; 77 78 }
Note: See TracChangeset
for help on using the changeset viewer.