public void GetPopulations(int NumGenerations, int stop) { bool block = false;//блокировка ограничений на количество итераций, по умолчанию блок выключен int count = 0; if (stop > 0) { block = true; count = 0;//счетчик } //---------объявления------------- Day[] mainPerson = new Day[6]; // основная особь, в начале необходимо скопировать в неё экземпляр из первого поколения double mainMark; // оценка основной особи, с которой происходит сравнение при отборе //---------присваивания------------- for (int i = 0; i < 6; i++) { mainPerson[i] = new Day(main.days[i]); } mainMark = main.firstmark; unicLessons = main.unicLessons; generations = main.generations; //вырастим numPopulations поколений for (int j = 0; j < NumGenerations; j++) { List <Day[]> population = new List <Day[]>();//популяция из нескольких особей string[] names = new string[15]; double[] marks = new double[15]; //возьмем основную особь и составим 15 вариантов её скрещивания по заранее составленной схеме for (int i = 0; i < 15; i++) { Day[] person = new Day[6]; for (int k = 0; k < 6; k++) { person[k] = new Day(); } person = GetNewGeneration(mainPerson, i); Rating ratio = new Rating(person, main.maxStack, unicLessons); names[i] = "популяция #" + (j + 1) + " особь под номером #" + ((j * 15) + (i + 1)); marks[i] = ratio.TotalMark();//считаем общую оценку особи person = ratio.InputMarksAndDays(); population.Add(person); } int index = -1; for (int i = 0; i < 15; i++) { if (mainMark > marks[i]) { mainMark = marks[i]; index = i; } } if (index != -1)//если родительская особь лучше своих поколений, то все поколение бракуется | иначе назначается новая особь, а результат добавляется в список поколений { if (block) { count = 0; //обнуление счетчика } for (int i = 0; i < 6; i++) { mainPerson[i] = new Day(population[index][i]); } Generations generic = new Generations(names[index]); generic.mark = mainMark; generic.Input(mainPerson); generations.Add(new Generations(generic));//добавляем новую особь в список } if (block) { count++; if (count == stop) { j = NumGenerations; //если в течение <stop> не было улучшений, то выходим из цикла } } } }