Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        public virtual void SetUp()
        {
            Problem = new ArtificialAntProblem
            {
                AppleField = AppleField.ReadFieldFromStrings(Fields.SimpleField)
            };

            Target = new SimpleGeneticAlgorithm(Problem)
            {
                GenerationSize  = 200,
                RandomGenerator = new RandomGenerator(0)
            };
        }
Exemplo n.º 3
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);
        }