Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. public static int Selection(double[] Arr1, double[] Arr2, double[] Arr3, double[] Fit, int Y, double SumFitness, double[] ParentsForCros)
  2. {
  3. double[] Probability = new double[Y];
  4. double[] PartOfSelection = new double[Y];
  5. double NumberOfParents;
  6. NumberOfParents = (double)13 / 100 * Y;
  7. double[] Parents = new double[Y];
  8. double[,] CrosParents = new double[(int)NumberOfParents, (int)NumberOfParents];
  9. int NumberOfUniqueChilds = (((int)NumberOfParents-1)/2*(int)NumberOfParents);//Число потомков имеющих уникальную пару родителей(Не встречающуюся более)
  10. ParentsForCros = new double[(int)NumberOfParents*4*2];//Родители, которые пойдут в скрещивание
  11. int[] NumberOfChilds = new int[4 * (int)NumberOfParents];//Номер родителя
  12. int[] Childs = new int[4 * (int)NumberOfParents];//"Значение" родителя
  13. int NewPopulationSize1 = Y + 4*(int)NumberOfParents;
  14. Random rnd = new Random();
  15. for (int i = 0; i < (int)NumberOfParents; i++)
  16. {
  17. int ii = i;
  18. Parents[i] = rnd.Next(0, Y-1);
  19. for (int j = ii-1; j > -1; j--)
  20. {
  21. while (Parents[i] == Parents[j])
  22. {
  23. Parents[i] = rnd.Next(0, Y - 1);
  24. }
  25. }
  26. //Parents[i, j] = rnd.Next(0, NewPopulationSize); //Подумать о [rnd(0.1000)/10] для увеличения рандомизации
  27. //double PartialSumOfFit = 0;
  28. }
  29. for (int i = 0; i < (int)NumberOfParents-1; i++)
  30. {
  31. for (int j = 1; j < (int)NumberOfParents; j++)
  32. {
  33. if (j > i)
  34. {
  35. CrosParents[i, j] = 1;//Создаём своеобразную случайную выборку по принципу флага
  36. }
  37. }
  38. }
  39. for (int i = 0; i < NumberOfUniqueChilds-4*NumberOfParents; i++)
  40. {
  41. int index1 = rnd.Next(0, (int)NumberOfParents - 1);
  42. int index2 = rnd.Next(1, (int)NumberOfParents);
  43. while (CrosParents[index1, index2] == 0)
  44. {
  45. index1 = rnd.Next(0, (int)NumberOfParents - 1);
  46. index2 = rnd.Next(1, (int)NumberOfParents);
  47. }
  48. CrosParents[index1, index2] = 0;
  49. }
  50. int k = 0;
  51. for (int i = 0; i < (int)NumberOfParents - 1; i++)
  52. {
  53. for (int j = 1; j < (int)NumberOfParents; j++)
  54. {
  55. if (CrosParents[i, j] == 0)
  56. {
  57. continue;
  58. }
  59. else
  60. {//Создаём пары родителей
  61. ParentsForCros[k] = Parents[i];
  62. k++;
  63. ParentsForCros[k] = Parents[j];
  64. k++;
  65. }
  66. }
  67. }
  68. return NewPopulationSize1; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement