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); }
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))); }
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))); } }
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))); } }
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))); } }
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); }