public async Task MultiDemeGeneticAlgorithm_Migrate() { MultiDemeGeneticAlgorithm algorithm = new MultiDemeGeneticAlgorithm { MinimumEnvironmentSize = 3, GeneticEntitySeed = new MockEntity(), PopulationSeed = new SimplePopulation { MinimumPopulationSize = 4 }, FitnessEvaluator = new MockFitnessEvaluator(), MigrantCount = 2, SelectionOperator = new MockSelectionOperator { SelectionBasedOnFitnessType = FitnessType.Scaled }, }; algorithm.SelectionOperator = new MockSelectionOperator(); algorithm.FitnessEvaluator = new MockFitnessEvaluator(); await algorithm.InitializeAsync(); SimplePopulation population1 = (SimplePopulation)algorithm.Environment.Populations[0]; population1.Entities[0].ScaledFitnessValue = 1; population1.Entities[1].ScaledFitnessValue = 5; population1.Entities[2].ScaledFitnessValue = 2; population1.Entities[3].ScaledFitnessValue = 4; SimplePopulation population2 = (SimplePopulation)algorithm.Environment.Populations[1]; population2.Entities[0].ScaledFitnessValue = 6; population2.Entities[1].ScaledFitnessValue = 3; population2.Entities[2].ScaledFitnessValue = 8; population2.Entities[3].ScaledFitnessValue = 7; SimplePopulation population3 = (SimplePopulation)algorithm.Environment.Populations[2]; population3.Entities[0].ScaledFitnessValue = 9; population3.Entities[1].ScaledFitnessValue = 13; population3.Entities[2].ScaledFitnessValue = 10; population3.Entities[3].ScaledFitnessValue = 12; algorithm.Migrate(); Assert.Equal((double)1, population1.Entities[0].ScaledFitnessValue); Assert.Equal((double)2, population1.Entities[1].ScaledFitnessValue); Assert.Equal((double)13, population1.Entities[2].ScaledFitnessValue); Assert.Equal((double)12, population1.Entities[3].ScaledFitnessValue); Assert.Equal((double)6, population2.Entities[0].ScaledFitnessValue); Assert.Equal((double)3, population2.Entities[1].ScaledFitnessValue); Assert.Equal((double)5, population2.Entities[2].ScaledFitnessValue); Assert.Equal((double)4, population2.Entities[3].ScaledFitnessValue); Assert.Equal((double)9, population3.Entities[0].ScaledFitnessValue); Assert.Equal((double)10, population3.Entities[1].ScaledFitnessValue); Assert.Equal((double)8, population3.Entities[2].ScaledFitnessValue); Assert.Equal((double)7, population3.Entities[3].ScaledFitnessValue); }
public void MultiDemeGeneticAlgorithm_Serialization() { MultiDemeGeneticAlgorithm algorithm = new MultiDemeGeneticAlgorithm { MigrantCount = 11, MigrateEachGeneration = 3 }; MultiDemeGeneticAlgorithm result = (MultiDemeGeneticAlgorithm)SerializationHelper.TestSerialization( algorithm, new Type[] { typeof(DefaultTerminator) }); Assert.Equal(algorithm.MigrantCount, result.MigrantCount); Assert.Equal(algorithm.MigrateEachGeneration, result.MigrateEachGeneration); }