public void ConvertPopulation_NextGetsRightPopulation() { var newPopulationEvaluation = new double[] { 2, 2, 2 }; var populationManager = new TestPopulationManager(new double[] { 1, 1, 1 }, c => c.Evaluate()); var engine = new TestGeneticSearchEngineBuilder(3, 10, populationManager).Build(); engine.Next(); var newPopulation = engine.SetCurrentPopulation(newPopulationEvaluation.ToChromosomes("Converted")); newPopulation.Population.GetChromosomes().AssertHasEvaluation(newPopulationEvaluation); newPopulation = engine.Next(); newPopulation.Population.GetChromosomes().AssertHasEvaluation(newPopulationEvaluation); }
public void ConvertPopulationViaManager_CheckWeGetTheRightPopulationAndGeneration() { var generation = 0; var testPopulationManager = new TestPopulationManager(new double[] { 1, 1, 1, 1, 1 }); var populationConverter = A.Fake <IPopulationConverter>(); A.CallTo(() => populationConverter.ConvertPopulation(A <IChromosome[]> ._, A <int> ._, A <IEnvironment> ._)) .ReturnsLazily((IChromosome[] c, int g, IEnvironment e) => { Assert.AreEqual(generation, g, "We got the wrong generation"); foreach (var chromosome in c) { Assert.AreEqual(1, chromosome.Evaluate(), "Got wrong chromosome"); } generation++; return(c); }); var engine = new TestGeneticSearchEngineBuilder(5, 10, testPopulationManager) .AddPopulationConverter(populationConverter).Build(); for (int i = 0; i < 5; i++) { engine.Next(); } }
public void RenewPopulation_CheckPopulationRenewedSentToNextGeneration() { var populationManager = new TestPopulationManager(new double[] { 2, 2 }, c => c.Evaluate() + 1); populationManager.SetPopulationGenerated(new[] { new double[] { 3, 3 } }); var engine = new TestGeneticSearchEngineBuilder(2, int.MaxValue, populationManager).Build(); engine.Next(); engine.RenewPopulation(1); var result = engine.Next(); foreach (var chromosme in result.Population) { Assert.AreEqual(4, chromosme.Evaluation); } }
public void OnNewGenerationEventGetsRightEnvironment() { var counter = 0; var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager).SetCustomChromosomeEvaluator(A.Fake <IChromosomeEvaluator>()).Build(); engine.OnNewGeneration += (p, en) => { AssertIsRightEnvironment(en, counter); counter++; }; engine.Next(); engine.Next(); engine.Next(); Assert.AreNotEqual(0, counter, "SetEnvierment was never called"); }
public void IsCompletedTests() { var generations = 30; var populationManager = new TestPopulationManager(new double[] { 1, 2, 3 }); var searchEngine = new TestGeneticSearchEngineBuilder(3, generations, populationManager) .IncludeAllHistory().Build(); for (int i = 0; i < generations - 1; i++) { var result = searchEngine.Next(); Assert.IsFalse(result.IsCompleted, "Shouldn't have finished yet"); } var finalResult = searchEngine.Next(); Assert.IsTrue(finalResult.IsCompleted); }
public void BestChromosome() { var populationManager = new TestPopulationManager(new double[] { 1, 10, 14, 7, 8, 13, 11, 1, 6, 6 }); var engine = new TestGeneticSearchEngineBuilder(10, 10, populationManager).Build(); var result = engine.Next(); Assert.AreEqual(14, result.BestChromosome.Evaluate()); }
public void ChromosomeEvaluatorGetRightEnvironment() { var counter = 0; var chromosomeEvaluator = A.Fake <IChromosomeEvaluator>(); A.CallTo(() => chromosomeEvaluator.SetEnvierment(A <IEnvironment> ._)).Invokes((IEnvironment e) => { AssertIsRightEnvironment(e, counter); counter++; }); var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager).SetCustomChromosomeEvaluator(chromosomeEvaluator).Build(); engine.Next(); engine.Next(); engine.Next(); Assert.AreNotEqual(0, counter, "SetEnvierment was never called"); }
public void RenewPopulation_BedPercentage_ThrowException(double percentage) { var engine = new TestGeneticSearchEngineBuilder(2, 4, new TestPopulationManager(new double[] { 2, 2 })).Build(); engine.Next(); engine.RenewPopulation(percentage); Assert.Fail("Should have thrown an exception by now"); }
public void IfNoEnvironmentIsSetUseDefaultEnvironment() { var chromosomeEvaluator = A.Fake <IChromosomeEvaluator>(); A.CallTo(() => chromosomeEvaluator.SetEnvierment(A <IEnvironment> ._)).Invokes((IEnvironment e) => Assert.AreEqual(typeof(DefaultEnvironment), e.GetType())); var engine = new TestGeneticSearchEngineBuilder(2, 10, new double[] { 1, 1 }).SetCustomChromosomeEvaluator(chromosomeEvaluator).Build(); engine.Next(); }
public void StopManagerGetsRightEnvironment() { var counter = 0; var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var stopManager = A.Fake <IStopManager>(); A.CallTo(() => stopManager.ShouldStop(A <Population> ._, A <IEnvironment> ._, A <int> ._)).Invokes((Population p, IEnvironment e, int g) => { AssertIsRightEnvironment(e, counter); counter++; }); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager) .SetEnvironment(new DefaultEnvironment()).AddStopManager(stopManager).Build(); engine.Next(); engine.Next(); engine.Next(); Assert.AreNotEqual(0, counter, "SetEnvierment was never called"); }
public void UpdateEnviermentGetRightParameters() { var counter = 0; var environment = A.Fake <IEnvironment>(); A.CallTo(() => environment.UpdateEnvierment(A <IChromosome[]> ._, A <int> ._)).Invokes((IChromosome[] c, int g) => { Assert.AreEqual(counter, g, "Wrong generation provided"); foreach (var chromosome in c) { Assert.AreEqual(counter, chromosome.Evaluate(), "Wrong chromosome provided"); } counter++; }); var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager).SetEnvironment(environment).Build(); engine.Next(); engine.Next(); engine.Next(); Assert.AreNotEqual(0, counter, "UpdateEnvierment was never called"); }
public void ReturnChromosomeEvaluationIfSet() { var evaluation = 8; var chromosomeEvaluator = A.Fake <IChromosomeEvaluator>(); A.CallTo(() => chromosomeEvaluator.Evaluate(A <IChromosome> ._)).Returns(evaluation); var engine = new TestGeneticSearchEngineBuilder(2, 10, new double[] { 1, 1 }).SetCustomChromosomeEvaluator(chromosomeEvaluator).Build(); var result = engine.Next(); foreach (var actualEvaluation in result.Population.GetEvaluations()) { Assert.AreEqual(evaluation, actualEvaluation); } }
public void ResultGetsRightEnvironment() { var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager).SetCustomChromosomeEvaluator(A.Fake <IChromosomeEvaluator>()).Build(); int i; for (i = 0; i < 4; i++) { var result = engine.Next(); AssertIsRightEnvironment(result.Environment, i); } Assert.AreNotEqual(0, i, "SetEnvierment was never called"); }
public void PopulationConverterGetsRightEnvironment() { var counter = 0; var populationManager = new TestPopulationManager(new double[] { 0, 0 }, c => c.Evaluate() + 1); var populationConverter = A.Fake <IPopulationConverter>(); A.CallTo(() => populationConverter.ConvertPopulation(A <IChromosome[]> ._, A <int> ._, A <IEnvironment> ._)).ReturnsLazily((IChromosome[] c, int g, IEnvironment e) => { if (counter > 0) { AssertIsRightEnvironment(e, counter - 1); } counter++; return(c); }); var engine = new TestGeneticSearchEngineBuilder(2, 10, populationManager) .SetEnvironment(new DefaultEnvironment()).AddPopulationConverter(populationConverter).Build(); engine.Next(); engine.Next(); engine.Next(); Assert.AreNotEqual(0, counter, "SetEnvierment was never called"); }
public void RenewPercantagePopulation_PercentageRenewed(double percent) { var populationManager = new TestPopulationManager(new double[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }); populationManager.SetPopulationGenerated(new[] { new double[] { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } }); var engine = new TestGeneticSearchEngineBuilder(10, int.MaxValue, populationManager).Build(); engine.Next(); var result = engine.RenewPopulation(percent); var threeCounters = result.Population.Count(chromosme => chromosme.Evaluation == 3); Assert.AreEqual(percent * 10, threeCounters); }
public void ChangeHistoryLastGeneration_AlgorithmPopulationNotChanged() { var expectedPopulation = new double[] { 1, 1 }; var engine = new TestGeneticSearchEngineBuilder(2, 10, expectedPopulation).IncludeAllHistory().Build(); var fakeChromosome = ChromosomeFactory.CreateChromosome(10, "ChangedChromosome"); var result = engine.Next(); result.History[result.History.Count - 1][0] = fakeChromosome; result = engine.GetCurrentPopulation(); foreach (var chromosome in result.Population.GetChromosomes()) { Assert.AreNotEqual(fakeChromosome, chromosome); } }
public void SetPopulation_PopulationSet() { Utils.RunTimedTest(() => { var newPopulationEvaluation = new double[] { 2, 2, 2 }; var populationManager = new TestPopulationManager(new double[] { 1, 1, 1 }); var engine = new TestGeneticSearchEngineBuilder(3, 10, populationManager).Build(); engine.Next(); var newPopulation = engine.SetCurrentPopulation(newPopulationEvaluation.ToChromosomes("Converted")); newPopulation.Population.GetChromosomes().AssertHasEvaluation(newPopulationEvaluation); newPopulation = engine.GetCurrentPopulation(); newPopulation.Population.GetChromosomes().AssertHasEvaluation(newPopulationEvaluation); }); }
public void ConvertPopulationViaManager_CheckPopulationConverted() { var testPopulationManager = new TestPopulationManager(new double[] { 1, 1, 1, 1, 1 }); var populationConverter = A.Fake <IPopulationConverter>(); var convertedPopulation = new double[] { 2, 2, 2, 2, 2 }; A.CallTo(() => populationConverter.ConvertPopulation(A <IChromosome[]> ._, A <int> ._, A <IEnvironment> ._)) .Returns(convertedPopulation.ToChromosomes("Converted Chromosomes")); var engine = new TestGeneticSearchEngineBuilder(convertedPopulation.Length, 10, testPopulationManager) .AddPopulationConverter(populationConverter).Build(); var result = engine.Next(); for (var i = 0; i < result.Population.GetChromosomes().Length; i++) { Assert.AreEqual(convertedPopulation[i], result.Population.GetChromosomes()[i].Evaluate(), "Wrong chromosome"); } }
public void MultipleConvertPopulationManagers_ManagersCalledAndInOrder() { var testPopulationManager = new TestPopulationManager(new double[] { 1, 1, 1, 1, 1 }); var populationConverter1 = GetOrderedPopulationManager(1); var populationConverter2 = GetOrderedPopulationManager(2); var populationConverter3 = GetOrderedPopulationManager(3); var engine = new TestGeneticSearchEngineBuilder(5, 10, testPopulationManager) .AddPopulationConverter(populationConverter1) .AddPopulationConverter(populationConverter2) .AddPopulationConverter(populationConverter3) .Build(); var result = engine.Next(); foreach (var chromosome in result.Population.GetChromosomes()) { Assert.AreEqual(4, chromosome.Evaluate(), "Ended up with wrong chromosome"); } }
public void AddMultipleConvertPopulationManagers_AllManagersAreCalled() { bool manager1Called = false, manager2Called = false; var testPopulationManager = new TestPopulationManager(new double[] { 1, 1, 1, 1, 1 }); var managers = new[] { A.Fake <IPopulationConverter>(), A.Fake <IPopulationConverter>() }; A.CallTo(() => managers[0].ConvertPopulation(A <IChromosome[]> ._, A <int> ._, A <IEnvironment> ._)) .Invokes((IChromosome[] c, int g, IEnvironment e) => manager1Called = true); A.CallTo(() => managers[1].ConvertPopulation(A <IChromosome[]> ._, A <int> ._, A <IEnvironment> ._)) .Invokes((IChromosome[] c, int g, IEnvironment e) => manager2Called = true); var engine = new TestGeneticSearchEngineBuilder(5, 10, testPopulationManager) .AddPopulationConverters(managers) .Build(); engine.Next(); Assert.IsTrue(manager1Called); Assert.IsTrue(manager2Called); }
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 AddMultiplePopulationRenewalManagers_AllManagersAreCalled() { bool manager1Called = false, manager2Called = false; var testPopulationManager = new TestPopulationManager(new double[] { 1, 1, 1, 1, 1 }); var managers = new[] { A.Fake <IPopulationRenwalManager>(), A.Fake <IPopulationRenwalManager>() }; A.CallTo(() => managers[0].ShouldRenew(A <Population> ._, A <IEnvironment> ._, A <int> ._)) .Invokes((Population p, IEnvironment e, int g) => manager1Called = true); A.CallTo(() => managers[1].ShouldRenew(A <Population> ._, A <IEnvironment> ._, A <int> ._)) .Invokes((Population p, IEnvironment e, int g) => manager2Called = true); using (var engine = new TestGeneticSearchEngineBuilder(5, 10, testPopulationManager) .AddPopulationRenwalManagers(managers) .Build()) { engine.Next(); Assert.IsTrue(manager1Called); Assert.IsTrue(manager2Called); } }
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}"); }