public void Resize( int newPopulationSize, ISelectionMethod membersSelector )
{
if ( newPopulationSize < 2 )
throw new ArgumentException( "Too small new population's size was specified." );
if ( newPopulationSize > size )
{
// population is growing, so add new rundom members
// Note: we use population.Count here instead of "size" because
// population may be bigger already after crossover/mutation. So
// we just keep those members instead of adding random member.
int toAdd = newPopulationSize - population.Count;
for ( int i = 0; i < toAdd; i++ )
{
// create new chromosome
IChromosome c = population[0].CreateNew( );
// calculate it's fitness
c.Evaluate( fitnessFunction );
// add it to population
population.Add( c );
}
}
else
{
// do selection
membersSelector.ApplySelection( population, newPopulationSize );
}
size = newPopulationSize;
}