#region License Information
/* HeuristicLab
* Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace HeuristicLab.Problems.TestFunctions.MultiObjective.Tests {
[TestClass]
public class CrowdingTest {
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestEmptyFront() {
double[][] front = { };
Crowding.Calculate(front, null);
}
[TestMethod]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestSamePoint() {
double[] point = new double[2];
point[0] = 0.5;
point[1] = 0.5;
double[] point1 = new double[2];
point1[0] = 0.5;
point1[1] = 0.5;
double[][] front = { point, point1 };
double dist = Crowding.Calculate(front, new double[,] { { 0, 1 }, { 0, 1 } });
Assert.AreEqual(double.PositiveInfinity, dist);
}
[TestMethod]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestSinglePoint() {
double[] point = new double[2];
point[0] = 0;
point[1] = 0;
double[][] front = { point };
double dist = Crowding.Calculate(front, new double[,] { { 0, 1 }, { 0, 1 } });
Assert.AreEqual(double.PositiveInfinity, dist);
}
[TestMethod]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestDiagonal() {
double[] point = new double[2];
point[0] = 0;
point[1] = 0;
double[] point1 = new double[2];
point1[0] = 0.5;
point1[1] = 0.5;
double[] point2 = new double[2];
point2[0] = 1;
point2[1] = 1;
double[][] front = { point, point1, point2 };
double dist = Crowding.Calculate(front, new double[,] { { 0, 1 }, { 0, 1 } });
Assert.AreEqual(2, dist);
}
[TestMethod]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestDiamond() {
double[] point = new double[2];
point[0] = 0;
point[1] = 0;
double[] point1 = new double[2];
point1[0] = 1;
point1[1] = 1.5;
double[] point2 = new double[2];
point2[0] = 3;
point2[1] = 0.5;
double[] point3 = new double[2];
point3[0] = 4;
point3[1] = 2;
double[][] front = { point, point1, point2, point3 };
double dist = Crowding.Calculate(front, new double[,] { { 0, 4 }, { 0, 2 } });
Assert.AreEqual(1.5, dist);
}
///
/// deltoid with 4 points of the 1-unit-square and the northeastern point at 4,4
///
///
[TestMethod]
[TestCategory("Problems.TestFunctions.MultiObjective")]
[TestProperty("Time", "short")]
public void CrowdingTestDeltoid() {
double[] point = new double[2];
point[0] = 0;
point[1] = 0;
double[] point1 = new double[2];
point1[0] = 0.00000001; //points should not be exactly equal because sorting behaviour could change result
point1[1] = 1.00000001;
double[] point2 = new double[2];
point2[0] = 1;
point2[1] = 0;
double[] point3 = new double[2];
point3[0] = 4;
point3[1] = 4;
double[][] front = { point, point1, point2, point3, };
double dist = Crowding.Calculate(front, new double[,] { { 0, 4 }, { 0, 4 } });
Assert.AreEqual(1.25, dist);
}
}
}