public void TransportMutationTest1()
        {
            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);
            TranspositionMutation mutation   = new TranspositionMutation((float)1);

            GeneticSolver solver = new GeneticSolver(testMatrix, mutation, 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,
            };


            mutation.Mutate(parentX);
        }
示例#2
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);
        }
示例#3
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));
            }
        }
        public void Should_Perform_Crossover()
        {
            var algorithm = new PMXCrossover(1);
            var a         = new Element(new double[] { 0D, 1D, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D });
            var b         = new Element(new double[] { 8D, 3D, 2D, 9D, 1D, 0D, 7D, 6D, 5D, 4D });

            algorithm.Crossover(ref a, ref b, 2, 6);

            Assert.Equal(new double[] { 5D, 4D, 2D, 9D, 1D, 0D, 7D, 6D, 8D, 3D }, a.Data);
            Assert.Equal(new double[] { 8D, 9D, 2D, 3D, 4D, 5D, 6D, 7D, 0D, 1D }, b.Data);
        }
        public void PMXCrossover_Cross_ReturnChildren(int position, int length, int[] expected)
        {
            var random       = new PredeterminedRandom(new double[] { position, length });
            var parameterSet = new ParameterSet();
            var crossover    = new PMXCrossover(random, parameterSet, null);
            var parents      = PermutationTestData.CreateTestChromosomes();

            var children = crossover.Cross(parents[0], parents[1]);

            children.Count.Should().Be(2);
            ((PermutationChromosome)children[0]).Genes.Should().BeEquivalentTo(expected);
        }
        public void PMXCrossover_CreateGeneMap_GetUniqueValue_ReturnUnique(int position, int expected)
        {
            var random       = new PredeterminedRandom(new double[0]);
            var parameterSet = new ParameterSet();
            var crossover    = new PMXCrossover(random, parameterSet, null);
            var chromosomes  = PermutationTestData.CreateTestChromosomes();
            var range        = new GeneRange(3, 4);
            var geneMap      = crossover.GenerateGeneMap(((PermutationChromosome)chromosomes[0]).Genes, range);

            var result = crossover.GetUniqueGeneValue(((PermutationChromosome)chromosomes[1]).Genes, geneMap, position);

            result.Should().Be(expected);
        }
        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 PMXCrossover_CopyWithDuplicationElimination_CopyData(int begin, int end, int[] expected)
        {
            var random       = new PredeterminedRandom(new double[0]);
            var parameterSet = new ParameterSet();
            var crossover    = new PMXCrossover(random, parameterSet, null);
            var chromosomes  = PermutationTestData.CreateTestChromosomes();
            var range        = new GeneRange(3, 3);
            var geneMap      = crossover.GenerateGeneMap(((PermutationChromosome)chromosomes[0]).Genes, range);
            var childGenes   = new int[((PermutationChromosome)chromosomes[0]).Genes.Length];

            var length = end - begin;

            crossover.CopyWithDuplicationElimination(((PermutationChromosome)chromosomes[1]).Genes, childGenes, geneMap, begin, end);
            var result = new int[length];

            Array.Copy(childGenes, begin, result, 0, length);

            result.Should().BeEquivalentTo(expected);
        }
示例#12
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()
 {
     pmxCrossover = new PMXCrossover();
 }