internal static void RunGeneticAlgorithm(int fromSavedGeneration) { int generationCount; Population myPop; if (fromSavedGeneration == 0) { RoboCodeMatchHandler.ClearResultsFolder(); generationCount = 0; myPop = new Population(PopulationSize, true, generationCount); } else { generationCount = fromSavedGeneration; Console.WriteLine("Generation: " + generationCount); var individualGenes = PopulationFileHandler.ReadFile(fromSavedGeneration); Console.WriteLine("IndivGenesLength: " + individualGenes.Length); var individuals = new Individual[individualGenes.Length]; for (var i = 0; i < individualGenes.Length; i++) { individuals[i] = new Individual(generationCount, i); } myPop = new Population(individuals); } while (true) //No need for an exit condition in this Genetic Algorithm { myPop = EvolvePopulation(myPop, generationCount); var fittestBot = myPop.GetFittest(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("Generation: "); Console.ForegroundColor = ConsoleColor.White; Console.Write(generationCount); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write(", \t Fittest score: "); Console.ForegroundColor = ConsoleColor.White; Console.Write(fittestBot.GetFitness()); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write(", \t Fittest Bot ID: "); Console.ForegroundColor = ConsoleColor.White; Console.Write(fittestBot.RobotId + "\n"); generationCount++; } }
internal FileCreator(int generation, Population population) { _dllDirectoryPath = Path.Combine(RootFolderName, DllFolderName); _directoryPath = Path.Combine(RootFolderName, GetRobotFolderName(generation)); Directory.CreateDirectory(_directoryPath); Directory.CreateDirectory(_dllDirectoryPath); Directory.CreateDirectory(Path.Combine(RootFolderName, PopulationsFolderName)); PopulationFileHandler.CreateFile(generation, population); var tasks = new Task[population.Size()]; for (var i = 0; i < population.Size(); i++) { //Console.WriteLine($"Starting bot {i}"); var individual = i; tasks[individual] = Task.Factory.StartNew(() => CreateFiles(generation, individual, population.GetIndividual(individual))); } Task.WaitAll(tasks); // wait for all tasks to finish Console.WriteLine($"Finished generation {generation:D4}"); }