public void Start() { _executor = new SmartThreadPoolTaskExecutor() { MinThreads = 1 }; _executor.MaxThreads = _config.MaxThreads > 0 ? _config.MaxThreads : 8; //create the population IList <IChromosome> list = new List <IChromosome>(); var geneConfig = GeneFactory.Load(); for (int i = 0; i < _config.PopulationSize; i++) { list.Add(new Chromosome(true, geneConfig)); } int max = _config.PopulationSizeMaximum < _config.PopulationSize ? _config.PopulationSize * 2 : _config.PopulationSizeMaximum; _population = new PreloadPopulation(_config.PopulationSize, max, list); _population.GenerationStrategy = new PerformanceGenerationStrategy(); //create the GA itself var ga = new GeneticAlgorithm(_population, _fitness, new TournamentSelection(), _config.OnePointCrossover ? new OnePointCrossover() : new TwoPointCrossover(), new UniformMutation(true)); //subscribe to events ga.GenerationRan += GenerationRan; ga.TerminationReached += TerminationReached; ga.TaskExecutor = _executor; ga.Termination = new OrTermination(new FitnessStagnationTermination(_config.StagnationGenerations), new GenerationNumberTermination(_config.Generations)); ga.Reinsertion = new ElitistReinsertion(); //run the GA ga.Start(); }
public override IChromosome CreateNew() { var config = GeneFactory.Load(); return(new Chromosome(false, config)); }