public IEnumerable<IChromosome> GeneratePopulation(int size) { var population = new IChromosome[size]; for (int i = 0; i < size; i++) population[i] = new VectorChromosome<T>(elements.Shuffle(random), mutationManager, evaluator); return population; }
private void TestCycleCrossover(string[] parent1, string[] parent2, string[] expectedChild) { var chromosome1 = new VectorChromosome <string>(parent1, null, null); var chromosome2 = new VectorChromosome <string>(parent2, null, null); var child = (VectorChromosome <string>)crossoverManager.Crossover(chromosome1, chromosome2); child.AssertAreTheSame(expectedChild); }
public IEnumerable <IChromosome> GeneratePopulation(int size) { var population = new IChromosome[size]; for (int i = 0; i < size; i++) { var vector = repeatElements ? SelectKRandomElementsRepeating(elements, length) : elements.SelectKRandomElementsNonRepeating(length).Shuffle(random); population[i] = new VectorChromosome <T>(vector, mutationManager, evaluator); } return(population); }
public static List <int> K_CrossoverGetCrossoverPointsAndAssertThatGenomesAreRight(VectorChromosome <int> newChromosome, VectorChromosome <int> chromosome2, VectorChromosome <int> chromosome1) { var crossoverPoints = new List <int>(); var takingFromFirstChromosome = true; for (int i = 0; i < chromosome1.Length; i++) { if (takingFromFirstChromosome) { if (newChromosome[i] == chromosome2[i]) { crossoverPoints.Add(i); takingFromFirstChromosome = !takingFromFirstChromosome; } else if (newChromosome[i] != chromosome1[i]) { Assert.Fail($"Got Genome that dosn't seem to have came from anywhere. 1: {chromosome1}; 2 {chromosome2}; newChromosome {newChromosome} "); } } else { if (newChromosome[i] == chromosome1[i]) { crossoverPoints.Add(i); takingFromFirstChromosome = !takingFromFirstChromosome; } else if (newChromosome[i] != chromosome2[i]) { Assert.Fail($"Got Genome that doesn't seem to have came from anywhere. 1: {chromosome1}; 2 {chromosome2}; newChromosome {newChromosome} "); } } } for (int j = chromosome1.Length; j < chromosome2.Length && j < newChromosome.GetVector().Length; j++) { Assert.AreEqual(chromosome2[j], newChromosome[j]); } return(crossoverPoints); }