public void CalculateAndAssignFitness_PartialPopulation_CalculatesFitnessesCorrectly() { var nsga2 = new Nsga2(minimise, 20, new FastNonDominatedSort()); nsga2.CalculateAndAssignFitness(individuals); foreach (var ind in individuals) { Assert.True(ind.Fitness >= ind.SolutionVector.Aggregate((x, y) => x + y + 2)); } }
public void CalculateAndAssignFitness_PopulationSize6_CalculatesFitnessesCorrectly() { var nsga2 = new Nsga2(minimise, 6, new FastNonDominatedSort()); nsga2.CalculateAndAssignFitness(individuals); Assert.Equal(1.0, individuals.ElementAt(0).Fitness); Assert.Equal(2.0, individuals.ElementAt(1).Fitness); Assert.Equal(1.0, individuals.ElementAt(2).Fitness); Assert.True(individuals.ElementAt(3).Fitness > 2 && individuals.ElementAt(0).Fitness < 3); // This one is in the middle Assert.Equal(1.0, individuals.ElementAt(4).Fitness); Assert.Equal(3.0, individuals.ElementAt(5).Fitness); Assert.Equal(2.0, individuals.ElementAt(6).Fitness); Assert.Equal(1.0, individuals.ElementAt(7).Fitness); Assert.Equal(3.0, individuals.ElementAt(8).Fitness); }
public void CalculateAndAssignFitness_PopulationSize7_CalculatesFitnessesCorrectly() { var nsga2 = new Nsga2(minimise, 7, new FastNonDominatedSort()); nsga2.CalculateAndAssignFitness(individuals); // Population size is exactly same size as front 1 + front 2. Assert.Equal(1.0, individuals.ElementAt(0).Fitness); Assert.Equal(2.0, individuals.ElementAt(1).Fitness); Assert.Equal(1.0, individuals.ElementAt(2).Fitness); Assert.Equal(2.0, individuals.ElementAt(3).Fitness); Assert.Equal(1.0, individuals.ElementAt(4).Fitness); Assert.Equal(3.0, individuals.ElementAt(5).Fitness); Assert.Equal(2.0, individuals.ElementAt(6).Fitness); Assert.Equal(1.0, individuals.ElementAt(7).Fitness); Assert.Equal(3.0, individuals.ElementAt(8).Fitness); }