public void SimpleLogConfigAndDump() { var c = new RouteConfiguration() .AddAction(new ActionSequenceConfiguration("Sequence") .AddAction(new WriteActionConfiguration("n°1") { FileName = @"File n°1" }) .AddAction(new WriteActionConfiguration("n°2") { FileName = @"File n°2" })); Assert.That(_host.ObtainRoute(""), Is.SameAs(FinalRoute.Empty)); Assert.That(_host.ConfigurationAttemptCount, Is.EqualTo(0)); Assert.That(_host.SetConfiguration(TestHelper.ConsoleMonitor, c)); Assert.That(_host.SuccessfulConfigurationCount, Is.EqualTo(1)); _defaultRoute = _host.ObtainRoute(null); Assert.That(_defaultRoute.Actions.Length, Is.EqualTo(1)); Assert.That(_defaultRoute.Actions[0], Is.InstanceOf <TestSequence>()); var f1 = File.AllFiles["File n°1"]; var f2 = File.AllFiles["File n°2"]; Assert.That(f1.IsOpened && f2.IsOpened); _defaultRoute.Run(0); CheckContent(f1, "0"); CheckContent(f2, "0"); _defaultRoute.Run(1); _defaultRoute.Run(2); CheckContent(f1, "0", "1", "2"); CheckContent(f2, "0", "1", "2"); var c2 = new RouteConfiguration() .AddAction(new WriteActionConfiguration("n°1") { FileName = @"File n°1" }); Assert.That(_host.SetConfiguration(TestHelper.ConsoleMonitor, c2)); Assert.That(_host.ConfigurationAttemptCount, Is.EqualTo(2)); Assert.That(_host.SuccessfulConfigurationCount, Is.EqualTo(2)); var r2 = _host.ObtainRoute(null); Assert.That(r2, Is.Not.SameAs(_defaultRoute)); _defaultRoute = r2; _defaultRoute.Run(3); _defaultRoute.Run(4); CheckContent(f1, "0", "1", "2", "3", "4"); CheckContent(f2, "0", "1", "2"); Assert.That(ActivityMonitor.CriticalErrorCollector.ToArray().Length, Is.EqualTo(0)); }
/// <summary> /// Metoda rozwiązująca problem komiwojażera algorytmem genetycznym /// </summary> /// <param name="numOfGenerations"></param> public void StartGeneticAlgorithm(int numOfGenerations) { CreatePopulation(); numberOfGenerations = 0; while (numberOfGenerations <= numOfGenerations) { int populationCount = Population.Count(); int numOfChildrenToBorn = 50; Individual firstParent; Individual secondParent; for (int i = 0; i < numOfChildrenToBorn; i++) { do { firstParent = new Individual(Population.ElementAt(randomGenerator.Next(0, populationCount - 1))); secondParent = new Individual(Population.ElementAt(randomGenerator.Next(0, populationCount - 1))); } while (firstParent.Equals(secondParent) && firstParent.IsItParent() && secondParent.IsItParent()); // sprawdzamy czy dwa wylosowane osobniki nie są takie same // oraz sprawdzamy czy są rodzicami crossProbability = (float)randomGenerator.NextDouble(); if (crossProbability >= 0.6) { Individual child = new Individual(PMXChildCreation(firstParent, secondParent)); Population.Add(child); } } SetAllAsParents(Population); mutationProbability = (float)randomGenerator.NextDouble(); if (mutationProbability > 0.01 && mutationProbability < 0.1) { var individualToMutate = Population.ElementAt(randomGenerator.Next(0, Population.Count)); Mutate(individualToMutate); } PopulationSelection(Population); numberOfGenerations++; } var bestIndividual = Population.First(); if (bestIndividual.PathCost < BestCycleCost) { for (int i = 0; i < numOfCities; i++) { FinalRoute.Push(bestIndividual.Path[i]); } BestCycleCost = bestIndividual.PathCost; } }