예제 #1
0
        public void InversionOperatorShouldReturnCorrectChildren()
        {
            IGene[] parent = new IGene[]
            {
                new UintGene(1), new UintGene(2), new UintGene(3),
                new UintGene(4), new UintGene(5), new UintGene(6),
                new UintGene(7), new UintGene(8), new UintGene(9)
            };
            IGene[] expectedChild = new IGene[]
            {
                new UintGene(1), new UintGene(2), new UintGene(3),
                new UintGene(8), new UintGene(7), new UintGene(6),
                new UintGene(5), new UintGene(4), new UintGene(9)
            };
            int startPoint = 3, length = 5;
            var swap = new InversionOperator();

            swap.Run(parent, startPoint, length);
            bool areChildrenEqual = true;

            for (int i = 0; i < expectedChild.Length; ++i)
            {
                areChildrenEqual &= expectedChild[i].Equals(parent[i]);
            }
            Assert.AreEqual(true, areChildrenEqual);
        }
예제 #2
0
        public void InversionOperator_GenerateMutation_NullEntity()
        {
            InversionOperator op       = new InversionOperator();
            PrivateObject     accessor = new PrivateObject(op);

            Assert.Throws <ArgumentNullException>(() => accessor.Invoke("GenerateMutation", (GeneticEntity)null));
        }
예제 #3
0
        public void InversionOperator_GenerateMutation_NoMutation()
        {
            InversionOperator op = new InversionOperator
            {
                MutationRate = 0
            };

            PrivateObject accessor = new PrivateObject(op);
            bool          result   = (bool)accessor.Invoke("GenerateMutation", new BinaryStringEntity());

            Assert.False(result);
        }
예제 #4
0
        public void InversionOperator_Mutate()
        {
            GeneticAlgorithm algorithm = new MockGeneticAlgorithm
            {
                SelectionOperator = new MockSelectionOperator(),
                PopulationSeed    = new MockPopulation(),
                FitnessEvaluator  = new MockFitnessEvaluator(),
                GeneticEntitySeed = new BinaryStringEntity
                {
                    MinimumStartingLength = 4,
                    MaximumStartingLength = 4
                },
                MutationOperator = new InversionOperator
                {
                    MutationRate = 1
                }
            };

            algorithm.GeneticEntitySeed.Initialize(algorithm);

            InversionOperator op = (InversionOperator)algorithm.MutationOperator;

            op.Initialize(algorithm);
            BinaryStringEntity entity = (BinaryStringEntity)algorithm.GeneticEntitySeed.CreateNewAndInitialize();

            entity.Age = 10;
            entity.Initialize(algorithm);
            entity[0] = true;
            entity[1] = true;
            entity[2] = false;
            entity[3] = true;

            FakeRandomUtil randomUtil = new FakeRandomUtil();

            RandomNumberService.Instance = randomUtil;
            randomUtil.RandomValue       = 1;

            GeneticEntity mutant = op.Mutate(entity);

            Assert.Equal("1011", mutant.Representation);
            Assert.Equal(0, mutant.Age);
        }