Пример #1
0
        /// <summary>
        /// crossover - Performs a random single crossover two parents
        /// </summary>
        /// <param name="parentX">First Parent</param>
        /// <param name="parentY">Second Parent</param>
        /// <returns>Child as a result of a crossover</returns>
        public static Board crossover(Board parentX, Board parentY)
        {
            Board  child;
            Random r = new Random();

            int crossoverPoint = r.Next(1, NUM_QUEENS - 1);

            // Obtain both parts of the array from the parents, then produce a single child
            int[] firstHalf  = parentX.getBoard().Take(crossoverPoint).ToArray();
            int[] secondHalf = parentY.getBoard().Skip(crossoverPoint).Take(NUM_QUEENS - crossoverPoint).ToArray();
            int[] childArray = firstHalf.Concat(secondHalf).ToArray();

            child = new Board(childArray);

            return(child);
        }
Пример #2
0
        /// <summary>
        /// crossover - Performs a random single crossover two parents
        /// </summary>
        /// <param name="parentX">First Parent</param>
        /// <param name="parentY">Second Parent</param>
        /// <returns>Child as a result of a crossover</returns>
        public static Board crossover(Board parentX, Board parentY)
        {
            Board child;
            Random r = new Random();

            int crossoverPoint = r.Next(1, NUM_QUEENS - 1);

            // Obtain both parts of the array from the parents, then produce a single child
            int[] firstHalf = parentX.getBoard().Take(crossoverPoint).ToArray();
            int[] secondHalf = parentY.getBoard().Skip(crossoverPoint).Take(NUM_QUEENS - crossoverPoint).ToArray();
            int[] childArray = firstHalf.Concat(secondHalf).ToArray();

            child = new Board(childArray);

            return child;
        }