Esempio n. 1
0
        public static void InitPRNG()
        {
            lock (_prngLock)
            {
                const int SEEDS_COUNT       = 20;
                const int SEEDS_BYTES_COUNT = SEEDS_COUNT * sizeof(uint);

                byte[] trueRandomBytes = RandomOps.RandomDotOrg.RetrieveBytes(SEEDS_BYTES_COUNT).ToArray();

                var seeds = new List <uint>();
                for (int i = 0; i < trueRandomBytes.Length;)
                {
                    uint seed = 0;

                    for (int j = 0; j < sizeof(uint); j++)
                    {
                        seed = (seed << 8) + trueRandomBytes[i];
                        i++;
                    }

                    seeds.Add(seed);
                }

                _prng = new RandomOps.MersenneTwister(seeds.ToArray());
            }
        }
Esempio n. 2
0
        public static void InitPRNG()
        {
            lock (_prngLock)
            {
                const int SEEDS_COUNT = 20;
                const int SEEDS_BYTES_COUNT = SEEDS_COUNT * sizeof(uint);

                byte[] trueRandomBytes = RandomOps.RandomDotOrg.RetrieveBytes(SEEDS_BYTES_COUNT).ToArray();

                var seeds = new List<uint>();
                for (int i=0; i<trueRandomBytes.Length; )
                {
                    uint seed = 0;

                    for (int j=0; j<sizeof(uint); j++)
                    {
                        seed = (seed << 8) + trueRandomBytes[i];
                        i++;
                    }

                    seeds.Add(seed);
                }

                _prng = new RandomOps.MersenneTwister(seeds.ToArray());
            }
        }
Esempio n. 3
0
        static void Test(RandomOps.Random rand)
        {
            DateTime t1 = DateTime.Now;

            DoTest(rand);
            DateTime t2 = DateTime.Now;

            Console.WriteLine("Time usage: {0}", t2.Subtract(t1));
        }
Esempio n. 4
0
        static void InitSetProbabilities(RandomOps.Random Rand)
        {
            int    i;
            double sum = 0;

            // Initialize probabilities to random values.
            for (i = 0; i < IndexProbabilities.Length; i++)
            {
                double r = Rand.Uniform();
                IndexProbabilities[i] = r;
                sum += r;
            }

            // Normalize so sum of probabilities is one.
            for (i = 0; i < IndexProbabilities.Length; i++)
            {
                IndexProbabilities[i] /= sum;
            }
        }
Esempio n. 5
0
 public static int Next(this RandomOps.Random rnd, int max)
 {
     return(rnd.Index(max));
 }
Esempio n. 6
0
 public static double NextDouble(this RandomOps.Random rnd)
 {
     return(rnd.Uniform());
 }
Esempio n. 7
0
        static void DoTest(RandomOps.Random Rand)
        {
            int i;

            Console.WriteLine("RNG name: {0}", Rand.Name);
            Console.WriteLine();

            if (TestByte)
            {
                Console.WriteLine("Byte()");
                int[] ByteCounts = new int[Byte.MaxValue + 1];
                ZeroCounts(ByteCounts);
                for (i = 0; i < ByteIterations; i++)
                {
                    ByteCounts[Rand.Byte()] += 1;
                }
                PrintCounts(ByteCounts);
                Console.WriteLine();
            }

            Console.WriteLine("Bytes({0})", NumBytes);
            byte[] byteArr = Rand.Bytes(NumBytes);
            for (i = 0; i < NumBytes; i++)
            {
                Console.WriteLine(byteArr[i]);
            }
            Console.WriteLine();

            Console.WriteLine("Uniform()");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform());
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(-3, -1)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(-3, -1));
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(-2, 2)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(-2, 2));
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(3, 5)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(3, 5));
            }
            Console.WriteLine();

            Console.WriteLine("Gauss({0}, {1})", GaussMean, GaussDeviation);
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Gauss(GaussMean, GaussDeviation));
            }
            Console.WriteLine();

            double sum = 0;

            for (i = 0; i < MeanIterations; i++)
            {
                sum += Rand.Uniform();
            }
            Console.WriteLine("Mean of {0} x Uniform(): {1:0.0000}", MeanIterations, sum / MeanIterations);
            Console.WriteLine();

            sum = 0;
            for (i = 0; i < MeanIterations; i++)
            {
                sum += Rand.Gauss(0, 1);
            }
            Console.WriteLine("Mean of {0} x Gauss(0, 1): {1:0.0000}", MeanIterations, sum / MeanIterations);
            Console.WriteLine();

            Console.WriteLine("Disk()");
            PrintPoint(Rand.Disk());
            Console.WriteLine();

            Console.WriteLine("Circle()");
            PrintPoint(Rand.Circle());
            Console.WriteLine();

            Console.WriteLine("Sphere3()");
            PrintPoint(Rand.Sphere3());
            Console.WriteLine();

            Console.WriteLine("Sphere4()");
            PrintPoint(Rand.Sphere4());
            Console.WriteLine();

            Console.WriteLine("Sphere({0}, {1})", SphereDim, SphereRadius);
            PrintPoint(Rand.Sphere(SphereDim, SphereRadius));
            Console.WriteLine();

            if (TestBool)
            {
                Console.WriteLine("Bool()");
                int countTrue  = 0;
                int countFalse = 0;
                for (i = 0; i < BoolIterations; i++)
                {
                    if (Rand.Bool())
                    {
                        countTrue++;
                    }
                    else
                    {
                        countFalse++;
                    }
                }
                Console.WriteLine("True: {0}", countTrue);
                Console.WriteLine("False: {0}", countFalse);
                Console.WriteLine();
            }

            Console.WriteLine("Index({0})", MaxIndex);
            ZeroCounts(IndexCounts);
            for (i = 0; i < IndexIterations; i++)
            {
                int idx = Rand.Index(MaxIndex);

                IndexCounts[idx] += 1;
            }
            PrintCounts(IndexCounts);
            Console.WriteLine();

            Console.WriteLine("Index2({0}, ...)", MaxIndex);
            ZeroCounts(IndexCounts);
            for (i = 0; i < IndexIterations; i++)
            {
                int idx1, idx2;

                Rand.Index2(MaxIndex, out idx1, out idx2);

                Debug.Assert(idx1 != idx2);

                IndexCounts[idx1] += 1;
                IndexCounts[idx2] += 1;
            }
            PrintCounts(IndexCounts);
            Console.WriteLine();

            RandomOps.Set RandSet = new RandomOps.Set(Rand, RandSetSize);

            Console.WriteLine("RandSet.Reset()");
            RandSet.Reset();
            Console.WriteLine();

            Console.WriteLine("RandSet.Draw() with set of size {0} and {1} iterations", RandSetSize, SetIterations / 2);
            for (i = 0; i < SetIterations / 2; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            Console.WriteLine("RandSet.Reset()");
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            RandSet.Reset();
            for (i = 0; i < SetIterations; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            //RandSet.Draw(); // Assertion fails.

            Console.WriteLine("RandSet.ResetExclude({0})", RandSetExclude);
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            RandSet.ResetExclude(RandSetExclude);
            for (i = 0; i < SetIterations - 1; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            //RandSet.Draw(); // Assertion fails.

            ZeroCounts(SetCounts);
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            for (i = 0; i < SetIterations2; i++)
            {
                RandSet.Reset();

                while (RandSet.Size > 0)
                {
                    int idx = RandSet.Draw();

                    SetCounts[idx] += 1;
                }
            }
            PrintCounts(SetCounts);
            Console.WriteLine();

            InitSetProbabilities(Rand);

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("Rand.Index() with probability distribution");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = Rand.Index(IndexProbabilities);

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();

            RandomOps.IndexDistribution IndexDistribution = new RandomOps.IndexDistribution(Rand, IndexProbabilities);

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("IndexDistribution.DrawLinearSearch()");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = IndexDistribution.DrawLinearSearch();

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("IndexDistribution.DrawBinarySearch()");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = IndexDistribution.DrawBinarySearch();

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();
        }