public void Evolve_ManyGenerations_Fast() { var selection = new EliteSelection(); var crossover = new UniformCrossover(); var mutation = new UniformMutation(true); var chromosome = new AutoConfigChromosome(); var targetChromosome = new TspChromosome(10); var targetFitness = new TspFitness(10, 0, 100, 0, 100); var fitness = new AutoConfigFitness(targetFitness, targetChromosome); fitness.PopulationMinSize = 20; fitness.PopulationMaxSize = 20; fitness.Termination = new TimeEvolvingTermination(TimeSpan.FromSeconds(5)); var population = new Population(10, 10, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.TaskExecutor = new SmartThreadPoolTaskExecutor() { MinThreads = 10, MaxThreads = 20 }; ga.Termination = new GenerationNumberTermination(2); ga.Start(); Assert.NotNull(ga.BestChromosome); }
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("GeneticSharp - ConsoleApp"); Console.ResetColor(); Console.WriteLine("Select the sample:"); Console.WriteLine("1) TSP (Travelling Salesman Problem)"); Console.WriteLine("2) Ghostwriter"); var sampleNumber = Console.ReadLine(); ISampleController sampleController = null; switch (sampleNumber) { case "1": sampleController = new TspSampleController(20); break; case "2": sampleController = new GhostwriterSampleController(); break; default: return; } var selection = new EliteSelection(); var crossover = new UniformCrossover(); var mutation = new UniformMutation(true); var fitness = sampleController.CreateFitness(); var population = new Population(50, 70, sampleController.CreateChromosome()); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.MutationProbability = 0.4f; ga.Termination = new FitnessStagnationTermination(100); ga.TaskExecutor = new SmartThreadPoolTaskExecutor() { MinThreads = 25, MaxThreads = 50 }; ga.GenerationRan += delegate { Console.CursorLeft = 0; Console.CursorTop = 5; var bestChromosome = ga.Population.BestChromosome; Console.WriteLine("Generations: {0}", ga.Population.GenerationsNumber); Console.WriteLine("Fitness: {0:n4}", bestChromosome.Fitness); Console.WriteLine("Time: {0}", ga.TimeEvolving); sampleController.Draw(bestChromosome); }; try { ga.Start(); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(); Console.WriteLine("Error: {0}", ex.Message); Console.ResetColor(); Console.ReadKey(); return; } Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(); Console.WriteLine("Evolved."); Console.ResetColor(); Console.ReadKey(); }
public void Cross_ParentsWithTwoGenesProbabilityDiffPercents_DiffChildren() { var chromosome1 = MockRepository.GenerateStub<ChromosomeBase>(4); chromosome1.ReplaceGenes(0, new Gene[] { new Gene(1), new Gene(2), new Gene(3), new Gene(4), }); chromosome1.Expect(c => c.CreateNew()).Return(MockRepository.GenerateStub<ChromosomeBase>(4)); var chromosome2 = MockRepository.GenerateStub<ChromosomeBase>(4); chromosome2.ReplaceGenes(0, new Gene[] { new Gene(5), new Gene(6), new Gene(7), new Gene(8) }); chromosome2.Expect(c => c.CreateNew()).Return(MockRepository.GenerateStub<ChromosomeBase>(4)); var parents = new List<IChromosome>() { chromosome1, chromosome2 }; var mock = new MockRepository(); var rnd = mock.StrictMock<IRandomization>(); using (mock.Ordered()) { rnd.Expect(r => r.GetDouble()).Return(0); rnd.Expect(r => r.GetDouble()).Return(0.49); rnd.Expect(r => r.GetDouble()).Return(0.5); rnd.Expect(r => r.GetDouble()).Return(1); } RandomizationProvider.Current = rnd; // 50% var target = new UniformCrossover(0.5f); mock.ReplayAll(); var actual = target.Cross(parents); Assert.AreEqual(2, actual.Count); Assert.AreEqual(4, actual[0].Length); Assert.AreEqual(4, actual[1].Length); Assert.AreEqual(1, actual[0].GetGene(0).Value); Assert.AreEqual(2, actual[0].GetGene(1).Value); Assert.AreEqual(7, actual[0].GetGene(2).Value); Assert.AreEqual(8, actual[0].GetGene(3).Value); Assert.AreEqual(5, actual[1].GetGene(0).Value); Assert.AreEqual(6, actual[1].GetGene(1).Value); Assert.AreEqual(3, actual[1].GetGene(2).Value); Assert.AreEqual(4, actual[1].GetGene(3).Value); // 70% mock = new MockRepository(); rnd = mock.StrictMock<IRandomization>(); using (mock.Ordered()) { rnd.Expect(r => r.GetDouble()).Return(0); rnd.Expect(r => r.GetDouble()).Return(0.49); rnd.Expect(r => r.GetDouble()).Return(0.5); rnd.Expect(r => r.GetDouble()).Return(1); } RandomizationProvider.Current = rnd; mock.ReplayAll(); target = new UniformCrossover(0.7f); actual = target.Cross(parents); Assert.AreEqual(2, actual.Count); Assert.AreEqual(4, actual[0].Length); Assert.AreEqual(4, actual[1].Length); Assert.AreEqual(1, actual[0].GetGene(0).Value); Assert.AreEqual(2, actual[0].GetGene(1).Value); Assert.AreEqual(3, actual[0].GetGene(2).Value); Assert.AreEqual(8, actual[0].GetGene(3).Value); Assert.AreEqual(5, actual[1].GetGene(0).Value); Assert.AreEqual(6, actual[1].GetGene(1).Value); Assert.AreEqual(7, actual[1].GetGene(2).Value); Assert.AreEqual(4, actual[1].GetGene(3).Value); }