Exemple #1
0
        public async Task GeneticEnvironment_EvaluateFitness_Async()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                GeneticEntitySeed = new MockEntity(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                SelectionOperator = new MockSelectionOperator
                {
                    SelectionBasedOnFitnessType = FitnessType.Scaled
                }
            };

            algorithm.FitnessEvaluator = new MockFitnessEvaluator();
            algorithm.FitnessEvaluator.Initialize(algorithm);
            algorithm.SelectionOperator = new MockSelectionOperator();
            algorithm.SelectionOperator.Initialize(algorithm);

            GeneticEnvironment environment = new GeneticEnvironment(algorithm);

            MockPopulation population1 = GetPopulation(algorithm);
            MockPopulation population2 = GetPopulation(algorithm);

            environment.Populations.Add(population1);
            environment.Populations.Add(population2);

            await environment.EvaluateFitnessAsync();

            VerifyFitnessEvaluation(population1);
            VerifyFitnessEvaluation(population2);
        }
Exemple #2
0
        public async Task ElitismStrategy_GetElitistGeneticEntities()
        {
            double           elitismRatio         = .1;
            int              totalGeneticEntities = 100;
            GeneticAlgorithm algorithm            = GetGeneticAlgorithm(elitismRatio);
            await algorithm.InitializeAsync();

            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            for (int i = 0; i < totalGeneticEntities; i++)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                population.Entities.Add(entity);
            }
            algorithm.Environment.Populations.Add(population);
            MockElitismStrategy strategy = (MockElitismStrategy)algorithm.ElitismStrategy;

            strategy.Initialize(algorithm);

            IList <GeneticEntity> geneticEntities = strategy.GetEliteEntities(population);

            Assert.Equal(Convert.ToInt32(Math.Round(elitismRatio * totalGeneticEntities)), geneticEntities.Count);
        }
        public void MinimumFitness_GetResultValue_WithScaling()
        {
            MinimumFitness metric = new MinimumFitness();

            metric.Initialize(new MockGeneticAlgorithm {
                FitnessScalingStrategy = new MockFitnessScalingStrategy()
            });

            MockPopulation population = new MockPopulation();

            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 11
            });
            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 10
            });
            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 15
            });
            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 13
            });
            object result = metric.GetResultValue(population);

            Assert.Equal((double)10, result);
        }
Exemple #4
0
        public void Population_Serialization()
        {
            MockPopulation population = new MockPopulation
            {
                MinimumPopulationSize = 10,
                Index = 3,
            };

            population.Entities.Add(new MockEntity());

            PrivateObject privObj = new PrivateObject(population, new PrivateType(typeof(Population)));

            privObj.SetField("rawMean", (double)1);
            privObj.SetField("rawStandardDeviation", (double)2);
            privObj.SetField("rawMax", (double)3);
            privObj.SetField("rawMin", (double)4);

            MockPopulation result = (MockPopulation)SerializationHelper.TestSerialization(population, new Type[]
            {
                typeof(MockEntity)
            });

            PrivateObject resultPrivObj = new PrivateObject(result, new PrivateType(typeof(Population)));

            Assert.Equal(population.MinimumPopulationSize, result.MinimumPopulationSize);
            Assert.Equal(population.Index, result.Index);
            Assert.IsType <MockEntity>(result.Entities[0]);

            Assert.Equal((double)1, resultPrivObj.GetField("rawMean"));
            Assert.Equal((double)2, resultPrivObj.GetField("rawStandardDeviation"));
            Assert.Equal((double)3, resultPrivObj.GetField("rawMax"));
            Assert.Equal((double)4, resultPrivObj.GetField("rawMin"));
        }
Exemple #5
0
        public async Task Population_Initialize_Async()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                FitnessEvaluator  = new MockFitnessEvaluator(),
                SelectionOperator = new MockSelectionOperator(),
                GeneticEntitySeed = new MockEntity
                {
                    TestProperty = 3
                },
                PopulationSeed = new MockPopulation
                {
                    MinimumPopulationSize = 10
                }
            };

            algorithm.GeneticEntitySeed.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            await population.InitializeAsync();

            Assert.Equal(algorithm.PopulationSeed.MinimumPopulationSize, population.Entities.Count);
            Assert.Equal(3, ((MockEntity)population.Entities[0]).TestProperty);
        }
Exemple #6
0
        public void BoltzmannSelectionOperator_Select()
        {
            double           initialTemp = 10;
            GeneticAlgorithm algorithm   = GetMockAlgorithm(initialTemp);

            FakeBoltzmannSelectionOperator op = (FakeBoltzmannSelectionOperator)algorithm.SelectionOperator;

            op.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);

            MockEntity entity1 = new MockEntity();

            entity1.Initialize(algorithm);
            population.Entities.Add(entity1);

            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            population.Entities.Add(entity2);

            IEnumerable <GeneticEntity> entities = op.SelectEntities(2, population);

            Assert.NotNull(entities);
            Assert.True(entities.Count() > 0, "An entity should have been selected.");
        }
        public void FitnessStandardDeviation_GetResultValue_WithScaling()
        {
            FitnessStandardDeviation metric    = new FitnessStandardDeviation();
            MockGeneticAlgorithm     algorithm = new MockGeneticAlgorithm {
                FitnessScalingStrategy = new MockFitnessScalingStrategy()
            };
            MeanFitness meanFitness = new MeanFitness();

            meanFitness.GetResults(0).Add(new MetricResult(0, 0, (double)12, meanFitness));
            algorithm.Metrics.Add(meanFitness);
            metric.Initialize(algorithm);

            MockPopulation population = new MockPopulation();

            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 10
            });
            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 11
            });
            population.Entities.Add(new MockEntity {
                ScaledFitnessValue = 15
            });
            object result = metric.GetResultValue(population);

            Assert.Equal(2.16025, Math.Round((double)result, 5));
        }
Exemple #8
0
        private static void VerifyFitnessEvaluation(MockPopulation population)
        {
            Assert.Equal("5", ((MockEntity)population.Entities[0]).Identifier);
            Assert.Equal("2", ((MockEntity)population.Entities[1]).Identifier);

            Assert.Equal((double)5, population.Entities[0].RawFitnessValue);
            Assert.Equal((double)2, population.Entities[1].RawFitnessValue);
        }
Exemple #9
0
        public void PopulationSizeTest_Valid()
        {
            MockPopulation target = new MockPopulation();
            int            val    = 100;

            target.MinimumPopulationSize = val;
            Assert.Equal(val, target.MinimumPopulationSize);
        }
        public void SelectionOperator_SelectEntities_NullSelectionResult()
        {
            MockSelectionOperator2 op         = new MockSelectionOperator2();
            MockPopulation         population = new MockPopulation();

            population.Entities.Add(new MockEntity());
            Assert.Throws <InvalidOperationException>(() => op.SelectEntities(0, population));
        }
Exemple #11
0
        public void ElitismStrategy_NullPopulation()
        {
            MockElitismStrategy3 strategy   = new MockElitismStrategy3();
            MockPopulation       population = new MockPopulation();

            population.Entities.Add(new MockEntity());
            Assert.Throws <ArgumentNullException>(() => strategy.GetEliteEntities(population));
            Assert.True(strategy.GetEliteGeneticEntitiesCoreCalled);
        }
Exemple #12
0
        public void ElitismStrategy_GetElitistGeneticEntities_EmptyPopulation()
        {
            GeneticAlgorithm    algorithm = GetGeneticAlgorithm(.1);
            MockElitismStrategy strategy  = new MockElitismStrategy();

            strategy.Initialize(algorithm);
            MockPopulation pop = new MockPopulation();

            pop.Initialize(algorithm);
            Assert.Throws <ArgumentException>(() => strategy.GetEliteEntities(pop));
        }
Exemple #13
0
        public void FitnessScalingStrategy_Scale_EmptyPopulation()
        {
            GeneticAlgorithm            algorithm = GetAlgorithm();
            FakeFitnessScalingStrategy2 strategy  = new FakeFitnessScalingStrategy2();

            strategy.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            Assert.Throws <ArgumentException>(() => strategy.Scale(population));
        }
        public void SelectionOperator_Select_EmptyPopulation()
        {
            GeneticAlgorithm      algorithm = GetAlgorithm();
            MockSelectionOperator op        = new MockSelectionOperator();

            op.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            Assert.Throws <ArgumentException>(() => op.SelectEntities(1, population));
        }
        public void MinimumFitness_GetResultValue_NoScaling()
        {
            MinimumFitness metric = new MinimumFitness();

            metric.Initialize(new MockGeneticAlgorithm());

            MockPopulation population         = new MockPopulation();
            PrivateObject  populationAccessor = new PrivateObject(population, new PrivateType(typeof(Population)));

            populationAccessor.SetField("rawMin", (double)2);
            object result = metric.GetResultValue(population);

            Assert.Equal((double)2, result);
        }
        public void FitnessStandardDeviation_GetResultValue_NoScaling()
        {
            FitnessStandardDeviation metric = new FitnessStandardDeviation();

            metric.Initialize(new MockGeneticAlgorithm());

            MockPopulation population         = new MockPopulation();
            PrivateObject  populationAccessor = new PrivateObject(population, new PrivateType(typeof(Population)));

            populationAccessor.SetField("rawStandardDeviation", (double)18);
            object result = metric.GetResultValue(population);

            Assert.Equal((double)18, result);
        }
Exemple #17
0
        public void Population_Ctor()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new MockEntity(),
                PopulationSeed    = new MockPopulation(),
            };
            Population population = new MockPopulation();

            population.Initialize(algorithm);
            PrivateObject accessor = new PrivateObject(population);

            Assert.Same(algorithm, accessor.GetProperty("Algorithm"));
        }
Exemple #18
0
        private static MockPopulation GetPopulation(GeneticAlgorithm algorithm)
        {
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            MockEntity entity1 = new MockEntity();

            entity1.Initialize(algorithm);
            entity1.Identifier = "5";
            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            entity2.Identifier = "2";
            population.Entities.Add(entity1);
            population.Entities.Add(entity2);
            return(population);
        }
Exemple #19
0
        public void BoltzmannSelectionOperator_Select_Overflow()
        {
            double initialTemp = .0000001;
            MockGeneticAlgorithm           algorithm = GetMockAlgorithm(initialTemp);
            FakeBoltzmannSelectionOperator op        = new FakeBoltzmannSelectionOperator();

            op.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            entity.ScaledFitnessValue = 1;
            population.Entities.Add(entity);
            Assert.Throws <OverflowException>(() => op.SelectEntities(1, population));
        }
Exemple #20
0
        public void FitnessScalingStrategy_Scale()
        {
            GeneticAlgorithm            algorithm = GetAlgorithm();
            FakeFitnessScalingStrategy2 strategy  = new FakeFitnessScalingStrategy2();

            strategy.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            population.Entities.Add(entity);
            strategy.Scale(population);

            Assert.True(strategy.OnScaleCalled, "ScaleCore was not called.");
        }
        public void BestMaximumFitness_GetResultValue_AllNegative()
        {
            MockGeneticAlgorithm algorithm      = new MockGeneticAlgorithm();
            MaximumFitness       maximumFitness = new MaximumFitness();

            algorithm.Metrics.Add(maximumFitness);

            ObservableCollection <MetricResult> population1Results = maximumFitness.GetResults(0);

            population1Results.Add(new MetricResult(0, 0, (double)-5, maximumFitness));

            BestMaximumFitness target = new BestMaximumFitness();

            target.Initialize(algorithm);

            MockPopulation population = new MockPopulation
            {
                Index = 0
            };
            object result = target.GetResultValue(population);

            Assert.Equal((double)-5, result);

            population1Results.Add(new MetricResult(1, 0, (double)-6, maximumFitness));

            result = target.GetResultValue(population);
            Assert.Equal((double)-5, result);

            ObservableCollection <MetricResult> population2Results = maximumFitness.GetResults(1);

            population2Results.Add(new MetricResult(0, 2, (double)-10, maximumFitness));

            MockPopulation population2 = new MockPopulation
            {
                Index = 1
            };

            result = target.GetResultValue(population2);
            Assert.Equal((double)-10, result);

            population2Results.Add(new MetricResult(1, 1, (double)-4, maximumFitness));

            result = target.GetResultValue(population2);
            Assert.Equal((double)-4, result);
        }
        public void SelectionOperator_Select()
        {
            GeneticAlgorithm      algorithm = GetAlgorithm();
            MockSelectionOperator op        = new MockSelectionOperator();

            op.Initialize(algorithm);
            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            GeneticEntity entity1 = new MockEntity();

            entity1.Initialize(algorithm);
            GeneticEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            population.Entities.Add(entity1);
            population.Entities.Add(entity2);
            IList <GeneticEntity> selectedEntities = op.SelectEntities(1, population);

            Assert.Same(entity1, selectedEntities[0]);
            Assert.Equal(1, op.DoSelectCallCount);
        }
Exemple #23
0
        public void PopulationSizeTest_Invalid()
        {
            MockPopulation target = new MockPopulation();

            Assert.Throws <ValidationException>(() => target.MinimumPopulationSize = 0);
        }
Exemple #24
0
        private static async Task TestEvaluateFitnessAsync(bool useScaling, bool useMetric)
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                SelectionOperator = new MockSelectionOperator(),
                GeneticEntitySeed = new MockEntity(),
                PopulationSeed    = new MockPopulation(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
            };

            if (useScaling)
            {
                algorithm.FitnessScalingStrategy = new FakeFitnessScalingStrategy();
            }

            if (useMetric)
            {
                algorithm.Metrics.Add(new MockMetric());
            }

            algorithm.FitnessEvaluator = new MockFitnessEvaluator();
            algorithm.FitnessEvaluator.Initialize(algorithm);
            if (useScaling)
            {
                algorithm.FitnessScalingStrategy = new FakeFitnessScalingStrategy();
                algorithm.FitnessScalingStrategy.Initialize(algorithm);
            }

            MockPopulation population = new MockPopulation();

            population.Initialize(algorithm);
            MockEntity entity1 = new MockEntity();

            entity1.Initialize(algorithm);
            entity1.Identifier = "123";
            population.Entities.Add(entity1);

            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            entity2.Identifier = "456";
            population.Entities.Add(entity2);

            await population.EvaluateFitnessAsync();

            Assert.Equal((double)123, entity1.RawFitnessValue);
            Assert.Equal((double)456, entity2.RawFitnessValue);

            if (useScaling)
            {
                Assert.Equal(entity1.RawFitnessValue - 1, entity1.ScaledFitnessValue);
                Assert.Equal(entity2.RawFitnessValue - 1, entity2.ScaledFitnessValue);
            }
            else
            {
                Assert.Equal(entity1.RawFitnessValue, entity1.ScaledFitnessValue);
                Assert.Equal(entity2.RawFitnessValue, entity2.ScaledFitnessValue);
            }

            if (!useMetric && !useScaling)
            {
                Assert.False(population.RawMax.HasValue, "RawMax not set correctly.");
                Assert.False(population.RawMin.HasValue, "RawMax not set correctly.");
                Assert.False(population.RawMean.HasValue, "RawMean not set correctly.");
                Assert.False(population.RawStandardDeviation.HasValue, "RawStandardDeviation not set correctly.");
            }
            else
            {
                Assert.Equal(entity2.RawFitnessValue, population.RawMax);
                Assert.Equal(entity1.RawFitnessValue, population.RawMin);
                Assert.Equal((entity1.RawFitnessValue + entity2.RawFitnessValue) / 2, population.RawMean);
            }
        }
Exemple #25
0
        public void Population_Ctor_NullAlgorithm()
        {
            MockPopulation population = new MockPopulation();

            Assert.Throws <ArgumentNullException>(() => population.Initialize(null));
        }