internal List <Individual> GetNewPopulation()
        {
            List <Individual> newPopulation = new List <Individual>();

            foreach (Individual individual in population)
            {
                individual.EvaluateFitness();

                List <Individual> invalidIndividuals = new List <Individual>();

                Individual target = this.SelectDifferenceIndividual(population, invalidIndividuals);
                invalidIndividuals.Add(target);
                Individual differenceIndividual1 = this.SelectDifferenceIndividual(population, invalidIndividuals);
                invalidIndividuals.Add(differenceIndividual1);
                Individual differenceIndividual2 = this.SelectDifferenceIndividual(population, invalidIndividuals);

                Individual trialIndividual = mutationStrategy.GetTrialVector(target, new List <Individual>()
                {
                    differenceIndividual1, differenceIndividual2
                });
                Individual child = crossoverStrategy.Cross(individual, trialIndividual);

                child.EvaluateFitness();

                newPopulation.Add(generationSelectionStrategy.Select(new List <Individual> {
                    individual, child
                }));
            }

            return(newPopulation);
        }