示例#1
0
        public void TestMutate()
        {
            const int    seed         = 434;
            const uint   order        = 64;
            const double mutationRate = 0.003;

            var randy     = Rando.Standard(seed);
            var stageBits = randy.ToStageBits(order: order);
            var perm      = stageBits.ToPermutation();

            Stopwatch sw = new Stopwatch();

            sw.Start();

            var sameCount = 0;

            for (var i = 0; i < 100000; i++)
            {
                var stageBitsM = stageBits.Mutate(randy, mutationRate);
                var permM      = stageBitsM.ToPermutation();
                var p2         = perm.Multiply(permM);
                if (p2.IsEqualTo(PermutationEx.Identity(order)))
                {
                    sameCount++;
                }
            }

            sw.Stop();
            Console.WriteLine(sameCount);
            Console.WriteLine("Elapsed={0}", sw.Elapsed);
        }
示例#2
0
        public void TestRandomTwoCycleSquared()
        {
            const int order = 24;
            var       rando = Rando.Standard(5123);
            var       perm  = rando.ToPermutation(order);

            var p2 = perm.Multiply(perm);

            Assert.IsTrue(p2.IsEqualTo(PermutationEx.Identity(order)));
        }
示例#3
0
        public void TestSingleTwoCyclePermutationConjugateIsATwoCycle()
        {
            const int order = 24;
            var       randy = Rando.Standard(5123);

            for (var i = 0; i < 1000; i++)
            {
                var twoCycle   = randy.ToSingleTwoCyclePermutation(order);
                var twoCycleSq = twoCycle.Multiply(twoCycle);
                Assert.IsTrue(twoCycleSq.IsEqualTo(PermutationEx.Identity(order)));
            }
        }
示例#4
0
        public void TestFullTwoCyclePermutationConjugateIsATwoCycle()
        {
            const int order = 24;
            var       randy = Rando.Standard(5123);

            for (var i = 0; i < 1000; i++)
            {
                var twoCycle  = randy.ToFullTwoCyclePermutation(order);
                var conjugate = twoCycle.ConjugateByRandomPermutation(randy);
                var p2        = conjugate.Multiply(conjugate);
                Assert.IsTrue(p2.IsEqualTo(PermutationEx.Identity(order)));
            }
        }
示例#5
0
        public void TestInverse()
        {
            const int order = 23;
            var       randy = Rando.Standard(5123);

            for (var i = 0; i < 1000; i++)
            {
                var perm  = randy.ToPermutation(order);
                var permI = perm.ToInverse();
                var prod  = perm.Multiply(permI);
                Assert.IsTrue(prod.IsEqualTo(PermutationEx.Identity(order)));
            }
        }
示例#6
0
        public void TestMutatezLoop()
        {
            const int    seed         = 7434;
            const double mutationRate = 0.001;
            const int    reps         = 2000;
            const int    pool         = 2000;

            var randy = Rando.Standard(seed);


            Stopwatch sw = new Stopwatch();

            sw.Start();
            Console.WriteLine($"Order MutationRate P1 P2 Reps");

            for (var p = 0; p < 10; p++)
            {
                for (uint r = 48; r < 100; r++)
                {
                    var stageBits = randy.ToStageBits(order: r);
                    var perm      = stageBits.ToPermutation();

                    var sameCount  = 0;
                    var sameCount2 = 0;
                    for (var i = 0; i < reps; i++)
                    {
                        var stageBitsM = stageBits.Mutate(randy, mutationRate);
                        var permM      = stageBitsM.ToPermutation();
                        var p2         = perm.Multiply(permM);
                        if (p2.IsEqualTo(PermutationEx.Identity(r)))
                        {
                            sameCount++;
                            var stageBitsM2 = stageBitsM.Mutate(randy, mutationRate);
                            var permM2      = stageBitsM2.ToPermutation();
                            var p3          = perm.Multiply(permM2);
                            if (p3.IsEqualTo(PermutationEx.Identity(r)))
                            {
                                sameCount2++;
                            }
                        }
                    }

                    Console.WriteLine($"{r} {mutationRate} {sameCount} {sameCount2} {reps}");
                }
            }



            sw.Stop();
            Console.WriteLine("\nElapsed={0}", sw.Elapsed);
        }