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); }
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); }
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); }
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(); }