Пример #1
0
        public static Tuple <DNA, DNA> CrossOver(this DNA dna1, DNA dna2)
        {
            var pos       = Rand.Next(1, DNA.DNALength);
            var newGenes1 = new List <Gene>();

            newGenes1.AddRange(dna1.Take(pos));
            newGenes1.AddRange(dna2.TakeLast(DNA.DNALength - pos));

            var newGenes2 = new List <Gene>();

            newGenes2.AddRange(dna2.Take(pos));
            newGenes2.AddRange(dna1.TakeLast(DNA.DNALength - pos));

            pos = Rand.Next(1, DNA.DNALength);
            var newGenes3 = new DNA();

            newGenes3.AddRange(newGenes1.Take(pos));
            newGenes3.AddRange(newGenes2.TakeLast(DNA.DNALength - pos));

            var newGenes4 = new DNA();

            newGenes4.AddRange(newGenes2.Take(pos));
            newGenes4.AddRange(newGenes1.TakeLast(DNA.DNALength - pos));

            return(new Tuple <DNA, DNA>(newGenes3, newGenes4));
        }
Пример #2
0
        /// <summary>
        /// DNA join (crossover operation)
        /// Appends front and back to form new DNA
        /// </summary>        
        public static DNA join(DNAPartial front, DNAPartial back)
        {
            DNA child = new DNA();

            child.AddRange(front);
            child.AddRange(back);

            return child;
        }