Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            IConfiguration             configuration = new Configuration();
            IMutationStrategy          trialVectorMutationStrategy       = new TrialIndividualMutationStrategy(configuration);
            ICrossoverStrategy         crossoverStrategy                 = new BinomialCrossoverStrategy(configuration);
            ISelectionStrategy         generationSelectionStrategy       = new MinimisationElitistSelectionStrategy();
            ISelectionStrategy         differenceVectorSelectionStrategy = new RandomSelectionStrategy();
            IFitnessEvaluationStrategy fitnessEvaluationStrategy         = new RastriginFitnessEvaluationStrategy();

            DifferentialEvolution differentialEvolution = new DifferentialEvolution(
                trialVectorMutationStrategy,
                crossoverStrategy,
                generationSelectionStrategy,
                differenceVectorSelectionStrategy,
                fitnessEvaluationStrategy,
                configuration
                );

            differentialEvolution.Run();

            var population = differentialEvolution.population;

            foreach (Individual individual in population)
            {
                foreach (double dimension in individual.Position)
                {
                    Console.Write(Math.Round(dimension) + ", ");
                }

                Console.WriteLine();
            }

            Console.Read();
        }
Ejemplo n.º 2
0
        public void GivenAprobabilityOfZero_WhenIndividualsAreCrossed_ItShouldReturnAnIndividualWithThePositionOfIndividualOne()
        {
            Individual individual1 = new Individual(null, new Configuration())
            {
                Position = new double[] { 1.0, 2.0, 3.0 }
            };

            Individual individual2 = new Individual(null, new Configuration())
            {
                Position = new double[] { 9.0, 11.0, 11.0 }
            };

            MockRandom();

            BinomialCrossoverStrategy crossoverStrategy = new BinomialCrossoverStrategy(new Configuration(), 0.0);

            Individual result = crossoverStrategy.Cross(individual1, individual2);

            Assert.IsTrue(individual1.Position.SequenceEqual(result.Position));
        }
Ejemplo n.º 3
0
        public void GivenAnTwoIndividuals_WhenTheyAreCombined_ItShouldReturnAnIndividualDifferentFromTheInputs()
        {
            Individual individual1 = new Individual(null, new Configuration())
            {
                Position = new double[] { 1.0, 2.0, 3.0 }
            };

            Individual individual2 = new Individual(null, new Configuration())
            {
                Position = new double[] { 9.0, 11.0, 11.0 }
            };

            MockRandom();

            BinomialCrossoverStrategy crossoverStrategy = new BinomialCrossoverStrategy(new Configuration());

            Individual result = crossoverStrategy.Cross(individual1, individual2);

            Assert.IsFalse(individual1.Position.SequenceEqual(result.Position));
            Assert.IsFalse(individual2.Position.SequenceEqual(result.Position));
        }
Ejemplo n.º 4
0
        public void GivenAnTwoIndividuals_WhenTheyAreCombined_ItShouldReturnAnIndividualWithPartsFromEachIndividual()
        {
            Individual individual1 = new Individual(null, new Configuration())
            {
                Position = new double[] { 1.0, 2.0, 3.0 }
            };

            Individual individual2 = new Individual(null, new Configuration())
            {
                Position = new double[] { 9.0, 11.0, 11.0 }
            };

            MockRandom();

            BinomialCrossoverStrategy crossoverStrategy = new BinomialCrossoverStrategy(new Configuration());

            Individual result = crossoverStrategy.Cross(individual1, individual2);

            int totalFromIndividual1 = 0;
            int totalFromIndividual2 = 0;

            for (int i = 0; i < individual1.Position.Length; i++)
            {
                if (result.Position[i] == individual1.Position[i])
                {
                    totalFromIndividual1++;
                }
                else
                {
                    totalFromIndividual2++;
                }
            }

            Assert.IsTrue(totalFromIndividual1 > 0);
            Assert.IsTrue(totalFromIndividual2 > 0);
        }