コード例 #1
0
        protected override DNA <int> Crossover(DNA <int> parent1, DNA <int> parent2)
        {
            DNA <int>  child          = (DNA <int>)parent1.Clone();
            int        crossOverIndex = rand.Next(tsp.CityCount - rand.Next(tsp.CityCount / 4, tsp.CityCount / 2));
            List <int> visitedCities  = new List <int>();

            for (int j = 0; j < crossOverIndex; j++)
            {
                visitedCities.Add(parent1.Data[j]);
            }

            for (int j = 0; j < tsp.CityCount; j++)
            {
                if (!visitedCities.Contains(parent2.Data[j]))
                {
                    child.Data[crossOverIndex++] = parent2.Data[j];
                }
            }
            return(child);
        }