예제 #1
0
        public static AbstractMutation ChosenMutationMethod(MutationMethod mutationMethod, double MutationProbability, int pointMutation)
        {
            AbstractMutation mutation = null;

            switch (mutationMethod)
            {
            case MutationMethod.InversionMutation:
                mutation = new InversionMutation(MutationProbability, pointMutation);
                break;

            case MutationMethod.ReplaceMutation:
                mutation = new ReplaceMutaion(MutationProbability, pointMutation);
                break;

            case MutationMethod.SwapMutation:
                mutation = new SwapMutation(MutationProbability, pointMutation);
                break;

            case MutationMethod.TranslocationMutation:
                mutation = new TranslocationMutation(MutationProbability, pointMutation);
                break;

            case MutationMethod.NonMutation:
                mutation = null;
                break;
            }

            return(mutation);
        }
예제 #2
0
        public void ItErrorsIfTheIndexesAreOutOfRange()
        {
            var chromosome = GATestHelper.GetAlphabetCharacterChromosome();
            var mutation   = new InversionMutation();

            mutation.Inverse(chromosome, -1, 1);
        }
예제 #3
0
        public void MutationTest1()
        {
            int populationSize = 2000;

            file = root + "\\bays29.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection((int)populationSize / 2);
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver solver = new GeneticSolver(testMatrix, inv, crossover, selector, populationSize, 10);

            List <Candidate> listCand = solver.randomPopulation();

            Candidate parentX = listCand[0];
            Candidate parentY = listCand[1];

            parentX.chromoson = new List <int>()
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9
            };
            parentY.chromoson = new List <int>()
            {
                5, 3, 6, 7, 8, 1, 2, 9, 4,
            };


            inv.Mutate(parentX);
        }
예제 #4
0
        public void PMXTest2()
        {
            int populationSize = 120;

            file = root + "\\bays29.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection(5);
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver    solver   = new GeneticSolver(testMatrix, inv, crossover, selector, populationSize, 10);
            List <Candidate> listCand = new List <Candidate>();
            List <int>       GenX     = new List <int>()
            {
                5, 20, 28, 18, 14, 2, 27, 25, 8, 4, 19, 13, 12, 17, 11, 15, 16, 9, 3, 10, 22, 21, 1, 7, 24, 6, 23, 26
            };
            List <int> GenY = new List <int>()
            {
                28, 19, 11, 27, 3, 18, 17, 14, 10, 23, 8, 12, 6, 2, 22, 7, 25, 20, 4, 1, 26, 9, 5, 15, 24, 21, 16, 13
            };
            Candidate parentX = new Candidate(1, GenX, solver, solver.time.ElapsedMilliseconds.ToString());
            Candidate parentY = new Candidate(1, GenY, solver, solver.time.ElapsedMilliseconds.ToString());

            listCand.Add(parentX);
            listCand.Add(parentY);
            crossover.CrossoverPopulation(listCand, 10);
        }
예제 #5
0
        public static void createNewSolver(int mutationIndex, int crossoverIndex, int selectorIndex, int populationSize, float mutationChance, int timeMS, int selectorSize, float crossoverChance)
        {
            MutationType    mutation  = null;
            CrossoverType   crossover = null;
            SelectionType   selection = null;
            AdjacencyMatrix matrix    = new AdjacencyMatrix(tspXmlFile);

            switch (mutationIndex)
            {
            case 0:
            {
                mutation = new InversionMutation(mutationChance);
                break;
            }

            case 1:
            {
                mutation = new TranspositionMutation(mutationChance);
                break;
            }
            }

            switch (crossoverIndex)
            {
            case 0:
            {
                crossover = new PMXCrossover(crossoverChance);
                break;
            }

            case 1:
            {
                crossover = new OXCrossover(crossoverChance);
                break;
            }
            }

            switch (selectorIndex)
            {
            case 0:
            {
                selection = new TournamentSelection(selectorSize);
                break;
            }

            case 1:
            {
                selection = new RouletteSelection(selectorSize);
                break;
            }
            }
            GeneticSolver solver = null;//add parameters TO DO

            if (mutation != null && selection != null && crossover != null)
            {
                addNewSolver(new GeneticSolver(matrix, mutation, crossover, selection, populationSize, timeMS));
            }
        }
예제 #6
0
        public void ItCanInverseGenes()
        {
            var chromosome = GATestHelper.GetAlphabetCharacterChromosome();

            var mutation = new InversionMutation();

            mutation.Inverse(chromosome, 2, 6);
            Assert.AreEqual("A,B,G,F,E,D,C,H,I,J", chromosome.ToString());
        }
예제 #7
0
        public void ItCanRandomlyInverseGenes()
        {
            var chromosome = GATestHelper.GetAlphabetCharacterChromosome();
            var mutation   = new InversionMutation();

            for (int i = 0; i < 100; i++)
            {
                mutation.Mutate(chromosome, GATestHelper.GetTravelingSalesmanDefaultConfiguration());
            }
        }
        public void Should_Perform_Mutation()
        {
            var algorithm = new InversionMutation(1);
            var a         = new Element(new double[] { 8D, 3D, 2D, 9D, 1D, 0D, 7D, 6D, 5D, 4D });

            algorithm.Mutate(ref a, 1, 4);
            var expectedData = new double[] { 8D, 1D, 9D, 2D, 3D, 0D, 7D, 6D, 5D, 4D };

            Assert.Equal(expectedData, a.Data);
        }
        public void TournamentTest1()
        {
            int populationSize = 120;

            file = root + "\\bays29.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection(10);
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver solver = new GeneticSolver(testMatrix, inv, crossover, selector, populationSize, 10);
            //  listCand = selector.generateBreedingPool(listCand);
        }
        private GeneticSolver getSolver()
        {
            int populationSize = 3000;

            file = root + "\\rbg403.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection((int)(5));
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver solver = new GeneticSolver(
                testMatrix, inv, crossover, selector, populationSize, 60);

            return(solver);
        }
        public void RouletteTests1()
        {
            int populationSize = 1000;

            file = root + "\\bays29.xml";
            XDocument         tspFile    = XDocument.Load(file);
            AdjacencyMatrix   testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover      crossover  = new PMXCrossover((float)(0.80));
            RouletteSelection selector   = new RouletteSelection(100);
            InversionMutation inv        = new InversionMutation((float)0.05);

            GeneticSolver    solver   = new GeneticSolver(testMatrix, inv, crossover, selector, populationSize, 10);
            List <Candidate> listCand = solver.randomPopulation();

            listCand = selector.generateBreedingPool(listCand);
        }
        public void solverTest()
        {
            int populationSize = 3000;

            file = root + "\\rbg403.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection((int)(5));
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver solver = new GeneticSolver(
                testMatrix, inv, crossover, selector, populationSize, 480);
            var result = solver.Solve();

            result.resultToXML();
            result.ToFile();
        }
        public void InversionMutation()
        {
            var settings = new GASettings();
            var random   = A.Fake <IRandom>();
            var map      = A.Dummy <Roteiro>();
            var locals   = GetLocals(5);

            const int
                indexTruck      = 0,
                indexLocalStart = 1,
                length          = 3;

            A.CallTo(() => random.Next(A <int> ._, A <int> ._))
            .ReturnsNextFromSequence(
                indexTruck,
                indexLocalStart,
                length
                );

            var gen = new Genome(map, settings)
            {
                Trucks = new[] {
                    new Truck {
                        Locals = locals
                    }
                }
            };

            var mutate = new InversionMutation(settings, random);
            var newGen = mutate.Apply(gen);

            var genLocals = newGen.Trucks[indexTruck].Locals;

            var current = genLocals.Skip(indexLocalStart).Take(length).ToArray();
            var expect  = locals.Skip(indexLocalStart).Take(length).Reverse().ToArray();


            current.Should().BeEquivalentTo(expect, o => o.WithStrictOrdering());
        }
예제 #14
0
        public void PMXTest1()
        {
            int populationSize = 120;

            file = root + "\\bays29.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            PMXCrossover        crossover  = new PMXCrossover((float)(0.80));
            TournamentSelection selector   = new TournamentSelection(5);
            InversionMutation   inv        = new InversionMutation((float)0.05);

            GeneticSolver solver = new GeneticSolver(testMatrix, inv, crossover, selector, populationSize, 10);

            //Candidate parentX = listCand[0];
            //Candidate parentY = listCand[1];

            //parentX.chromoson = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            //parentY.chromoson = new List<int>() { 5 ,3 ,6 ,7 ,8, 1, 2, 9, 4,};

            //PMXCrossover crossover = new PMXCrossover();

            // crossover.Crossover(parentX, parentY);
        }
        internal GeneticSolver createNewSolver(bool isMultiThread)
        {
            MutationType    mutation  = null;
            CrossoverType   crossover = null;
            SelectionType   selection = null;
            GeneticSolver   solver    = null;//add parameters TO DO
            AdjacencyMatrix matrix    = new AdjacencyMatrix(tspXmlFile);

            switch (mutationIndex)
            {
            case 0:
            {
                if (!isMultiThread)
                {
                    mutation = new InversionMutation(mutationChance);
                }
                else
                {
                    mutation = new MultiThreadInversionMutation(mutationChance);
                }
                break;
            }

            case 1:
            {
                if (!isMultiThread)
                {
                    mutation = new TranspositionMutation(mutationChance);
                }
                else
                {
                    mutation = new MultiThreadTranspositionMutation(mutationChance);
                }
                break;
            }
            }

            switch (crossoverIndex)
            {
            case 0:
            {
                if (!isMultiThread)
                {
                    crossover = new PMXCrossover(crossoverChance);
                }
                else
                {
                    crossover = new MultiThreadPMXCrossover(crossoverChance);          //new PMXCrossover(crossoverChance); //
                }
                break;
            }

            case 1:
            {
                if (!isMultiThread)
                {
                    crossover = new OXCrossover(crossoverChance);
                }
                else
                {
                    crossover = new MultiThreadOXCrossover(crossoverChance);
                }
                break;
            }
            }

            switch (selectorIndex)
            {
            case 0:
            {
                if (!isMultiThread)
                {
                    selection = new TournamentSelection(selectorSize);
                }
                else
                {
                    selection = new MultiThreadTournamentSelection(selectorSize);
                }
                break;
            }

            case 1:
            {
                if (!isMultiThread)
                {
                    selection = new RouletteSelection(selectorSize);
                }
                else
                {
                    selection = new MultiThreadRouletteSelection(selectorSize);
                }
                break;
            }
            }

            if (mutation != null && selection != null && crossover != null)
            {
                if (isMultiThread)
                {
                    MultiTaskOptions.parallelOptCrossover.MaxDegreeOfParallelism = int.Parse(View.tbxLvlCrossover.Text);
                    MultiTaskOptions.parallelOptMutation.MaxDegreeOfParallelism  = int.Parse(View.tbxLvlMutation.Text);
                    MultiTaskOptions.parallelOptSelection.MaxDegreeOfParallelism = int.Parse(View.tbxLvlSelector.Text);
                    solver = new MultiTaskGeneticSolver(matrix, mutation, crossover, selection, populationSize, timeMS);
                }
                else
                {
                    solver = new SingleTaskGeneticSolver(matrix, mutation, crossover, selection, populationSize, timeMS);
                }
            }
            return(solver);
        }
 public void Setup()
 {
     inversionMutation = new InversionMutation();
 }