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(); }
private void CreateGeneticParameters() { geneticParameters = new GeneticParameters { generationsCount = 100, populationSize = 100, crossoverProb = 0.8f, mutationProb = 0.5f, selectionType = SelectionType.TournamentSelection, tournamentSize = 5 }; }
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); }
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))); } }
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(); }