Пример #1
0
        /// <summary>
        /// edge recombination operator (ER)
        /// Precondition: parent1 and parent2 contain the same alleles.
        /// Postcondition: child contains the same alleles as parent1.
        /// </summary>
        /// <param name="parent1"></param>
        /// <param name="parent2"></param>
        /// <returns></returns>
        public static Genotype EdgeRecombinationCrossover(Genotype parent1, Genotype parent2)
        {
            var count = parent1.Count;

            if (count <= 1)
            {
                return(parent1);
            }

            var neighbours = GetNeighbours(parent1, parent2);

            var previousAllele = parent1[0];
            var child          = new Genotype(count)
            {
                previousAllele
            };

            while (child.Count < count)
            {
                DeleteNeighbour(neighbours, previousAllele);
                var insertAllele = FindNextAllele(neighbours, previousAllele);
                neighbours.Remove(previousAllele);
                child.Add(insertAllele);
                previousAllele = insertAllele;
            }

            return(child);
        }