public Population(int count, IPopulationGenerator <T> generator, IFitnessEvaluator <T> evaluator) { if (count <= 0) { throw new ArgumentException($"{nameof(count)} must be greater than 0. Actual: {count}."); } if (generator == null) { throw new System.ArgumentNullException(nameof(generator)); } if (evaluator == null) { throw new System.ArgumentNullException(nameof(evaluator)); } TargetSize = count; // TODO: This really shouldn't be here. We should instead pass the // population for (var i = 0; i < count; i++) { var value = generator.Generate(); var fitness = evaluator.ComputeFitness(value); var chromosome = new Chromosome <T>(value, fitness); Chromosomes.Add(chromosome); } }
Chromosome <string> ICrossOver <string> .CrossOver(Chromosome <string> parent1, Chromosome <string> parent2) { var parent1Genes = parent1.Genes; var parent2Genes = parent2.Genes; var index = Random.Next(0, parent1.Genes.Length); var newChars = new char[parent1Genes.Length]; for (int i = 0; i < newChars.Length; i++) { newChars[i] = i >= index ? parent2Genes[i] : parent1Genes[i]; } var chromosome = new Chromosome <string>(new string(newChars)); chromosome.Fitness = Evaluator.ComputeFitness(chromosome.Genes); return(chromosome); }
public Population(int count, IPopulationGenerator <T> generator, IFitnessEvaluator <T> evaluator) { Contract.Requires <ArgumentOutOfRangeException>(count > 0); Contract.Requires <ArgumentNullException>(generator != null); Contract.Requires <ArgumentNullException>(evaluator != null); TargetSize = count; Evaluator = evaluator; // TODO: This really shouldn't be here. We should instead pass the // population for (var i = 0; i < count; i++) { var value = generator.Generate(); var chromosome = new Chromosome <T>(value); chromosome.Fitness = evaluator.ComputeFitness(chromosome.Genes); Chromosomes.Add(chromosome); } }
private Chromosome <string> Mutate(Chromosome <string> chromosome) { var genes = chromosome.Genes; var random = new Random(); var index = random.Next(0, genes.Length - 1); var min = 97; var max = 122; var newCharacter = (char)random.Next(min, max); var chars = genes.ToCharArray(); chars[index] = newCharacter; var newGenes = new string(chars); return(new Chromosome <string>(new string(chars), Evaluator.ComputeFitness(newGenes))); }