예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }