public void Execute(Logger.Logger logger) { void logGeneration(int generation, double bestFitness, double averageFitness, double worstFitness) { logger.LogGeneticPeriodicTabu(generation, bestFitness, averageFitness, worstFitness, null); } void logOutro(List <double> bestFitnesses) { logger.LogOutro(bestFitnesses); } void logTabuCycle(int tabuCycle, double bestFitness, double currentFitness) { logger.LogGeneticPeriodicTabu(tabuCycle, bestFitness, null, null, currentFitness); } var populations = new List <List <IIndividual> >(); for (var i = 0; i < Parameters.GeneticParameters.NumAlgorithmIterations; i++) { populations.Add(Genetic.InitializePopulation().Select(indiv => { return(Tabu.Execute(logTabuCycle, logOutro, indiv)[0]); }).ToList()); } Genetic.Execute(logGeneration, logOutro, Parameters.TabuParameters.NumTabuSearches, populations); }