示例#1
0
        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);
        }