Пример #1
0
        /// <summary>
        /// Ermittelt alle Nachbarn aus zwei Genomen für ein bestimmtes Allel
        /// </summary>
        /// <returns>Liste mit Nachbarn</returns>
        /// <param name="value">Allel</param>
        /// <param name="genomeA">Genome A</param>
        /// <param name="genomeB">Genome B</param>
        private Genome GetNeighboursOfValue(double value, Genome genomeA, Genome genomeB)
        {
            //Kreisgenom simulieren
            List<double> a = genomeA.ToList();
            a.Insert(0,genomeA[genomeA.Count-1]);
            a.Add(genomeA[0]);
            List<double> b = genomeB.ToList();
            b.Insert(0,genomeB[genomeB.Count-1]);
            b.Add(genomeB[0]);

            //Nachbarn
            Genome neighbours = new Genome();
            neighbours.Add(a[genomeA.IndexOf(value)]);
            neighbours.Add(a[genomeA.IndexOf(value)+2]);
            neighbours.Add(b[genomeB.IndexOf(value)]);
            neighbours.Add(b[genomeB.IndexOf(value)+2]);

            //Doppelte Einträge entfernen und ab damit
            return new GenomeReal(neighbours.Distinct().ToArray());
        }