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); }
public void ItErrorsIfTheIndexesAreOutOfRange() { var chromosome = GATestHelper.GetAlphabetCharacterChromosome(); var mutation = new InversionMutation(); mutation.Inverse(chromosome, -1, 1); }
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); }
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 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()); }
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()); }
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(); }