public void SelectChromosomes_NullGeneration_Exception() { var target = new RouletteWheelSelection(); ExceptionAssert.IsThrowing(new ArgumentNullException("generation"), () => { target.SelectChromosomes(2, null); }); }
public void SelectChromosomes_InvalidNumber_Exception() { var target = new RouletteWheelSelection(); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(-1, null); }); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(0, null); }); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(1, null); }); }
public void SelectChromosomes_Generation_ChromosomesSelected() { var target = new RouletteWheelSelection(); var c1 = MockRepository.GeneratePartialMock<ChromosomeBase> (2); c1.Fitness = 0.1; var c2 = MockRepository.GeneratePartialMock<ChromosomeBase>(2); c2.Fitness = 0.5; var c3 = MockRepository.GeneratePartialMock<ChromosomeBase>(2); c3.Fitness = 0; var c4 = MockRepository.GeneratePartialMock<ChromosomeBase>(2); c4.Fitness = 0.7; var generation = new Generation (1, new List<IChromosome> () { c1, c2, c3, c4 }); // Just one selected chromosome is c1. FlowAssert.IsAtLeastOneAttemptOk (100, () => { var actual = target.SelectChromosomes (2, generation); Assert.AreEqual(2, actual.Count); Assert.AreEqual(1, actual.Count(c => c.Fitness == 0.1)); }); // All selected chromosome is c1. FlowAssert.IsAtLeastOneAttemptOk (1000, () => { var actual = target.SelectChromosomes (2, generation); Assert.AreEqual(2, actual.Count); Assert.IsTrue(actual.All(c => c.Fitness == 0.1)); }); // Just one selected chromosome is c2. FlowAssert.IsAtLeastOneAttemptOk(100, () => { var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(2, actual.Count); Assert.AreEqual(1, actual.Count(c => c.Fitness == 0.5)); }); // All selected chromosome is c2. FlowAssert.IsAtLeastOneAttemptOk(1000, () => { var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(2, actual.Count); Assert.IsTrue(actual.All(c => c.Fitness == 0.5)); }); // None selected chromosome is c3. FlowAssert.IsAtLeastOneAttemptOk(100, () => { var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(2, actual.Count); Assert.AreEqual(0, actual.Count(c => c.Fitness == 0.0)); }); // Just one selected chromosome is c4. FlowAssert.IsAtLeastOneAttemptOk(100, () => { var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(2, actual.Count); Assert.AreEqual(1, actual.Count(c => c.Fitness == 0.7)); }); // All selected chromosome is c4. FlowAssert.IsAtLeastOneAttemptOk(1000, () => { var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(2, actual.Count); Assert.IsTrue(actual.All(c => c.Fitness == 0.7)); }); }
public void Start_ParallelManySlowFitness_Timeout() { var taskExecutor = new SmartThreadPoolTaskExecutor(); taskExecutor.MinThreads = 100; taskExecutor.MaxThreads = 100; taskExecutor.Timeout = TimeSpan.FromMilliseconds(1000); var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var target = new GeneticAlgorithm(new Population(100, 150, chromosome), new FitnessStub() { SupportsParallel = true, ParallelSleep = 1500 }, selection, crossover, mutation); target.TaskExecutor = taskExecutor; ExceptionAssert.IsThrowing(new TimeoutException("The fitness evaluation rech the 00:00:01 timeout."), () => { target.Start(); }); Assert.IsFalse(target.IsRunning); Assert.AreEqual(GeneticAlgorithmState.Stopped, target.State); }
public void Start_InvalidFitnessEvaluateResult_Exception() { var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var fitness = MockRepository.GenerateMock<IFitness>(); fitness.Expect(f => f.Evaluate(null)).IgnoreArguments().Return(1.1); var target = new GeneticAlgorithm( new Population(20, 20, chromosome), fitness, selection, crossover, mutation); ExceptionAssert.IsThrowing(new FitnessException(fitness, "The {0}.Evaluate returns a fitness with value 1.1. The fitness value should be between 0.0 and 1.0.".With(fitness.GetType())), () => { target.Start(); }); fitness = MockRepository.GenerateMock<IFitness>(); fitness.Expect(f => f.Evaluate(null)).IgnoreArguments().Return(-0.1); target = new GeneticAlgorithm( new Population(20, 20, chromosome), fitness, selection, crossover, mutation); ExceptionAssert.IsThrowing(new FitnessException(fitness, "The {0}.Evaluate returns a fitness with value -0.1. The fitness value should be between 0.0 and 1.0.".With(fitness.GetType())), () => { target.Start(); }); }