Exemplo n.º 1
0
        static void Main(string[] args)
        {
            var parser              = new TextToSimModelParser();
            var provider            = new FromFileDataProvider();
            var populationGenerator = new PopulationGenerator();
            var selector            = new GreedyItemSelector();
            var mutator             = new Mutator();
            var popLogger           = new FilePopulationLogger();
            var evaluator           = new Evaluator(selector);
            var crossoverSelector   = new RouletteSelector();
            var crossBreeder        = new CrossBreeder();

            var problem = provider.Get();

            var model = parser.Parse(problem.ToArray());

            var simulation = new Simulation(model, mutator, selector, popLogger, evaluator, crossoverSelector,
                                            crossBreeder, populationGenerator);

            simulation.Run(Config.Generations, Config.CrossoverProbability, Config.MutationProbability,
                           Config.Population);

            Console.WriteLine("FINITO");
            Console.Read();
        }
Exemplo n.º 2
0
        protected override void GenerateInitialPopulation()
        {
            var randomPool = PopulationGenerator.GenerateOrderedPopulation(Configuration, PossibleValues);

            GARun.Population     = new OrderedPopulation(Configuration, randomPool, PossibleValues);
            GARun.BestChromosome = GARun.Population.Chromosomes[0];
        }
Exemplo n.º 3
0
        public void ItCanGenerateAGenome()
        {
            var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();
            var chromosome    = GATestHelper.GetTravelingSalesmanChromosome();
            var pool          = PopulationGenerator.GenerateOrderedPopulation(configuration, chromosome.Genes);

            Assert.AreEqual(configuration.PopulationSize, pool.Length);
        }
Exemplo n.º 4
0
        public void ItCanGenerateAnUnorderedPopulation()
        {
            var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();

            configuration.GeneSize = 11;
            var pool = PopulationGenerator.GenerateUnorderedPopulation(configuration, typeof(PhraseGene));

            Assert.AreEqual(configuration.PopulationSize, pool.Length);
        }
    private void CreateRandomPopulation()
    {
        HashSet <int>       populationIndexes = PopulationGenerator.GetRandomPopulation(tileManager.NoOfRows, tileManager.NoOfCols);
        List <TileLocation> population        = new List <TileLocation>();

        foreach (int index in populationIndexes)
        {
            population.Add(tileManager.GetTileLocationFromIndex(index));
        }
        PopulateLife(population);
    }
Exemplo n.º 6
0
        public void ItCanUseUnorderedGenes()
        {
            var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();

            configuration.GeneSize = 11;
            var pool = PopulationGenerator.GenerateUnorderedPopulation(configuration, typeof(PhraseGene));

            var population = new UnorderedPopulation(GATestHelper.GetTravelingSalesmanDefaultConfiguration(), _pool, typeof(PhraseGene));

            Assert.IsNotNull(population.Configuration);
            Assert.IsNotNull(population.Chromosomes);
        }
Exemplo n.º 7
0
        public void ItCanGenerateAnUnorderedPopulationAndRandomizesTheirValues()
        {
            var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();

            configuration.GeneSize = 24;

            var pool = PopulationGenerator.GenerateUnorderedPopulation(configuration, typeof(PhraseGene));

            Assert.AreEqual(configuration.PopulationSize, pool.Length);

            foreach (var chromosome in pool)
            {
                Assert.IsNotNull(chromosome);

                foreach (var gene in chromosome.Genes)
                {
                    var phraseGene = (PhraseGene)gene;
                    Assert.IsNotNull(phraseGene);
                }
            }
        }
Exemplo n.º 8
0
        public static Chromosome[] GetTravelingSalesmanPopulation(GAConfiguration config)
        {
            var chromosome = GetTravelingSalesmanChromosome();

            return(PopulationGenerator.GenerateOrderedPopulation(config, chromosome.Genes));
        }
 private void CreateLoadPopulation()
 {
     PopulateLife(PopulationGenerator.GetPopulationLoaf());
 }
 private void CreateToadPopulation()
 {
     PopulateLife(PopulationGenerator.GetPopulationToad());
 }
        public OptimizationResult Solve(long timeLimitMilliseconds, EventHandler <ProgressReport> progress, EventHandler <string> consoleProgress)
        {
            this.progress        = progress;
            this.consoleProgress = consoleProgress;

            var sw = Stopwatch.StartNew();

            Log("Solving started");
            Log(new ProgressReport(0.01));

            // adjust time limit if unlimited
            if (timeLimitMilliseconds == 0)
            {
                timeLimitMilliseconds = long.MaxValue;
            }

            // init population
            var(population, mapping) = new PopulationGenerator(RandomFactory.Instance).Generate(input, config.PopulationSize, config.MaxNumberOfSantas);
            var decoder = new Decoder(input, mapping);

            // calculate costs
            var result = new OptimizationResult()
            {
                OptimizationInput = input,
            };
            var costCalculator = new CostCalculator(decoder, new SimplifiedOptimizationResult(result));

            costCalculator.RecalculateCost(population);

            // Log characteristics of initial population
            Log($"Genetic Algorithm started with following paramters:{Environment.NewLine}{config}");
            var bestCost = GetMinCost(population);

            Log($"Best solution cost in initial population is: {bestCost}");

            // evolution
            var  evolutionOperation = new EvolutionOperation(config);
            var  repairOperation    = new RepairOperation(input, mapping);
            long generation         = 0;

            for (; generation < config.MaxNumberOfGenerations && sw.ElapsedMilliseconds < timeLimitMilliseconds; generation++)
            {
                // evolve
                evolutionOperation.Evolve(population);

                // repair
                repairOperation.Repair(population);

                // recalculate costs
                costCalculator.RecalculateCost(population);

                // log current solution
                var currentBestCost = GetMinCost(population);
                if (currentBestCost < bestCost)
                {
                    bestCost = currentBestCost;
                    Log($"Found better solution in generation {generation} with cost={bestCost}");
                }
            }

            Log($"Finished at generation {generation} with cost={bestCost}");
            Log($"Current stdev is {StDev(population.Select(i => (double)i.Cost).ToList())}");
            Log(new ProgressReport(0.99));

            // build result
            var bestSolution = population.OrderBy(i => i.Cost).First();

            result.Routes      = decoder.Decode(bestSolution);
            result.ResultState = ResultState.Finished;

            Log(new ProgressReport(1));

            sw.Stop();
            result.TimeElapsed = sw.ElapsedMilliseconds / 1000;
            return(result);
        }
Exemplo n.º 12
0
 protected override void GenerateInitialPopulation()
 {
     var randomPool = PopulationGenerator.GenerateUnorderedPopulation(Configuration, GeneType);
     GARun.Population = new UnorderedPopulation(Configuration, randomPool, GeneType);
     GARun.BestChromosome = GARun.Population.Chromosomes[0];
 }
Exemplo n.º 13
0
        static void Main(string[] args)
        {
            var teams = GetTeams();
            var generator = new FixtureGenerator(teams, 2);

            var seasons = new List<Season>();
            for (int i = 0; i < NumberOfSeasons; i++)
            {
                seasons.Add(generator.GenerateFixtures());
            }

            var criteria = GetCriteria();
            var selectionStrategy = new TournamentSelection<Season, MatchDay>(0.8, criteria);
            var seasonsCrossedOver = new List<Season>(seasons);
            for (int i = 0; i < NumberOfGenerations; i++)
            {
                var simpleCrossover = new SimpleCrossoverStrategy<Season, MatchDay>();
                var populationGenerator = new PopulationGenerator<Season, MatchDay>(seasonsCrossedOver, NumberOfChildrenPerGeneration, simpleCrossover, selectionStrategy);
                seasonsCrossedOver = populationGenerator.Generate();
                string statistics = populationGenerator.GetStatistics(criteria);
                Console.WriteLine("Statistics for generation " + (i + 1));
                Console.WriteLine(statistics);
            }

            var bestSeason = seasonsCrossedOver.OrderByDescending(season => new CriteriaCalculator<Season, MatchDay>(season, criteria).Calculate().Score).FirstOrDefault();

            DisplayFixtures(bestSeason);

            var calculator = new CriteriaCalculator<Season, MatchDay>(bestSeason, criteria);
            var result = calculator.Calculate();
            DisplayResults(result);

            Console.ReadLine();
        }
Exemplo n.º 14
0
 public void ItThrowsAnExceptionWhenConfigurationIsNotPassed()
 {
     var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();
     var chromosome    = GATestHelper.GetTravelingSalesmanChromosome();
     var pool          = PopulationGenerator.GenerateOrderedPopulation(null, chromosome.Genes);
 }
Exemplo n.º 15
0
 public void ItThrowsAnExceptionWhenNoValuesArePassed()
 {
     var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();
     var pool          = PopulationGenerator.GenerateOrderedPopulation(configuration, new TravelingSalesmanGene[1]);
 }
Exemplo n.º 16
0
 public void ItThrowsAnExceptionIfAnOrderedGeneIsUsedToPopulateAnUnorderedPopulation()
 {
     var configuration = GATestHelper.GetTravelingSalesmanDefaultConfiguration();
     var pool          = PopulationGenerator.GenerateUnorderedPopulation(configuration, typeof(TravelingSalesmanGene));
 }