public Chromosome Clone() { Chromosome c = new Chromosome(this.GeneLength, this.Bits.Length); for (int i = 0; i <= this.Bits.Length - 1; i++) { c[i] = this.Bits[i]; } return c; }
public void Mutate(IOrganism organism) { for (int i = 0; i <= organism.Chromosomes.Count - 1; i++) { int index = rand.Next(organism.Chromosomes[i].Length); Chromosome mutated = new Chromosome(organism.Chromosomes[i].GeneLength, organism.Chromosomes[i].Length - 1); Array.Copy(organism.Chromosomes[i].Bits, 0, mutated.Bits, 0, index); Array.Copy(organism.Chromosomes[i].Bits, index + 1, mutated.Bits, index, organism.Chromosomes[i].Length - index - 1); organism.Chromosomes[i] = mutated; } }
private void SwapGenes(Chromosome chromsome, Chromosome match1, Chromosome match2) { var geneCount = chromsome.GetGenes().Count(); for (int geneIndex = 0; geneIndex < geneCount; geneIndex++) { if (chromsome.Gene(geneIndex) == match1) { chromsome.Gene(geneIndex, match2); } else if (chromsome.Gene(geneIndex) == match2) { chromsome.Gene(geneIndex, match1); } } }
public void GetGenesTest1() { Chromosome chromosome = new Chromosome(4, "01011111000011000011"); var genes = chromosome.GetGenes(); Assert.AreEqual(5, genes.Count()); Assert.AreEqual("0101", genes.ElementAt(0).ToString()); Assert.AreEqual("1111", genes.ElementAt(1).ToString()); Assert.AreEqual("0000", genes.ElementAt(2).ToString()); Assert.AreEqual("1100", genes.ElementAt(3).ToString()); Assert.AreEqual("0011", genes.ElementAt(4).ToString()); }
public void Gene(int index, Chromosome value) { if (index < 0 | index * this.GeneLength > this.Bits.Length) { throw new ArgumentException("Invalid index"); } this.OverWrite(this.GeneLength * index, value.Bits); }