public override SudokuChromesome Crossover(SudokuChromesome g) { Sudokufitness aGene1 = new Sudokufitness(); Sudokufitness aGene2 = new Sudokufitness(); g.CopyGeneInfo(aGene1); g.CopyGeneInfo(aGene2); Sudokufitness CrossingGene = (Sudokufitness)g; if (TheSeed.Next(2) == 1) { for (int j = 0; j < 9; j++) { CrossoverPoint = TheSeed.Next(8) + 1; for (int k = 0; k < CrossoverPoint; k++) { aGene1.TheArray[k, j] = CrossingGene.TheArray[k, j]; // aGene1.TheArray[8 - k,j] = TheArray[8-k, j]; aGene2.TheArray[k, j] = TheArray[k, j]; // aGene2.TheArray[8 - k ,j] = CrossingGene.TheArray[8 - k,j]; } for (int k = CrossoverPoint; k < 9; k++) { aGene2.TheArray[k, j] = CrossingGene.TheArray[k, j]; // aGene1.TheArray[8 - k,j] = TheArray[8-k, j]; aGene1.TheArray[k, j] = TheArray[k, j]; // aGene2.TheArray[8 - k ,j] = CrossingGene.TheArray[8 - k,j]; } } } else { for (int j = 0; j < 9; j++) { CrossoverPoint = TheSeed.Next(8) + 1; for (int k = 0; k < CrossoverPoint; k++) { aGene1.TheArray[j, k] = CrossingGene.TheArray[j, k]; // aGene1.TheArray[8 - k,j] = TheArray[8-k, j]; aGene2.TheArray[j, k] = TheArray[j, k]; // aGene2.TheArray[8 - k ,j] = CrossingGene.TheArray[8 - k,j]; } for (int k = CrossoverPoint; k < 9; k++) { aGene2.TheArray[j, k] = CrossingGene.TheArray[j, k]; // aGene1.TheArray[8 - k,j] = TheArray[8-k, j]; aGene1.TheArray[j, k] = TheArray[j, k]; // aGene2.TheArray[8 - k ,j] = CrossingGene.TheArray[8 - k,j]; } } } /* * SudokuGenome CrossingGene = (SudokuGenome)g; * for (int i = 0; i < CrossoverPoint; i++) * { * for (int j = 0; j < CrossoverPoint; j++) * { * aGene1.TheArray[i,j] = CrossingGene.TheArray[i,j]; * aGene2.TheArray[i,j] = TheArray[i, j]; * } * } * * for (int i = CrossoverPoint; i < 9; i++) * for (int j = CrossoverPoint; j < 9; j++) * { * aGene1.TheArray[i,j] = TheArray[i,j]; * aGene2.TheArray[i,j] = CrossingGene.TheArray[i,j]; * } * * for (int i = CrossoverPoint; i < 9; i++) * for (int j = 0; j < CrossoverPoint; j++) * { * aGene1.TheArray[i,j] = TheArray[i,j]; * aGene2.TheArray[i,j] = CrossingGene.TheArray[i,j]; * } * * for (int i = 0; i < CrossoverPoint; i++) * for (int j = CrossoverPoint; j < 9; j++) * { * aGene1.TheArray[i,j] = CrossingGene.TheArray[i,j]; * aGene2.TheArray[i,j] = TheArray[i,j]; * } */ // 50/50 chance of returning gene1 or gene2 Sudokufitness aGene = null; if (TheSeed.Next(2) == 1) { aGene = aGene1; } else { aGene = aGene2; } return(aGene); }