private IList <Individual> generateNewPopulation(int populationSize, double crossoverProb, int tournamentSize)
        {
            IList <Individual> newPopulation = new List <Individual>(populationSize);

            //newPopulation.Add(BestIndividual);
            while (newPopulation.Count < populationSize)
            {
                Individual firstParent  = selection.PerformSelection(population, tournamentSize);
                Individual secondParent = selection.PerformSelection(population, tournamentSize);

                if (randomGenerator.NextDouble() < crossoverProb)
                {
                    IList <Individual> children = crossover.DoCrossover(firstParent, secondParent);
                    newPopulation = newPopulation.Concat(children).ToList();
                }
                else
                {
                    newPopulation.Add(new Individual {
                        Order = firstParent.Order
                    });
                    newPopulation.Add(new Individual {
                        Order = secondParent.Order
                    });
                }
            }

            return(newPopulation);
        }