Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static int Selection(double[] Arr1, double[] Arr2, double[] Arr3, double[] Fit, int Y, double SumFitness, double[] ParentsForCros)
- {
- double[] Probability = new double[Y];
- double[] PartOfSelection = new double[Y];
- double NumberOfParents;
- NumberOfParents = (double)13 / 100 * Y;
- double[] Parents = new double[Y];
- double[,] CrosParents = new double[(int)NumberOfParents, (int)NumberOfParents];
- int NumberOfUniqueChilds = (((int)NumberOfParents-1)/2*(int)NumberOfParents);//Число потомков имеющих уникальную пару родителей(Не встречающуюся более)
- ParentsForCros = new double[(int)NumberOfParents*4*2];//Родители, которые пойдут в скрещивание
- int[] NumberOfChilds = new int[4 * (int)NumberOfParents];//Номер родителя
- int[] Childs = new int[4 * (int)NumberOfParents];//"Значение" родителя
- int NewPopulationSize1 = Y + 4*(int)NumberOfParents;
- Random rnd = new Random();
- for (int i = 0; i < (int)NumberOfParents; i++)
- {
- int ii = i;
- Parents[i] = rnd.Next(0, Y-1);
- for (int j = ii-1; j > -1; j--)
- {
- while (Parents[i] == Parents[j])
- {
- Parents[i] = rnd.Next(0, Y - 1);
- }
- }
- //Parents[i, j] = rnd.Next(0, NewPopulationSize); //Подумать о [rnd(0.1000)/10] для увеличения рандомизации
- //double PartialSumOfFit = 0;
- }
- for (int i = 0; i < (int)NumberOfParents-1; i++)
- {
- for (int j = 1; j < (int)NumberOfParents; j++)
- {
- if (j > i)
- {
- CrosParents[i, j] = 1;//Создаём своеобразную случайную выборку по принципу флага
- }
- }
- }
- for (int i = 0; i < NumberOfUniqueChilds-4*NumberOfParents; i++)
- {
- int index1 = rnd.Next(0, (int)NumberOfParents - 1);
- int index2 = rnd.Next(1, (int)NumberOfParents);
- while (CrosParents[index1, index2] == 0)
- {
- index1 = rnd.Next(0, (int)NumberOfParents - 1);
- index2 = rnd.Next(1, (int)NumberOfParents);
- }
- CrosParents[index1, index2] = 0;
- }
- int k = 0;
- for (int i = 0; i < (int)NumberOfParents - 1; i++)
- {
- for (int j = 1; j < (int)NumberOfParents; j++)
- {
- if (CrosParents[i, j] == 0)
- {
- continue;
- }
- else
- {//Создаём пары родителей
- ParentsForCros[k] = Parents[i];
- k++;
- ParentsForCros[k] = Parents[j];
- k++;
- }
- }
- }
- return NewPopulationSize1; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement