public int Genetic(ref Generation g, bool mut_output, GoldbergModel gm) { int oldMin = 0; int repeat = 1;//для людей g.FillArrayOfPopulation(); gm.vitality(g.quantityProcessors, g.quantityTasks, ref g.ArrayOfTasks, ref g.ArrayOfPopulation, ref g.ArrayVitality, g.populationSize); //ф-я выживаемости //using (StreamWriter sw = File.AppendText(Generation.Path)) //{ // sw.WriteLine("Распределение по процессорам в общем диапазоне от 0..255"); //} //PrintArray(ref g.ArrayOfPopulation, g.populationSize, g.quantityTasks);// вывод матрицы 255 особей //using (StreamWriter sw = File.AppendText(Generation.Path)) //{ // sw.WriteLine("Определение процессора, подсчет максимальной загрузки"); //} //PrintArray1(ref g.ArrayOfPopulation, g.populationSize, g.quantityTasks, g.quantityProcessors, ref g.ArrayVitality); //вывод матрицы с ф-й выживаемости //using (StreamWriter sw = File.AppendText(Generation.Path)) //{ // sw.WriteLine("Результаты поколений"); //} while (repeat != (Convert.ToInt32(textBox7.Text))) { gm.Cross(mut_output, 0, g.quantityTasks, g.populationSize, ref g.ArrayOfPopulation, g.probabilityСrossing, g.quantityProcessors, g.probabilityMutation, ref g.ArrayOfTasks, ref g.ArrayVitality);//mut_output if (oldMin == g.ArrayVitality.Min()) { repeat++; } else { repeat = 1; } oldMin = g.ArrayVitality.Min(); // using (StreamWriter sw = File.AppendText(Generation.Path)) // { // for (int i = 0; i < g.populationSize; i++) // { // sw.Write(setwf(g.ArrayVitality[i].ToString(), 5)); // } // sw.WriteLine(" = " + g.ArrayVitality.Min()); // } //PrintArray1(ref g.ArrayOfPopulation, g.quantityTasks, g.populationSize, g.quantityProcessors, ref g.ArrayVitality); } return(g.ArrayVitality.Min()); }
public int SortArr(ref Generation g, bool mut_output, int numberSort, GoldbergModel gm) { int oldMin = 0; int repeat = 1;//для людей AllSort sortTasks = new AllSort(); CriticalPathMethod cmp = new CriticalPathMethod(); int[][] ar; using (StreamWriter sw = File.AppendText(Generation.Path)) { switch (numberSort) { case 1: sw.WriteLine("Отсортированная матрица заданий (модификация 1)"); ar = sortTasks.Sort1Tasks(g.quantityTasks, g.quantityProcessors, ref g.ArrayOfTasks); break; case 2: sw.WriteLine("Отсортированная матрица заданий (модификация 2)"); ar = sortTasks.Sort2Tasks(g.quantityTasks, g.quantityProcessors, ref g.ArrayOfTasks); break; case 3: sw.WriteLine("Отсортированная матрица заданий (модификация 3)"); ar = sortTasks.Sort3Tasks(g.quantityTasks, g.quantityProcessors, ref g.ArrayOfTasks); break; } } PrintArray(ref g.ArrayOfTasks, g.quantityTasks, g.quantityProcessors); using (StreamWriter sw = File.AppendText(Generation.Path)) { sw.WriteLine("Распределение задач по процессорам"); } g.FillArrayOfPopulation(); //заполнение до распределения по процессорам т.к так при распределении формируется эоитная особь int z = cmp.distributionByProcessors(false, g.quantityTasks, g.quantityProcessors, ref g.ArrayOfTasks, ref g.ArrayOfPopulation, 0); //тут записывается элитная особь 0 using (StreamWriter sw = File.AppendText(Generation.Path)) { sw.WriteLine("Максимальная загрузка " + z); } using (StreamWriter sw = File.AppendText(Generation.Path)) { sw.WriteLine("Генетическим алгоритмом, где этита(особь 0) получена методом критического пути с модификацией 1"); sw.WriteLine("Матрица особей"); } gm.vitality(g.quantityProcessors, g.quantityTasks, ref g.ArrayOfTasks, ref g.ArrayOfPopulation, ref g.ArrayVitality, g.populationSize); //ф-я выживаемости PrintArray(ref g.ArrayOfPopulation, g.populationSize, g.quantityTasks); // вывод матрицы 255 особей PrintArray1(ref g.ArrayOfPopulation, g.populationSize, g.quantityTasks, g.quantityProcessors, ref g.ArrayVitality); //вывод матрицы с ф-й выживаемости if (Revolution(ref g)) { PrintArray1(ref g.ArrayOfPopulation, g.populationSize, g.quantityTasks, g.quantityProcessors, ref g.ArrayVitality); //вывод матрицы с ф-й выживаемости } using (StreamWriter sw = File.AppendText(Generation.Path)) { sw.WriteLine("Результаты поколений"); } while (repeat != (Convert.ToInt32(textBox7.Text))) { gm.Cross(mut_output, 1, g.quantityTasks, g.populationSize, ref g.ArrayOfPopulation, g.probabilityСrossing, g.quantityProcessors, g.probabilityMutation, ref g.ArrayOfTasks, ref g.ArrayVitality); //элита в скрещивании не участвует. mut_output if (oldMin == g.ArrayVitality.Min()) { repeat++; } else { repeat = 1; } oldMin = g.ArrayVitality.Min(); using (StreamWriter sw = File.AppendText(Generation.Path)) { for (int i = 0; i < g.populationSize; i++) { sw.Write(setwf(g.ArrayVitality[i].ToString(), 5)); } sw.WriteLine(" = " + g.ArrayVitality.Min()); } } return(g.ArrayVitality.Min()); }