Example #1
0
        /// Arguments
        /// [0] - Map Info Path
        /// [1] - Map starting position file path
        /// [1] - [Optional] Seed for initial individual state
        static void Main(string[] args)
        {
            var parameters = ParameterParser.GetSimulationParameters(args);

            var ga = new GeneralGA.GeneralGA();

            ga.CreateIndividual = CreateNeighbour;

            ga.CrossoverEnabled = true;

            ga.MutationEnabled = true;

            ga.MutateParentsAsChildren = true;

            ga.CrossoverIndividuals = DoCrossover;

            ga.PopulationCount = Configuration.IsRace ? 1 : 500;

            ga.SpawnPopulation();

            List <Parameters> maps = GetMaps();

            if (Configuration.IsRace)
            {
                var raceCompetitors = new List <ICarAI>()
                {
                    new HumanCar(),
                    new CarAi(new int[] { 12, 12, 12, 4 }, Random, null)
                };

                StartSimulation(parameters, raceCompetitors.OfType <ICarAI>());
                int generation = 0;
                while (true)
                {
                    EvaluateAgents(raceCompetitors, maps);
                    generation++;
                }
            }
            else
            {
                StartSimulation(parameters, ga.GetPopulation().OfType <ICarAI>());

                int generation = 0;
                while (true)
                {
                    EvaluateAgents(ga.GetPopulation().OfType <ICarAI>(), maps);
                    ga.DoGeneration();

                    if (generation % 20 == 0)
                    {
                        var existingFittest = ga.GetFittestIndividual();
                        var localOffspring  = ga.PerformLocalSearch(500);
                        EvaluateAgents(localOffspring.OfType <ICarAI>(), maps);
                        ga.ReplaceIndividual(existingFittest, localOffspring.OrderByDescending(o => o.GetFitness()).First());
                    }

                    generation++;
                }
            }
        }
Example #2
0
        private static List <Parameters> GetMaps()
        {
            var parameters = new List <Parameters>();

            var simDataBase = Directory.GetParent(Directory.GetParent(Directory.GetParent(Directory.GetCurrentDirectory()).FullName).FullName) + "\\SimData";

            var directories = Directory.GetDirectories($"{simDataBase}\\Maps");

            foreach (var directory in directories.Where(d => !d.Contains('_')))
            {
                var mapName = directory.Split('\\').Last();
                parameters.Add(ParameterParser.GetSimulationParameters(new string[] { $"SimData\\Maps\\{mapName}" }));
            }


            return(parameters);
        }
Example #3
0
        static void Main(string[] args)
        {
            var mapMaker = new MapMaker(ParameterParser.GetSimulationParameters(args));

            mapMaker.Run();
        }