private void DetermineCrossoverPoints(int numberOfGenes, GAConfiguration configuration) { _firstCrossoverPoint = configuration.GetRandomInteger(1, numberOfGenes - 1); _secondCrossoverPoint = configuration.GetRandomInteger(1, numberOfGenes - 1, _firstCrossoverPoint); if (_firstCrossoverPoint > _secondCrossoverPoint) { var temp = _firstCrossoverPoint; _firstCrossoverPoint = _secondCrossoverPoint; _secondCrossoverPoint = temp; } }
protected override Chromosome Perform(Chromosome father, Chromosome mother, GAConfiguration configuration) { var geneCount = father.Genes.Length; var childOne = new UnorderedChromosome(geneCount); var childTwo = new UnorderedChromosome(geneCount); var crossoverPoint = configuration.GetRandomInteger(1, father.Genes.Length - 1); for (int i = 0; i < geneCount; i++) { if (i < crossoverPoint) { childOne.Genes[i] = father.Genes[i]; childTwo.Genes[i] = mother.Genes[i]; } else { childOne.Genes[i] = mother.Genes[i]; childTwo.Genes[i] = father.Genes[i]; } } if (configuration.GetNextDouble() < 0.5) { return(childOne); } else { return(childTwo); } }
protected override Chromosome Perform(Chromosome father, Chromosome mother, GAConfiguration settings) { var geneCount = father.Genes.Length; var child = new OrderedChromosome(geneCount); var crossoverPoint = settings.GetRandomInteger(1, father.Genes.Length - 1); var seen = new HashSet <Gene>(); for (int i = 0; i < crossoverPoint; i++) { child.Genes[i] = father.Genes[i]; seen.Add(father.Genes[i]); } var count = 0; for (int i = 0; i < geneCount; i++) { if (!seen.Contains(mother.Genes[i])) { child.Genes[crossoverPoint + count] = mother.Genes[i]; seen.Add(mother.Genes[i]); count++; } } return(child); }
protected override void Perform(GAConfiguration settings, Chromosome chromosome, int geneIndex) { var secondMutationPoint = settings.GetRandomInteger(0, chromosome.Genes.Length - 1, geneIndex); if (geneIndex > secondMutationPoint) { var temp = secondMutationPoint; secondMutationPoint = geneIndex; geneIndex = temp; } Scramble(chromosome, geneIndex, secondMutationPoint, settings); }
protected override void Perform(GAConfiguration settings, Chromosome chromosome, int geneIndex) { var secondMutationPoint = settings.GetRandomInteger(0, chromosome.Genes.Length - 1, geneIndex); FlipGenes(chromosome, geneIndex, secondMutationPoint); }