Example #1
0
        /// <summary>
        /// Perform DE crossover.
        /// </summary>
        /// <param name="crossover">Crossover variant to be performed.</param>
        /// <param name="CR">Crossover probability.</param>
        /// <param name="n">Dimensionality for problem.</param>
        /// <param name="w">Differential weight (vector).</param>
        /// <param name="x">Current agent position.</param>
        /// <param name="y">Potentially new agent position.</param>
        /// <param name="g">Population's best known position.</param>
        /// <param name="agents">Entire population.</param>
        /// <param name="randomSet">Random-set used for drawing distinct agents.</param>
        public static void DoCrossover(Variant crossover, double CR, int n, double[] w, double[] x, ref double[] y, double[] g, double[][] agents, RandomOps.Set randomSet)
        {
            // Agents used in crossover.
            double[] a, b, c;

            switch (crossover)
            {
                case Variant.Best1Bin:
                    {
                        // The first agent used in crossover is g.
                        a = g;

                        // Pick random and distinct agent-indices.
                        // Also distinct from agent x.
                        int R1 = randomSet.Draw();
                        int R2 = randomSet.Draw();

                        b = agents[R1];
                        c = agents[R2];
                    }
                    break;

                case Variant.Rand1Bin:
                default:
                    {
                        // Pick random and distinct agent-indices.
                        // Also distinct from agent x.
                        int R1 = randomSet.Draw();
                        int R2 = randomSet.Draw();
                        int R3 = randomSet.Draw();

                        // Refer to the randomly picked agents as a and b.
                        a = agents[R1];
                        b = agents[R2];
                        c = agents[R3];
                    }
                    break;
            }

            // Pick a random dimension.
            int R = Globals.Random.Index(n);

            // Compute potentially new position.
            for (int k = 0; k < n; k++)
            {
                if (k == R || Globals.Random.Bool(CR))
                {
                    y[k] = a[k] + w[k] * (b[k] - c[k]);
                }
                else
                {
                    y[k] = x[k];
                }
            }
        }
Example #2
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();
        }
Example #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));
        }
Example #4
0
        static void TestArraySeed(RandomOps.RanUInt32Array rand)
        {
            RandomOps.Ran2 ran2 = new RandomOps.Ran2();
            RandomOps.RandomDotOrg randInternet = new RandomOps.RandomDotOrg(rand.SeedLength, ran2, rand.SeedLength);

            rand.Seed(randInternet);

            Test(rand);
        }
Example #5
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;
            }
        }