private static async Task RunAlgorithmAsync() { SimpleGeneticAlgorithm algorithm = new SimpleGeneticAlgorithm { MinimumEnvironmentSize = 1, FitnessEvaluator = new FitnessEvaluator { EvaluationMode = FitnessEvaluationMode.Minimize, TargetBinary = "010101010101" }, GeneticEntitySeed = new BinaryStringEntity { MaximumStartingLength = 10, MinimumStartingLength = 5 }, PopulationSeed = new SimplePopulation { MinimumPopulationSize = 100 }, SelectionOperator = new FitnessProportionateSelectionOperator { SelectionBasedOnFitnessType = FitnessType.Raw }, CrossoverOperator = new VariableSinglePointCrossoverOperator { CrossoverRate = 0.8 }, MutationOperator = new BinaryStringMutationOperator { MutationRate = 0.01 }, Terminator = new FitnessTargetTerminator { FitnessTarget = 0, FitnessType = FitnessType.Raw } }; algorithm.GenerationCreated += Algorithm_GenerationCreated; await algorithm.InitializeAsync(); await algorithm.RunAsync(); IEnumerable <GeneticEntity> top10Entities = algorithm.Environment.Populations[0].Entities.GetEntitiesSortedByFitness( FitnessType.Raw, FitnessEvaluationMode.Minimize) .Reverse() .Take(10); Console.WriteLine(); Console.WriteLine("Top 10 entities:"); foreach (GeneticEntity entity in top10Entities) { Console.WriteLine("Bits: " + entity.Representation + ", Fitness: " + entity.RawFitnessValue); } Console.ReadLine(); }
public virtual void SetUp() { Problem = new ArtificialAntProblem { AppleField = AppleField.ReadFieldFromStrings(Fields.SimpleField) }; Target = new SimpleGeneticAlgorithm(Problem) { GenerationSize = 200, RandomGenerator = new RandomGenerator(0) }; }
public ViewModel() { SimpleGeneticAlgorithm algorithm = new SimpleGeneticAlgorithm { MinimumEnvironmentSize = 3, FitnessEvaluator = new FitnessEvaluator(), GeneticEntitySeed = new BinaryStringEntity { MinimumStartingLength = 20, MaximumStartingLength = 20, IsFixedSize = true }, PopulationSeed = new SimplePopulation { MinimumPopulationSize = 100 }, SelectionOperator = new FitnessProportionateSelectionOperator { SelectionBasedOnFitnessType = FitnessType.Raw }, CrossoverOperator = new SinglePointCrossoverOperator { CrossoverRate = 0.8 }, MutationOperator = new UniformBitMutationOperator { MutationRate = 0.01 }, //Terminator = new GenerationalTerminator //{ // FinalGeneration = 5 //} }; algorithm.Metrics.Add(new MeanFitness()); algorithm.Metrics.Add(new MaximumFitness()); algorithm.GenerationCreated += Algorithm_GenerationCreated; this.Context = new ExecutionContext(algorithm); }
public async Task SimpleGeneticAlgorithm_CreateNextGeneration_NullPopulation() { SimpleGeneticAlgorithm algorithm = new SimpleGeneticAlgorithm(); PrivateObject accessor = new PrivateObject(algorithm); await Assert.ThrowsAsync <ArgumentNullException>(() => (Task)accessor.Invoke("CreateNextGenerationAsync", (Population)null)); }
public async Task SimpleGeneticAlgorithm_CreateNextGeneration_Async() { SimpleGeneticAlgorithm algorithm = new SimpleGeneticAlgorithm { FitnessEvaluator = new MockFitnessEvaluator(), GeneticEntitySeed = new MockEntity(), PopulationSeed = new SimplePopulation(), ElitismStrategy = new MockElitismStrategy { ElitistRatio = .1 }, SelectionOperator = new MockSelectionOperator { SelectionBasedOnFitnessType = FitnessType.Scaled }, CrossoverOperator = new MockCrossoverOperator { CrossoverRate = 1 }, MutationOperator = new MockMutationOperator { MutationRate = 1 } }; algorithm.ElitismStrategy = new MockElitismStrategy { ElitistRatio = .1 }; algorithm.ElitismStrategy.Initialize(algorithm); algorithm.SelectionOperator = new MockSelectionOperator { SelectionBasedOnFitnessType = FitnessType.Scaled }; algorithm.SelectionOperator.Initialize(algorithm); algorithm.CrossoverOperator = new MockCrossoverOperator { CrossoverRate = 1 }; algorithm.CrossoverOperator.Initialize(algorithm); algorithm.MutationOperator = new MockMutationOperator { MutationRate = 1 }; algorithm.MutationOperator.Initialize(algorithm); PrivateObject accessor = new PrivateObject(algorithm); SimplePopulation population = GetPopulation(algorithm, 10); List <GeneticEntity> originalEntities = new List <GeneticEntity>(population.Entities); int prevPopCount = population.Entities.Count; await(Task) accessor.Invoke("CreateNextGenerationAsync", population); // Find the number of entities in the new population that were in the original population int actualElitistEntitiesCount = population.Entities.Count(e => originalEntities.Contains(e)); Assert.Equal(1, actualElitistEntitiesCount); Assert.Equal(1, ((MockElitismStrategy)algorithm.ElitismStrategy).GetElitistGeneticEntitiesCallCount); Assert.Equal(1, ((MockSelectionOperator)algorithm.SelectionOperator).DoSelectCallCount); Assert.Equal(4, ((MockCrossoverOperator)algorithm.CrossoverOperator).DoCrossoverCallCount); Assert.Equal(9, ((MockMutationOperator)algorithm.MutationOperator).DoMutateCallCount); Assert.Equal(prevPopCount, population.Entities.Count); }