/// <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); }
/// <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; }