public void Evolve_ManyGenerations_Fast() { int numberOfCities = 40; var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new TworsMutation(); var chromosome = new TspChromosome(numberOfCities); var fitness = new TspFitness (numberOfCities, 0, 1000, 0, 1000); var population = new Population (40, 40, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Start(); var firstDistance = ((TspChromosome)ga.Population.BestChromosome).Distance; ga.Termination = new GenerationNumberTermination (1001); TimeAssert.LessThan(3000, () => { ga.Start(); }); var lastDistance = ((TspChromosome)ga.Population.BestChromosome).Distance; Assert.Less(lastDistance, firstDistance); }
public void Evolve_ManyGenerations_Fast() { int movesAhead = 10; int boardSize = 10; var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new TworsMutation(); var chromosome = new CheckersChromosome(movesAhead, boardSize); var fitness = new CheckersFitness(new CheckersBoard(boardSize)); var population = new Population(40, 40, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.GenerationRan += delegate { if (ga.Population.GenerationsNumber % 100 == 0) { fitness.Update(ga.Population.BestChromosome as CheckersChromosome); } }; ga.Start(); var firstFitness = ((CheckersChromosome)ga.Population.BestChromosome).Fitness; ga.Termination = new GenerationNumberTermination(2001); TimeAssert.LessThan(100000, () => { ga.Start(); }); var lastFitness = ((CheckersChromosome)ga.Population.BestChromosome).Fitness; Assert.LessOrEqual(firstFitness, lastFitness); }
public void Mutate_ValidChromosome_ExchangeGenes() { var target = new TworsMutation(); var chromosome = MockRepository.GenerateStub<ChromosomeBase>(4); chromosome.ReplaceGenes(0, new Gene[] { new Gene(1), new Gene(2), new Gene(3), new Gene(4), }); var rnd = MockRepository.GenerateMock<IRandomization>(); rnd.Expect(r => r.GetUniqueInts(2, 0, 4)).Return(new int[] { 0, 2 }); RandomizationProvider.Current = rnd; target.Mutate(chromosome, 1); Assert.AreEqual(4, chromosome.Length); Assert.AreEqual(3, chromosome.GetGene(0).Value); Assert.AreEqual(2, chromosome.GetGene(1).Value); Assert.AreEqual(1, chromosome.GetGene(2).Value); Assert.AreEqual(4, chromosome.GetGene(3).Value); rnd.VerifyAllExpectations(); chromosome.VerifyAllExpectations(); }