public static int RunGAMapFinder(GAFinderOption option)
        {
            var map = _loadMap(option.MapFileName, option.Diagonal);

            if (map == null)
            {
                return(1);
            }


            var heuristic = (new HeuristicFactory()).GetImplementation(option.Heuristic);

            var mutate    = new MutateFactory().GetImplementation(option.Mutate);
            var crossover = new CrossoverFactory().GetImplementation(option.Crossover);
            var selection = new SelectionFactory().GetImplementation(option.Selection);
            var fitness   = new FitnessFactory().GetImplementation(option.Fitness);

            fitness.Heuristic = heuristic;

            var finder = FinderFactory.GetGAImplementation(
                crossover,
                mutate,
                fitness,
                selection,
                option.Population,
                option.GenerationLimit,
                option.BestToPick
                );



            return(_runFinder(finder, heuristic, map, option.Window, option.NoShowSteps, option.BlockSize, option.UISleep));
        }
Ejemplo n.º 2
0
        /// <param name="fitnessFormula">Fitness formula to be used</param>
        /// <param name="width">Map width</param>
        /// <param name="height">Map height</param>
        /// <param name="populationSize">Size of each generation</param>
        /// <param name="obstacleRate">How much obstacles on map (percent)</param>
        static void Main(Formula fitnessFormula
                         , int width           = 10
                         , int height          = 10
                         , int populationSize  = 50
                         , double obstacleRate = 0.2f)
        {
            var map        = new Map(width, height, obstacleRate);
            var mapTiles   = width + height;
            var maxRoute   = (int)(mapTiles * 1.5);
            var engine     = FitnessFactory.GetEngine(fitnessFormula);
            var population = new Population(populationSize, maxRoute, engine);
            var start      = new Position {
                X = 0, Y = 0
            };
            var destiny = new Position {
                X = width - 1, Y = height - 1
            };

            System.Console.WriteLine($"using fitness: {engine.GetType().FullName}");

            population.Check(start, destiny, map);

            for (int i = 0; i < mapTiles; i++)
            {
                population.Cross();
                population.Mutate(12);
                population.Check(start, destiny, map);
            }
            System.Console.WriteLine(population.Individuals[0]);
            System.Console.WriteLine(map.DrawRoute(population.Individuals[0]));
        }