public static Population GeneratePopulation(IRandom rand, int populationSize, int numberOfChromosomes, int geneLength, int minChromosomeLength, int maxChromosomeLength, List<Chromosome> geneBlacklist, List<Chromosome> geneWhitelist, Func<IOrganism, IOrganism> correctionFunction) { Population candidates = new Population(); RandomChromosomeGenerator generator = new RandomChromosomeGenerator(rand, new ChromosomePart(rand) { GeneLength = geneLength, GeneBlacklist = geneBlacklist, GeneWhitelist = geneWhitelist, MinimumChromosomeLength = minChromosomeLength, MaximumChromosomeLegnth = maxChromosomeLength }); for (int organismId = 0; organismId <= populationSize - 1; organismId++) { IOrganism organism = new Organism(); for (int chromosomeId = 0; chromosomeId <= numberOfChromosomes - 1; chromosomeId++) { organism.Chromosomes.Add(generator.GetChromosome()); } if (correctionFunction != null) { organism = correctionFunction(organism); } candidates.Add(organism); } return candidates; }
public void BitFlipMutationTest1() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "0")); IRandom rand = new Deterministic(0); BitFlipMutation mutator = new BitFlipMutation(rand); mutator.Mutate(organism); Assert.AreEqual("1", organism.Chromosomes[0].ToString()); }
public IOrganism Clone() { Organism t = new Organism(); t.Metadata = this.Metadata; foreach (Chromosome Chromosome in this.Chromosomes) { t.Chromosomes.Add(Chromosome.Clone()); } return t; }
public void PartiallyMatchedCrossoverTest2() { Organism parent1 = new Organism(); Organism parent2 = new Organism(); parent1.Chromosomes.Add(new Chromosome(3, "001110")); parent2.Chromosomes.Add(new Chromosome(3, "110001")); IRandom rand = new Deterministic(1, 0); PartiallyMatchedCrossover linker = new PartiallyMatchedCrossover(rand, 1); var children = linker.CrossLink(parent1, parent2); Assert.AreEqual("110001", children.Item1.ToString()); Assert.AreEqual("001110", children.Item2.ToString()); }
public void OnePointCrossLinkTest2() { Organism parent1 = new Organism(); Organism parent2 = new Organism(); parent1.Chromosomes.Add(new Chromosome(1, "11")); parent2.Chromosomes.Add(new Chromosome(1, "00")); IRandom rand = new Deterministic(1, 1); OnePointCrossover crossLinker = new OnePointCrossover(rand, 0); var answer = crossLinker.CrossLink(parent1, parent2); Assert.AreEqual("11", answer.Item1.Chromosomes[0].ToString()); Assert.AreEqual("00", answer.Item2.Chromosomes[0].ToString()); }
public void BitSwapMutationTest3() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "01010")); IRandom rand = new Deterministic(1); BitSwapMutation mutator = new BitSwapMutation(rand); mutator.Mutate(organism); string answer = organism.Chromosomes[0].ToString(); Assert.AreEqual("00110", answer); }
public void MutatorTest4() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "10")); int runCount = 100000; double mutationProbability = 0; MutationCounter mutator = new MutationCounter(); IRandom rand = new Rand(); Mutator mutationManager = new Mutator(rand, mutationProbability); mutationManager.AddMutator(mutator); for (int i = 0; i <= runCount - 1; i++) { mutationManager.Mutate(organism); } Assert.AreEqual(0, mutator.MutationCount); Assert.AreEqual("10", organism.Chromosomes[0].ToString()); }
public void MutatorTest1() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "10")); MutationCounter mutator = new MutationCounter(); mutator.Mutate(organism); mutator.Mutate(organism); mutator.Mutate(organism); mutator.Mutate(organism); Assert.AreEqual(4, mutator.MutationCount); Assert.AreEqual("10", organism.Chromosomes[0].ToString()); }
public void InsertionMutationTest2() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "10")); IRandom rand = new Deterministic(0, 0); InsertionMutation mutator = new InsertionMutation(rand); mutator.Mutate(organism); string answer = organism.Chromosomes[0].ToString(); Assert.AreEqual("010", answer); }
public void GeneSwapTest3() { Organism organism = new Organism(); organism.Chromosomes.Add(new Chromosome(1, "0011")); IRandom rand = new Deterministic(0); GeneSwapMutation mutator = new GeneSwapMutation(rand, 2); mutator.Mutate(organism); Assert.AreEqual("1100", organism.Chromosomes[0].ToString()); }