Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Logger logger = new Logger();

            logger.Log("Simulation, initialization");

            Console.WriteLine("initialize Simulation using following values:");

            GeneticParameters options = new GeneticParameters()
            {
                MaxPopulation        = 200,
                MaxGeneration        = 100,
                MutationChance       = 0.7,
                StartAcceptanceRatio = 0.2
            };

            /*{
             *  maxPopulation = 200,
             *  maxGeneration = 30,
             *  startAcceptanceRatio = 0.6,
             *  gridSize = 20,
             *  mutationChance = 0.2
             * }*/


            logger.Log(options.ToString());

            var startTime = DateTimeOffset.UtcNow;

            try
            {
                GeneticTerrainGenerator generator = new GeneticTerrainGenerator(options, logger);

                logger.Log("Begin Simulation");

                //THAR BE DRAGONZ
                Algorithm best = generator.RunSimulation();

                logger.Log("End Simulation");
                logger.Log(best.ToString());

                /*
                 * logger.Log("Rendering...");
                 * Source.Render(
                 *  Source.CreatePictureFromGraph(20, 20, best.RootNode)
                 *  , 20, 20);
                 */
            }
            finally
            {
                var elapsedTime = DateTimeOffset.UtcNow.Subtract(startTime);
                logger.Log($"{nameof(elapsedTime)}:{elapsedTime}");

                logger.Print();
            }

            Console.Read();
        }
Exemplo n.º 2
0
 private void CreateGeneticParameters()
 {
     geneticParameters = new GeneticParameters
     {
         generationsCount = 100,
         populationSize   = 100,
         crossoverProb    = 0.8f,
         mutationProb     = 0.5f,
         selectionType    = SelectionType.TournamentSelection,
         tournamentSize   = 5
     };
 }
Exemplo n.º 3
0
        private static GeneticRunner RunnerSetup(CommandLineOptions commandLineOptions, string source)
        {
            var @params = new GeneticParameters
            {
                SequenceLength = 5,
                MinPopulation  = 20,
                MaxPopulation  = 30,
                Generations    = 50,
                MetricsKind    = commandLineOptions.ChoosenMetrics,
                Source         = source
            };
            var runner = new GeneticRunner(@params);

            return(runner);
        }
Exemplo n.º 4
0
        public IIndividual <GeneKey, GeneValue>[] Selection(GeneticParameters geneticParameters)
        {
            switch (geneticParameters.selectionType)
            {
            case SelectionType.TournamentSelection:
                return(TournamentSelection((int)(geneticParameters.crossoverProb * populationSize),
                                           geneticParameters.tournamentSize));

            case SelectionType.RouletteSelection:
                return(RouletteSelection((int)(geneticParameters.crossoverProb * populationSize)));

            default:
                return(OptimizedRouletteSelection((int)(geneticParameters.crossoverProb * populationSize)));
            }
        }
Exemplo n.º 5
0
        public void NelderOtherHeuristics()
        {
            int thinningPeriod = 4;
            int treeCount      = 75;

            #if DEBUG
            treeCount = 25;
            #endif

            PlotsWithHeight      nelder        = PublicApi.GetNelder();
            OrganonConfiguration configuration = OrganonTest.CreateOrganonConfiguration(new OrganonVariantNwo());
            configuration.Treatments.Harvests.Add(new ThinByIndividualTreeSelection(thinningPeriod));
            OrganonStand stand = nelder.ToOrganonStand(configuration, 20, 130.0F, treeCount);
            stand.PlantingDensityInTreesPerHectare = TestConstant.NelderReplantingDensityInTreesPerHectare;

            Objective landExpectationValue = new Objective()
            {
                IsLandExpectationValue = true,
                PlanningPeriods        = 9
            };
            Objective volume = new Objective()
            {
                PlanningPeriods = landExpectationValue.PlanningPeriods
            };
            HeuristicParameters defaultParameters = new HeuristicParameters()
            {
                UseScaledVolume = false
            };

            GeneticParameters geneticParameters = new GeneticParameters(treeCount)
            {
                PopulationSize     = 7,
                MaximumGenerations = 5,
                UseScaledVolume    = defaultParameters.UseScaledVolume
            };
            GeneticAlgorithm genetic        = new GeneticAlgorithm(stand, configuration, landExpectationValue, geneticParameters);
            TimeSpan         geneticRuntime = genetic.Run();

            GreatDeluge deluge = new GreatDeluge(stand, configuration, volume, defaultParameters)
            {
                RainRate        = 5,
                LowerWaterAfter = 9,
                StopAfter       = 10
            };
            deluge.RandomizeTreeSelection(TestConstant.Default.SelectionPercentage);
            TimeSpan delugeRuntime = deluge.Run();

            RecordTravel recordTravel = new RecordTravel(stand, configuration, landExpectationValue, defaultParameters)
            {
                StopAfter = 10
            };
            recordTravel.RandomizeTreeSelection(TestConstant.Default.SelectionPercentage);
            TimeSpan recordRuntime = recordTravel.Run();

            SimulatedAnnealing annealer = new SimulatedAnnealing(stand, configuration, volume, defaultParameters)
            {
                Iterations = 100
            };
            annealer.RandomizeTreeSelection(TestConstant.Default.SelectionPercentage);
            TimeSpan annealerRuntime = annealer.Run();

            TabuParameters tabuParameters = new TabuParameters()
            {
                UseScaledVolume = defaultParameters.UseScaledVolume
            };
            TabuSearch tabu = new TabuSearch(stand, configuration, landExpectationValue, tabuParameters)
            {
                Iterations = 7,
                //Jump = 2,
                MaximumTenure = 5
            };
            tabu.RandomizeTreeSelection(TestConstant.Default.SelectionPercentage);
            TimeSpan tabuRuntime = tabu.Run();

            ThresholdAccepting thresholdAcceptor = new ThresholdAccepting(stand, configuration, volume, defaultParameters);
            thresholdAcceptor.IterationsPerThreshold.Clear();
            thresholdAcceptor.Thresholds.Clear();
            thresholdAcceptor.IterationsPerThreshold.Add(10);
            thresholdAcceptor.Thresholds.Add(1.0F);
            thresholdAcceptor.RandomizeTreeSelection(TestConstant.Default.SelectionPercentage);
            TimeSpan acceptorRuntime = thresholdAcceptor.Run();

            RandomGuessing random = new RandomGuessing(stand, configuration, volume, defaultParameters)
            {
                Iterations = 4
            };
            TimeSpan randomRuntime = random.Run();

            configuration.Treatments.Harvests.Clear();
            configuration.Treatments.Harvests.Add(new ThinByPrescription(thinningPeriod));
            PrescriptionParameters prescriptionParameters = new PrescriptionParameters()
            {
                Maximum         = 60.0F,
                Minimum         = 50.0F,
                Step            = 10.0F,
                UseScaledVolume = defaultParameters.UseScaledVolume
            };
            PrescriptionEnumeration enumerator = new PrescriptionEnumeration(stand, configuration, landExpectationValue, prescriptionParameters);
            TimeSpan enumerationRuntime        = enumerator.Run();

            // heuristics assigned to volume optimization
            this.Verify(deluge);
            this.Verify(annealer);
            this.Verify(thresholdAcceptor);
            this.Verify(random);

            // heuristics assigned to net present value optimization
            this.Verify(genetic);
            this.Verify(enumerator);
            this.Verify(recordTravel);
            this.Verify(tabu);

            HeuristicSolutionDistribution distribution = new HeuristicSolutionDistribution(1, thinningPeriod, treeCount);
            distribution.AddRun(annealer, annealerRuntime, defaultParameters);
            distribution.AddRun(deluge, delugeRuntime, defaultParameters);
            distribution.AddRun(thresholdAcceptor, acceptorRuntime, defaultParameters);
            distribution.AddRun(genetic, geneticRuntime, defaultParameters);
            distribution.AddRun(enumerator, enumerationRuntime, defaultParameters);
            distribution.AddRun(recordTravel, recordRuntime, defaultParameters);
            distribution.AddRun(tabu, tabuRuntime, defaultParameters);
            distribution.AddRun(random, randomRuntime, defaultParameters);
            distribution.OnRunsComplete();
        }