public void SetResult(GeneticSearchResult result) { generationLabel.Text = result.Generations.ToString(); searchTimeLabel.Text = result.SearchTime.ToString(); environmentLabel.Text = result.Environment?.ToString(); var displayChromosomesCollection = new BindingList <DisplayChromosome>(); foreach (var population in result.Population) { displayChromosomesCollection.Add(new DisplayChromosome(population.Chromosome, population.Evaluation)); } chromosomesView.DataSource = displayChromosomesCollection; chromosomesView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; if (result.Environment == null) { environmentPanel.Hide(); } else { environmentPanel.Show(); } Refresh(); }
public static void AssertAreTheSame(GeneticSearchResult result1, GeneticSearchResult result2) { Assert.AreEqual(result1.Generations, result2.Generations, "Different number of generations"); Assert.AreEqual(result1.IsCompleted, result2.IsCompleted, "Different 'IsComplate' value"); Assert.AreEqual(result1.SearchTime, result2.SearchTime, "Different searchTime"); result1.Population.AssertIsSame(result2.Population); for (int i = 0; i < result1.History.Count; i++) { result1.History[i].AssertIsSame(result2.History[i]); } }
public static GeneticSearchResult Run(this GeneticSearchEngine engine, RunType runType) { if (runType == RunType.Run) { return(engine.Run()); } GeneticSearchResult result = null; while (result == null || !result.IsCompleted) { result = engine.Next(); } return(result); }
public void NextGetsRightGenerationsTest() { var population = new[] { new double[] { 1, 1, 1 }, new double[] { 2, 2, 2 }, new double[] { 2, 3, 2 } }; var populationManager = new TestPopulationManager(population); var searchEngine = new TestGeneticSearchEngineBuilder(population[0].Length, population.Length, populationManager) .IncludeAllHistory().Build(); var actualPopulation = new List <IChromosome[]>(); GeneticSearchResult result = null; while (result == null || !result.IsCompleted) { result = searchEngine.Next(); actualPopulation.Add(result.Population.GetChromosomes()); } Assert.AreEqual(3, result.Generations, "We should have ran for 3 generations"); actualPopulation.AssertHasEvaluation(population); }
public void SearchTimeWithNextTest() { var generations = 50; var populationManager = new TestPopulationManager(new double[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }, millisecondsPerGeneration: 10); var engine = new TestGeneticSearchEngineBuilder(10, generations, populationManager).Build(); var stopwatch = new Stopwatch(); stopwatch.Start(); GeneticSearchResult result = null; while (result == null || !result.IsCompleted) { result = engine.Next(); } stopwatch.Stop(); Assert.IsTrue(stopwatch.Elapsed.TotalMilliseconds * 0.90 < stopwatch.Elapsed.TotalMilliseconds, $"time is too short. {nameof(stopwatch.Elapsed)} = {stopwatch.Elapsed}; {nameof(result.SearchTime)} = {result.SearchTime.TotalMilliseconds}"); Assert.IsTrue(stopwatch.Elapsed.TotalMilliseconds * 1.1 > stopwatch.Elapsed.TotalMilliseconds, $"time is too long. {nameof(stopwatch.Elapsed)} = {stopwatch.Elapsed}; {nameof(result.SearchTime)} = {result.SearchTime.TotalMilliseconds}"); }
static void Main(string[] args) { Console.WriteLine("Started!"); IMutationManager <string> mutationManager = new ExchangeMutationManager <string>(); IEvaluator evaluator = new DistanceEvaluator(locations); ICrossoverManager crossoverManager = new OrderCrossover <string>(mutationManager, evaluator); IPopulationGenerator populationGenerator = new AllElementsVectorChromosomePopulationGenerator <string>(cities, mutationManager, evaluator); GeneticSearchEngine engine = new GeneticSearchEngineBuilder(POPULATION_SIZE, GENERATIONS, crossoverManager, populationGenerator) .SetMutationProbability(0.1).SetElitePercentage(0.02).Build(); engine.OnNewGeneration += (Population p, IEnvironment e) => PrintBestChromosome(p); GeneticSearchResult result = engine.Run(); Console.WriteLine("Finished!"); Console.WriteLine(result.BestChromosome + ": " + distanceCalclator.GetDistance(result.BestChromosome)); Console.ReadLine(); }