示例#1
0
        public void OXTest1()
        {
            int populationSize = 120;

            file = root + "\\bays29.xml";
            XDocument           tspFile    = XDocument.Load(file);
            AdjacencyMatrix     testMatrix = new AdjacencyMatrix(tspFile);
            OXCrossover         crossover  = new OXCrossover((float)(1));
            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 = 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,
            };



            crossover.Crossover(parentX, parentY);
        }
示例#2
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));
            }
        }
示例#3
0
        public void Should_Perform_Crossover()
        {
            var algorithm = new OXCrossover(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[] { 2D, 3D, 4D, 9D, 1D, 0D, 7D, 5D, 6D, 8D }, a.Data);
            Assert.Equal(new double[] { 8D, 2D, 9D, 3D, 4D, 5D, 6D, 1D, 0D, 7D }, b.Data);
        }
        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);
        }