Пример #1
0
        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());
        }
Пример #2
0
        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());
        }