public void InvertedGenerationalDistanceTestEmptyFront() { double[] point = new double[2]; point[0] = 0.5; point[1] = 0.5; double[][] front = { }; double[][] referencefront = { point }; InvertedGenerationalDistance.Calculate(front, referencefront, 1); }
public void InvertedGenerationalDistanceTestSinglePoint() { double[] point = new double[2]; point[0] = 0; point[1] = 0; double[][] front = { point }; double[] point2 = new double[2]; point2[0] = 1; point2[1] = 1; double[][] referencefront = { point2 }; double dist = InvertedGenerationalDistance.Calculate(front, referencefront, 1); Assert.AreEqual(Math.Sqrt(2), dist); }
private void Analyze() { ResultsScatterPlot = new ParetoFrontScatterPlot(solutions.Select(x => x.Fitness).ToArray(), solutions.Select(x => x.Mean.ToArray()).ToArray(), ResultsScatterPlot.ParetoFront, ResultsScatterPlot.Objectives, ResultsScatterPlot.ProblemSize); ResultsSolutions = solutions.Select(x => x.Mean.ToArray()).ToMatrix(); var problem = Problem as MultiObjectiveTestFunctionProblem; if (problem == null) { return; } var front = NonDominatedSelect.GetDominatingVectors(solutions.Select(x => x.Fitness), problem.ReferencePoint.CloneAsArray(), Problem.Maximization, true).ToArray(); if (front.Length == 0) { return; } var bounds = problem.Bounds.CloneAsMatrix(); ResultsCrowding = Crowding.Calculate(front, bounds); ResultsSpacing = Spacing.Calculate(front); ResultsGenerationalDistance = problem.BestKnownFront != null?GenerationalDistance.Calculate(front, problem.BestKnownFront.ToJaggedArray(), 1) : double.NaN; ResultsInvertedGenerationalDistance = problem.BestKnownFront != null?InvertedGenerationalDistance.Calculate(front, problem.BestKnownFront.ToJaggedArray(), 1) : double.NaN; ResultsHypervolume = Hypervolume.Calculate(front, problem.ReferencePoint.CloneAsArray(), Problem.Maximization); ResultsBestHypervolume = Math.Max(ResultsHypervolume, ResultsBestHypervolume); ResultsDifferenceBestKnownHypervolume = ResultsBestKnownHypervolume - ResultsBestHypervolume; ResultsBestHypervolumeDataLine.Values.Add(ResultsBestHypervolume); ResultsHypervolumeDataLine.Values.Add(ResultsHypervolume); ResultsCrowdingDataLine.Values.Add(ResultsCrowding); ResultsGenerationalDistanceDataLine.Values.Add(ResultsGenerationalDistance); ResultsInvertedGenerationalDistanceDataLine.Values.Add(ResultsInvertedGenerationalDistance); ResultsSpacingDataLine.Values.Add(ResultsSpacing); ResultsHypervolumeDifferenceDataLine.Values.Add(ResultsDifferenceBestKnownHypervolume); Problem.Analyze( solutions.Select(x => (Optimization.Individual) new SingleEncodingIndividual(Problem.Encoding, new Scope { Variables = { new Variable(Problem.Encoding.Name, x.Mean) } })).ToArray(), solutions.Select(x => x.Fitness).ToArray(), Results, random); }
public void InvertedGenerationalDistanceTestDifferentSizes() { double[] point = new double[2]; point[0] = 0; point[1] = 0; double[] point1 = new double[2]; point1[0] = 1; point1[1] = 0.5; double[][] front = { point, point1 }; double[] point2 = new double[2]; point2[0] = 1; point2[1] = 0; double[][] referencefront = { point2 }; double dist = InvertedGenerationalDistance.Calculate(front, referencefront, 1); Assert.AreEqual(0.5, dist); }
public void InvertedGenerationalDistanceTestQuadratic() { double[] point = new double[2]; point[0] = 0; point[1] = 0; double[] point1 = new double[2]; point1[0] = 0; point1[1] = 1; double[][] front = { point, point1 }; double[] point2 = new double[2]; point2[0] = 1; point2[1] = 0; double[] point3 = new double[2]; point3[0] = 1; point3[1] = 1; double[][] referencefront = { point2, point3 }; double dist = InvertedGenerationalDistance.Calculate(front, referencefront, 1); Assert.AreEqual(1, dist); }
public IDictionary <string, IDictionary <string, IDictionary <string, List <double> > > > GetIndicators() { GenerateReferenceParetoFronts(); var indicators = new Dictionary <string, IDictionary <string, IDictionary <string, List <double> > > >(); MetricsUtil utils = new MetricsUtil(); for (int i = 0, li = experiment.QualityIndicators.Count; i < li; i++) { string indicatorString = experiment.QualityIndicators[i].ToUpper(); double value = 0; var problems = new Dictionary <string, IDictionary <string, List <double> > >(); indicators.Add(indicatorString, problems); foreach (var problem in experiment.ExperimentProblems) { var algorithm = new Dictionary <string, List <double> >(); problems.Add(problem.Alias, algorithm); var trueFront = utils.ReadFront(problem.ParetoFront); foreach (var algorithmDictionary in problem.AlgorithmDictionary) { var indicator = new List <double>(); algorithm.Add(algorithmDictionary.Key, indicator); foreach (var alg in algorithmDictionary.Value) { var solutionFront = alg.Result.GetObjectives(); switch (indicatorString) { case "HV": HyperVolume hv = new HyperVolume(); value = hv.Hypervolume(solutionFront, trueFront, trueFront[0].Length); break; case "SPREAD": Spread spread = new Spread(); value = spread.CalculateSpread(solutionFront, trueFront, trueFront[0].Length); break; case "IGD": InvertedGenerationalDistance igd = new InvertedGenerationalDistance(); value = igd.CalculateInvertedGenerationalDistance(solutionFront, trueFront, trueFront[0].Length); break; case "EPSILON": Epsilon epsilon = new Epsilon(); value = epsilon.CalcualteEpsilon(solutionFront, trueFront, trueFront[0].Length); break; } indicator.Add(value); } } } } return(indicators); }