Exemplo n.º 1
0
        public void Test_Mutation_Chain_Fluent()
        {
            var flip     = new FlipMutation();
            var random   = new RandomMutation();
            var gaussian = new GaussianMutation();

            var chain = MutationChain.New(10)
                        .Add(() => flip, 0)
                        .Add(() => random, 4)
                        .Add(() => gaussian, 6);

            Assert.Equal(flip, chain.Mutations.ElementAt(0));
            Assert.Equal(random, chain.Mutations.ElementAt(1));
            Assert.Equal(gaussian, chain.Mutations.ElementAt(2));

            Assert.True(chain.Mutations.Count == 3);
        }
Exemplo n.º 2
0
        public void Test_Mutation_Guassian()
        {
            int count = 0;

            Func <double, double, double, double, double> stderr =
                (double v, double mu, double s, double n) =>
            {
                return((v - mu) / s);
            };

            while (count < 10)
            {
                int length   = Math.Probability.Sampling.GetUniform(10, 100);
                int position = Math.Probability.Sampling.GetUniform(0, length - 1);

                var gaussian1 = new GaussianMutation()
                {
                    N = position
                };
                // compound
                this.Test_Mutation(() => gaussian1, false, length, (p1, p2) =>
                {
                    double z    = stderr(p2.Sequence[position], p1.Sequence.Mean(), p1.Sequence.StdDev(), length);
                    bool result = (MATH.Abs(z / MATH.Sqrt(length)) < 0.5);

                    return(result);
                }, (i) => Math.Probability.Sampling.GetNormal());

                var gaussian2 = new GaussianMutation()
                {
                    Compound = false, N = 5
                };
                // replacement
                this.Test_Mutation(() => gaussian2, false, length, (p1, p2) =>
                {
                    double z    = stderr(p2.Sequence[position], p2.Sequence.Mean(), p2.Sequence.StdDev(), length);
                    bool result = (MATH.Abs(z) < 3.1);

                    return(result);
                }, (i) => Math.Probability.Sampling.GetNormal());

                count++;
            }
        }
Exemplo n.º 3
0
        public void Test_Mutation_Chain_Build()
        {
            MutationChain chain = new MutationChain(5);

            var flip     = new FlipMutation();
            var random   = new RandomMutation();
            var gaussian = new GaussianMutation();

            var chain1 = chain.Add(() => flip, 1);
            var chain2 = chain1.Add(random);
            var chain3 = chain2.Add(() => gaussian, 4);

            Assert.DoesNotContain(flip, chain.Mutations);
            Assert.Contains(flip, chain1.Mutations);

            Assert.DoesNotContain(random, chain1.Mutations);
            Assert.Contains(random, chain2.Mutations);

            Assert.DoesNotContain(gaussian, chain2.Mutations);
            Assert.Contains(gaussian, chain3.Mutations);
        }