Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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++;
            }
        }