![]() |
Реализация алгоритма Парето на C#Закончил работу над интересным заказом по решению вопроса оптимального выбора. С разрешения заказчика публикую этот материал, основная часть практической работы. Задача: Разработать программу на основе алгоритма нахождения множества Парето. Язык: С++, С#, Python (можно любой из перечисленных, но предпочтителен С++). Число критериев m=4:
Сначала напомню про семь шагов алгоритма Парето: Шаг 1. Положить P(Y) =Y , i =1, j = 2 . Тем самым образуется так называемое текущее множество парето-оптимальных векторов, которое в начале работы алгоритма совпадает с множеством Y , а в конце − составит искомое множество парето-оптимальных векторов. Алгоритм устроен таким образом, что искомое множество парето-оптимальных векторов получается из Y последовательным удалением заведомо неоптимальных векторов.Источник: В.Д. Ногин "Принятие решений при многих критериях. Учебно-методическое пособие". Основная задача заключается именно в том, чтобы запрограммировать данный алгоритм. Вот листинг программы: //шаг 1 int i = 1; int j = 2; int N = Convert.ToInt32(numericUpDown1.Value); //количество вариантов технологических процессов Boolean flag = true;//флаг завершения процесса отбора вариантов ... do { //шаг 2 if (sr(myArr[j], myArr[i])) { //шаг 3 mass[i] = 0; //шаг 4 if (j < N) { j = j + 1; } else { //шаг 7 } } else { //шаг 5 if (sr(myArr[i], myArr[j])) { //шаг 6 //шаг 7 } else //шаг 4 if (j < N) { j = j + 1; } else { //шаг 7 } } } while (flag);Я выбрал цикл do...while, так как у цикла всегда будет хотя бы один проход. Здесь все шаги расписаны, все как по алгоритму. Метод sr() в коде сравнивает значения массивов – его требуется писать индивидуально под каждую задачу, зависит от числа критериев и от максимизации (минимизации). Код неполный - шагов 6 и 7 нет! ![]() На самом деле я считаю, что данная реализация – это не самый оптимальный способ решения данной задачи, хотя бы по количеству строк кода. Но это решение выбрано в связи с тем, что оно максимально приближено к алгоритму – как и требуется в задаче. Итак, если вам требуется сделать практическую работу по программированию на C#, C++, Java, PHP, то вы смело можете обращаться ко мне. Пишите на почту, в скайп или обращайтесь сразу вконтакте. ![]() Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда. ![]() |
Мои услуги
|
© upread.ru 2013-2022 При перепечатке активная ссылка на сайт обязательна. |