private void CreateFiles(int generation, int individual, Individual genes) { // assign robot name var robotId = RobotFileCreator.GetRobotId(generation, individual); // create dir path and directory var robotDirectoryPath = Path.Combine(_directoryPath, robotId); Directory.CreateDirectory(robotDirectoryPath); var dirPathFull = Path.Combine(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName), robotDirectoryPath); var dllFileCreator = new DllFileCreator(); var battleFileCreator = new BattleFileCreator(); var robotFileCreator = new RobotFileCreator(); var stateCreator = new RobotStateFileCreator(); var dnaTranslator = new DnaToCode(genes); //In later iteration, replace with Factory // create files, compile robot robotFileCreator.CreateRobotFiles(robotDirectoryPath, robotId, dnaTranslator); stateCreator.CreateStateFiles(robotDirectoryPath, robotId, dnaTranslator); dllFileCreator.CreateDll(_dllDirectoryPath, robotDirectoryPath, robotId, dnaTranslator); battleFileCreator.CreateBattleFiles(robotDirectoryPath, NameSpace, robotId); // run battles RoboCodeMatchHandler.RunBattles(dirPathFull); }
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++; } }