Example #1
0
        public void WhenCrossoverConfigurationRatiosChanged_CrossoverSelectionRequested_RequestedCrossoversShouldHaveApproxCorrectChance()
        {
            int onePoint = 0;
            int twoPoint = 0;
            int random   = 0;

            ConfigurationProvider.Crossover.OnePointCrossoverRatio = 1;
            ConfigurationProvider.Crossover.TwoPointCrossoverRatio = 1;
            ConfigurationProvider.Crossover.RandomCrossoverRatio   = 1;

            int tries = 30000;

            Enumerable.Range(0, tries)
            .ForEach(i => {
                switch (CrossoverProvider.GetNextCrossover().CrossoverMethod)
                {
                case Crossover.CrossoverType.OnePoint:
                    onePoint++;
                    break;

                case Crossover.CrossoverType.TwoPoint:
                    twoPoint++;
                    break;

                case Crossover.CrossoverType.Random:
                    random++;
                    break;
                }
            });

            double acceptableErrorPercent = .05;

            int average = (int)(tries / 3);

            int acceptableError = (int)(average * acceptableErrorPercent);

            int acceptableMin = average - acceptableError;
            int acceptableMax = average + acceptableError;

            Assert.GreaterOrEqual(onePoint, acceptableMin);
            Assert.LessOrEqual(onePoint, acceptableMax);

            Assert.GreaterOrEqual(twoPoint, acceptableMin);
            Assert.LessOrEqual(twoPoint, acceptableMax);

            Assert.GreaterOrEqual(random, acceptableMin);
            Assert.LessOrEqual(random, acceptableMax);
        }
Example #2
0
        public void WhenCrossoverSelectionDefaultIsRequested_RequestedCrossoversShouldHaveApproxEqualChance()
        {
            int onePoint = 0;
            int twoPoint = 0;
            int random   = 0;

            int tries = 10000;

            int min = (int)(tries * ((double)3 / 10));
            int max = (int)(tries * ((double)4 / 10));

            ConfigurationProvider.EnsureIsBuilt();

            for (int i = 0; i < tries; i++)
            {
                switch (CrossoverProvider.GetNextCrossover().CrossoverMethod)
                {
                case Crossover.CrossoverType.OnePoint:
                    onePoint++;
                    break;

                case Crossover.CrossoverType.TwoPoint:
                    twoPoint++;
                    break;

                case Crossover.CrossoverType.Random:
                    random++;
                    break;
                }
            }

            Assert.LessOrEqual(onePoint, max);
            Assert.GreaterOrEqual(onePoint, min);

            Assert.LessOrEqual(twoPoint, max);
            Assert.GreaterOrEqual(twoPoint, min);

            Assert.LessOrEqual(random, max);
            Assert.GreaterOrEqual(random, min);
        }