public async Task FitnessTargetTerminator_IsComplete_RawFitness()
        {
            double           fitnessTarget = 15;
            GeneticAlgorithm algorithm     = GetAlgorithm(fitnessTarget, FitnessType.Raw);
            await algorithm.InitializeAsync();

            FitnessTargetTerminator terminator = (FitnessTargetTerminator)algorithm.Terminator;

            terminator.Initialize(algorithm);

            // Check with no populations
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            MockEntity entity = new MockEntity();

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

            population.Initialize(algorithm);
            population.Entities.Add(entity);
            algorithm.Environment.Populations.Add(population);

            // Check with a population with one entity
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            PrivateObject accessor = new PrivateObject(entity, new PrivateType(typeof(GeneticEntity)));

            accessor.SetField("rawFitnessValue", 15);
            Assert.True(terminator.IsComplete(), "A entity does have the fitness target.");
        }
        public async Task FitnessTargetTerminator_IsComplete_ScaledFitness()
        {
            double           fitnessTarget = 15;
            GeneticAlgorithm algorithm     = GetAlgorithm(fitnessTarget, FitnessType.Scaled);
            await algorithm.InitializeAsync();

            FitnessTargetTerminator terminator = (FitnessTargetTerminator)algorithm.Terminator;

            terminator.Initialize(algorithm);

            // Check with no populations
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            MockEntity entity = new MockEntity();

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

            population.Initialize(algorithm);
            population.Entities.Add(entity);
            algorithm.Environment.Populations.Add(population);

            // Check with a population with one entity
            Assert.False(terminator.IsComplete(), "No genetic entities have the fitness target.");

            entity.ScaledFitnessValue = 15;
            Assert.True(terminator.IsComplete(), "A entity does have the fitness target.");
        }
Beispiel #3
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);
        }
Beispiel #4
0
        public void TestChangingSceneGraphForEntity()
        {
            var entity = new MockEntity(0);

            entity.Initialize();

            var root1 = new SceneGraphRoot();
            var root2 = new SceneGraphRoot();

            root1.AddAsync(entity);
            entity.Parent.Should().Be(root1);

            new Action(() => root1.AddAsync(entity)).Should().Throw <NotSupportedException>();

            root1.RemoveAsync(entity);
            entity.Parent.Should().Be(root1, "because RemoveScheduled will only be called in the next update");
            root1.Update(new GameTime());
            entity.Parent.Should().BeNull("because update now removed the entity from the scene");

            root2.AddAsync(entity);
            entity.Parent.Should().Be(root2);

            root1.IsRegistered(entity).Should().BeFalse("because it will only be registered in the update call");
            new Action(() => entity.ChangeParent(root1)).Should().Throw <NotSupportedException>();
            // call update so entity is actually registered with the root2
            root2.Update(new GameTime());

            // only now is the alternative method possible
            entity.ChangeParent(root1);
            entity.Parent.Should().Be(root1);
        }
        public void CrossoverOperator_Crossover()
        {
            double crossoverRate            = 1; // force crossover to occur
            MockGeneticAlgorithm  algorithm = GetGeneticAlgorithm(crossoverRate);
            FakeCrossoverOperator op        = new FakeCrossoverOperator {
                CrossoverRate = crossoverRate
            };

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

            entity1.Initialize(algorithm);
            entity1.Age        = 2;
            entity1.Identifier = "1";
            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            entity2.Age        = 5;
            entity2.Identifier = "3";
            IList <GeneticEntity> geneticEntities = op.Crossover(new GeneticEntity[] { entity1, entity2 }).ToList();

            Assert.NotSame(entity1, geneticEntities[1]);
            Assert.NotSame(entity2, geneticEntities[0]);
            Assert.Equal(entity1.Identifier, ((MockEntity)geneticEntities[1]).Identifier);
            Assert.Equal(entity2.Identifier, ((MockEntity)geneticEntities[0]).Identifier);

            Assert.Equal(0, geneticEntities[0].Age);
            Assert.Equal(0, geneticEntities[1].Age);
        }
        public void ExponentialScalingStrategy_Scale()
        {
            GeneticAlgorithm algorithm = GetAlgorithm(2);

            ExponentialScalingStrategy target = (ExponentialScalingStrategy)algorithm.FitnessScalingStrategy;

            target.Initialize(algorithm);
            SimplePopulation population = new SimplePopulation();

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

            entity1.Initialize(algorithm);
            PrivateObject entity1Accessor = new PrivateObject(entity1, new PrivateType(typeof(GeneticEntity)));

            entity1Accessor.SetField("rawFitnessValue", 5);
            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            PrivateObject entity2Accessor = new PrivateObject(entity2, new PrivateType(typeof(GeneticEntity)));

            entity2Accessor.SetField("rawFitnessValue", 7);
            population.Entities.Add(entity1);
            population.Entities.Add(entity2);
            target.Scale(population);

            Assert.Equal((double)25, entity1.ScaledFitnessValue);
            Assert.Equal((double)49, entity2.ScaledFitnessValue);
        }
Beispiel #7
0
        public void ChildParentRelationBetweenEntityAndGraphShouldExist()
        {
            var root = new SceneGraphRoot();

            root.Parent.Should().BeNull();
            var node = new MockEntity(0);

            node.Parent.Should().BeNull();

            node.Initialize();
            node.Initialized.Should().BeTrue();

            root.AddAsync(node);
            node.Parent.Should().Be(root, "because add scheduled added the node right away as it was already initialized");

            const int sleep    = 1000;
            var       lazyNode = new MockEntity(sleep);

            lazyNode.Initialized.Should().BeFalse();
            var before = DateTime.Now;

            root.AddAsync(lazyNode);
            lazyNode.Initialized.Should().BeFalse();
            lazyNode.Parent.Should().Be(root);
            // wait longer than init would take
            while (DateTime.Now < before + TimeSpan.FromMilliseconds(sleep + 1000))
            {
                Thread.Sleep(10);
            }
            // assert that it was infact executed
            lazyNode.Initialized.Should().BeTrue();
        }
        public void EntityCollection_SortByFitness()
        {
            ObservableCollection <GeneticEntity> geneticEntities = new ObservableCollection <GeneticEntity>();
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                PopulationSeed    = new MockPopulation(),
                GeneticEntitySeed = new MockEntity()
            };

            for (int i = 9; i >= 0; i--)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                entity.ScaledFitnessValue = Convert.ToDouble(i);
                geneticEntities.Add(entity);
            }

            GeneticEntity[] sortedEntities = geneticEntities.GetEntitiesSortedByFitness(FitnessType.Scaled, FitnessEvaluationMode.Maximize).ToArray();
            for (int i = 0; i < 10; i++)
            {
                Assert.Equal(Convert.ToDouble(i), sortedEntities[i].ScaledFitnessValue);
            }

            sortedEntities = geneticEntities.GetEntitiesSortedByFitness(FitnessType.Scaled, FitnessEvaluationMode.Minimize).ToArray();
            int entityIndex = 0;

            for (int i = 9; i >= 0; i--)
            {
                Assert.Equal(Convert.ToDouble(i), sortedEntities[entityIndex].ScaledFitnessValue);
                entityIndex++;
            }
        }
Beispiel #9
0
        public void Entity_CopyTo()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new MockEntity()
            };
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            entity.Age = 10;
            entity.ScaledFitnessValue = 10;
            PrivateObject accessor = new PrivateObject(entity, new PrivateType(typeof(GeneticEntity)));

            accessor.SetField("rawFitnessValue", 123);

            MockEntity newEntity = new MockEntity();

            newEntity.Initialize(algorithm);
            entity.CopyTo(newEntity);

            Assert.Equal(entity.Age, newEntity.Age);
            Assert.Equal(entity.RawFitnessValue, newEntity.RawFitnessValue);
            Assert.Equal(entity.ScaledFitnessValue, newEntity.ScaledFitnessValue);
        }
Beispiel #10
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.");
        }
        private static GeneticEntity AddEntity(GeneticAlgorithm algorithm, SimplePopulation population, double scaledFitnessValue)
        {
            GeneticEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            entity.ScaledFitnessValue = scaledFitnessValue;
            population.Entities.Add(entity);
            return(entity);
        }
        public void FitnessProportionateSelectionOperator_Select_MinimizeFitness()
        {
            GeneticAlgorithm algorithm = GetAlgorithm();

            ((MockFitnessEvaluator)algorithm.FitnessEvaluator).EvaluationMode = FitnessEvaluationMode.Minimize;

            FitnessProportionateSelectionOperator op = new FitnessProportionateSelectionOperator();

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

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

            entity1.Initialize(algorithm);
            entity1.ScaledFitnessValue = 1; // Slice size: 5
            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            entity2.ScaledFitnessValue = 5; // Slice size: 1
            MockEntity entity3 = new MockEntity();

            entity3.Initialize(algorithm);
            entity3.ScaledFitnessValue = 4; // Slice size: 4
            population.Entities.Add(entity1);
            population.Entities.Add(entity2);
            population.Entities.Add(entity3);
            FakeRandomUtil randomUtil = new FakeRandomUtil();

            RandomNumberService.Instance = randomUtil;

            randomUtil.RandomRatio = 0;
            IList <GeneticEntity> selectedEntities = op.SelectEntities(1, population).ToList();

            Assert.Same(entity2, selectedEntities[0]);

            randomUtil.RandomRatio = .099999;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity2, selectedEntities[0]);

            randomUtil.RandomRatio = .1;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity3, selectedEntities[0]);

            randomUtil.RandomRatio = .499999;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity3, selectedEntities[0]);

            randomUtil.RandomRatio = .5;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity1, selectedEntities[0]);

            randomUtil.RandomRatio = 1;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity1, selectedEntities[0]);
        }
        private void AddEntity(GeneticAlgorithm algorithm, double fitness, Population population)
        {
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            PrivateObject accessor = new PrivateObject(entity, new PrivateType(typeof(GeneticEntity)));

            accessor.SetField("rawFitnessValue", fitness);
            population.Entities.Add(entity);
        }
        public void FitnessProportionateSelectionOperator_Select()
        {
            GeneticAlgorithm algorithm = GetAlgorithm();
            FitnessProportionateSelectionOperator op = new FitnessProportionateSelectionOperator();

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

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

            entity1.Initialize(algorithm);
            entity1.ScaledFitnessValue = 1;
            MockEntity entity2 = new MockEntity();

            entity2.Initialize(algorithm);
            entity2.ScaledFitnessValue = 5;
            MockEntity entity3 = new MockEntity();

            entity3.Initialize(algorithm);
            entity3.ScaledFitnessValue = 4;
            population.Entities.Add(entity1);
            population.Entities.Add(entity2);
            population.Entities.Add(entity3);
            FakeRandomUtil randomUtil = new FakeRandomUtil();

            RandomNumberService.Instance = randomUtil;

            randomUtil.RandomRatio = 0;
            IList <GeneticEntity> selectedEntities = op.SelectEntities(1, population);

            Assert.Same(entity1, selectedEntities[0]);

            randomUtil.RandomRatio = .099999;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity1, selectedEntities[0]);

            randomUtil.RandomRatio = .1;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity2, selectedEntities[0]);

            randomUtil.RandomRatio = .599999;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity2, selectedEntities[0]);

            randomUtil.RandomRatio = .6;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity3, selectedEntities[0]);

            randomUtil.RandomRatio = 1;
            selectedEntities       = op.SelectEntities(1, population);
            Assert.Same(entity3, selectedEntities[0]);
        }
Beispiel #15
0
        public void Entity_Initialize()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new MockEntity()
            };
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            Assert.Equal("11111", entity.Identifier);
        }
        public void MutationOperator_Mutate()
        {
            GeneticAlgorithm     algorithm = GetAlgorithm(.03);
            MockMutationOperator op        = new MockMutationOperator();

            op.Initialize(algorithm);
            GeneticEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            entity.Age = 10;
            GeneticEntity mutant = op.Mutate(entity);

            Assert.NotSame(entity, mutant);
            Assert.Equal(entity.Age, mutant.Age);
            Assert.Equal(1, op.DoMutateCallCount);
        }
Beispiel #17
0
        public void UniformSelectionOperator_Select()
        {
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new MockEntity(),
                PopulationSeed    = new SimplePopulation(),
                SelectionOperator = new UniformSelectionOperator
                {
                    SelectionBasedOnFitnessType = FitnessType.Scaled
                }
            };
            UniformSelectionOperator op = new UniformSelectionOperator();

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

            population.Initialize(algorithm);

            for (int i = 0; i < 4; i++)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                population.Entities.Add(entity);
            }

            TestRandomUtil randomUtil = new TestRandomUtil();

            RandomNumberService.Instance = randomUtil;

            randomUtil.Value = 3;
            IList <GeneticEntity> selectedEntities = op.SelectEntities(1, population);

            Assert.Same(population.Entities[randomUtil.Value], selectedEntities[0]);

            randomUtil.Value = 2;
            selectedEntities = op.SelectEntities(1, population);
            Assert.Same(population.Entities[randomUtil.Value], selectedEntities[0]);

            randomUtil.Value = 1;
            selectedEntities = op.SelectEntities(1, population);
            Assert.Same(population.Entities[randomUtil.Value], selectedEntities[0]);

            randomUtil.Value = 0;
            selectedEntities = op.SelectEntities(1, population);
            Assert.Same(population.Entities[randomUtil.Value], selectedEntities[0]);
        }
Beispiel #18
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.");
        }
Beispiel #19
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);
        }
Beispiel #20
0
        private static SimplePopulation GetPopulation(GeneticAlgorithm algorithm, int populationSize)
        {
            SimplePopulation population = new SimplePopulation {
                MinimumPopulationSize = populationSize
            };

            population.Initialize(algorithm);

            for (int i = 0; i < population.MinimumPopulationSize; i++)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                population.Entities.Add(entity);
            }

            return(population);
        }
Beispiel #21
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));
        }
Beispiel #22
0
        public void Entity_GetFitnessValue()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new MockEntity()
            };
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            PrivateObject accessor = new PrivateObject(entity, new PrivateType(typeof(GeneticEntity)));

            entity.ScaledFitnessValue = 12;
            accessor.SetField("rawFitnessValue", 10);
            Assert.Equal(entity.ScaledFitnessValue, entity.GetFitnessValue(FitnessType.Scaled));
            Assert.Equal(accessor.GetField("rawFitnessValue"), entity.GetFitnessValue(FitnessType.Raw));
        }
        public async Task FitnessEvaluator_EvaluateFitness_Async()
        {
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                SelectionOperator = new MockSelectionOperator(),
                PopulationSeed    = new MockPopulation(),
                GeneticEntitySeed = new MockEntity(),
                FitnessEvaluator  = new FakeFitnessEvaluator2()
            };
            FakeFitnessEvaluator2 evaluator = new FakeFitnessEvaluator2();

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

            entity.Initialize(algorithm);
            double actualVal = await evaluator.EvaluateFitnessAsync(entity);

            Assert.Equal((double)99, actualVal);
        }
        public void CrossoverOperator_Crossover_NoOp()
        {
            double crossoverRate            = 0; // force crossover not to occur
            MockGeneticAlgorithm  algorithm = GetGeneticAlgorithm(crossoverRate);
            FakeCrossoverOperator op        = (FakeCrossoverOperator)algorithm.CrossoverOperator;

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

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

            entity2.Initialize(algorithm);
            entity2.Identifier = "3";
            IList <GeneticEntity> geneticEntities = op.Crossover(new GeneticEntity[] { entity1, entity2 }).ToList();

            Assert.Same(entity1, geneticEntities[0]);
            Assert.Same(entity2, geneticEntities[1]);
        }
Beispiel #25
0
        public async Task Entity_EvaluateFitness_Async()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                PopulationSeed    = new MockPopulation(),
                SelectionOperator = new MockSelectionOperator(),
                GeneticEntitySeed = new MockEntity(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
            };

            algorithm.FitnessEvaluator = new MockFitnessEvaluator();
            algorithm.FitnessEvaluator.Initialize(algorithm);
            MockEntity entity = new MockEntity();

            entity.Initialize(algorithm);
            entity.Identifier = "123";
            await entity.EvaluateFitnessAsync();

            Assert.Equal((double)123, entity.RawFitnessValue);
            Assert.Equal((double)123, entity.ScaledFitnessValue);
        }
        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);
        }
Beispiel #27
0
        public void RouletteWheelSampler_GetEntity_NoSizes()
        {
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                GeneticEntitySeed = new MockEntity(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                PopulationSeed    = new MockPopulation()
            };
            List <WheelSlice> slices = new List <WheelSlice>();

            MockEntity entity1 = new MockEntity();

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

            entity2.Initialize(algorithm);
            MockEntity entity3 = new MockEntity();

            entity3.Initialize(algorithm);
            MockEntity entity4 = new MockEntity();

            entity4.Initialize(algorithm);

            slices.Add(new WheelSlice(entity1, 0));
            slices.Add(new WheelSlice(entity2, 0));
            slices.Add(new WheelSlice(entity3, 0));
            slices.Add(new WheelSlice(entity4, 0));

            TestRandomUtil randomUtil = new TestRandomUtil();

            RandomNumberService.Instance = randomUtil;
            randomUtil.RandomValue       = 2;
            GeneticEntity sampledEntity = RouletteWheelSampler.GetEntity(slices);

            Assert.Equal(4, randomUtil.MaxValuePassed);
            Assert.Same(entity3, sampledEntity);
        }
        private static void VerifyGetResultValue(int multiplier, BestMaximumFitnessEntity metric, SimplePopulation population, GeneticAlgorithm algorithm, string expectedReturnVal)
        {
            for (int i = 0; i < 5; i++)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                entity.ScaledFitnessValue = i * multiplier;
                entity.Identifier         = entity.ScaledFitnessValue.ToString();
                population.Entities.Add(entity);
            }

            for (int i = 10; i >= 5; i--)
            {
                MockEntity entity = new MockEntity();
                entity.Initialize(algorithm);
                entity.ScaledFitnessValue = i * multiplier;
                entity.Identifier         = entity.ScaledFitnessValue.ToString();
                population.Entities.Add(entity);
            }

            object representation = metric.GetResultValue(population);

            Assert.Equal(expectedReturnVal, representation.ToString());
        }
Beispiel #29
0
        public void Entity_Ctor_NullAlgorithm()
        {
            MockEntity entity = new MockEntity();

            Assert.Throws <ArgumentNullException>(() => entity.Initialize(null));
        }
Beispiel #30
0
        public void RouletteWheelSampler_GetEntity()
        {
            MockGeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                GeneticEntitySeed = new MockEntity(),
                SelectionOperator = new MockSelectionOperator(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                PopulationSeed    = new MockPopulation()
            };
            List <WheelSlice> slices  = new List <WheelSlice>();
            MockEntity        entity1 = new MockEntity();

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

            entity2.Initialize(algorithm);
            MockEntity entity3 = new MockEntity();

            entity3.Initialize(algorithm);
            MockEntity entity4 = new MockEntity();

            entity4.Initialize(algorithm);

            slices.Add(new WheelSlice(entity1, 4));
            slices.Add(new WheelSlice(entity2, 2));
            slices.Add(new WheelSlice(entity3, 1));
            slices.Add(new WheelSlice(entity4, 3));

            TestRandomUtil randomUtil = new TestRandomUtil();

            RandomNumberService.Instance = randomUtil;

            randomUtil.Ratio = 0;
            GeneticEntity sampledEntity = RouletteWheelSampler.GetEntity(slices);

            Assert.Same(entity1, sampledEntity);

            randomUtil.Ratio = .39999;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity1, sampledEntity);

            randomUtil.Ratio = .4;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity2, sampledEntity);

            randomUtil.Ratio = .59999;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity2, sampledEntity);

            randomUtil.Ratio = .6;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity3, sampledEntity);

            randomUtil.Ratio = .69999;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity3, sampledEntity);

            randomUtil.Ratio = .7;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity4, sampledEntity);

            randomUtil.Ratio = 1;
            sampledEntity    = RouletteWheelSampler.GetEntity(slices);
            Assert.Same(entity4, sampledEntity);
        }