ВВЕДЕНИЕ
Каждый человек время от времени оказывается в ситуации, когда достижение некоторого результата может быть осуществлено не единственным способом. В таких случаях приходится отыскивать наилучший способ. Однако в различных ситуациях наилучшими могут быть совершенно разные решения. Все зависит от выбранного или заданного критерия. На практике оказывается, что в большинстве случаев понятие "наилучший" может быть выражено количественными критериями – минимум затрат, минимум времени, максимум прибыли и т.д. Поэтому возможна постановка математических задач отыскания оптимального (optimum – наилучший) результата, так как принципиальных различий в отыскании наименьшего или наибольшего значения нет. Задачи на отыскание оптимального решения называются задачами оптимизации. Оптимальный результат, как правило, находится не сразу, а в результате процесса, называемого процессом оптимизации. Применяемые в процессе оптимизации методы получили название методов оптимизации. Чтобы решить практическую задачу надо перевести ее на математический язык, то есть составить ее математическую модель[1].
Математическая модель представляет собой стройную и глубокую совокупность знаний о математических моделях со своими проблемами, с собственными путями развития, обусловленными внутренними и внешними причинами и задачами. Математика дает удобные и плодотворные способы описания самых разнообразных явлений реального мира и тем самым выполняет в этом смысле функцию языка. Эту роль математики прекрасно осознавал Галилей, сказавший: "Философия написана в грандиозной книге – Вселенной, которая открыта нашему пристальному взгляду. Но понять эту книгу может лишь тот, кто научился понимать ее язык и знаки, которыми она изложена. Написана же она на языке математики".
Итак, математика – это область человеческого знания, в которой изучаются математические модели.
Часто в математической модели требуется найти наибольшее или наименьшее значение некоторой функции на некотором множестве, то есть решить задачу оптимизации. Методов решения задач оптимизации достаточно много. Некоторые из них рассматривались при отыскании экстремальных значений функций одной и многих вещественных переменных. Кроме точных методов широко используются и приближенные, например, метод дихотомии и т.д.
Знание методов нахождения оптимального решения позволяет инженеру и офицеру выбирать наиболее эффективные и самые экономичные способы эксплуатации и ремонта машин, находить оптимальные решения тактических задач.
Целью данной курсовой работы является разработка программного комплекса, который будет осуществлять выбор пары станков, удовлетворяющих ограничениям и являются оптимальным выбором для предприятия. Выбор осуществляется при помощи однокритериальной и многокритериальной оптимизации.
1 АНАЛИТИЧЕСКИЙ ОБЗОР ЛИТЕРАТУРЫ В ОБЛАСТИ МНОГОКРИТЕРИАЛЬНОЙ ОПТИМИЗАЦИИ
1.1 Основные понятия оптимизации проектных решений
Оптимизация в широком смысле слова находит применение в науке, технике и в любой другой области человеческой деятельности.
Оптимизация – целенаправленная деятельность, заключающаяся в получении наилучших результатов при соответствующих условиях.
Поиски оптимальных решений привели к созданию специальных математических методов и уже в 18 веке были заложены математические основы оптимизации (вариационное исчисление, численные методы и др). Однако до второй половины 20 века методы оптимизации во многих областях науки и техники применялись очень редко, поскольку практическое использование математических методов оптимизации требовало огромной вычислительной работы, которую без ЭВМ реализовать было крайне трудно, а в ряде случаев – невозможно. Особенно большие трудности возникали при решении задач оптимизации процессов в химической технологии из–за большого числа параметров и их сложной взаимосвязи между собой. При наличии ЭВМ задача заметно упрощается [2].
Постановка задачи оптимизации предполагает существование конкурирующих свойств процесса, например:
– количество продукции – расход сырья"
–количество продукции – качество продукции"
Выбор компромиссного варианта для указанных свойств и представляет собой процедуру решения оптимизационной задачи.
При постановке задачи оптимизации необходимо наличие объекта оптимизации и цели оптимизации. При этом формулировка каждой задачи оптимизации должна требовать экстремального значения лишь одной величины, т.е. одновременно системе не должно приписываться два и более критериев оптимизации, т.к. практически всегда экстремум одного критерия не соответствует экстремуму другого.
Типичный пример неправильной постановки задачи оптимизации: "получить максимальную производительность при минимальной себестоимости".
Ошибка заключается в том, что ставится задача поиска оптимума 2–х величин, противоречащих друг другу по своей сути.
Правильная постановка задачи могла быть следующая:
– получить максимальную производительность при заданной себестоимости;
– получить минимальную себестоимость при заданной производительности;
В первом случае критерий оптимизации – производительность а во втором – себестоимость.
Так же при постановке задачи оптимизации нужны:
– наличие ресурсов оптимизации, под которыми понимают возможность выбора значений некоторых параметров оптимизируемого объекта. Объект должен обладать определенными степенями свободы – управляющими воздействиями.
– возможность количественной оценки оптимизируемой величины, поскольку только в этом случае можно сравнивать эффекты от выбора тех или иных управляющих воздействий.
– учет ограничений.
Обычно оптимизируемая величина связана с экономичностью работы рассматриваемого объекта (аппарат, цех, завод ). Оптимизируемый вариант работы объекта должен оцениваться какой–то количественной мерой–критерием оптимальности.
Критерием оптимальности называется количественная оценка оптимизируемого качества объекта.
На основании выбранного критерия оптимальности составляется целевая функция, представляющая собой зависимость критерия оптимальности от параметров, влияющих на ее значение.
Вид критерия оптимальности или целевой функции определяется конкретной задачей оптимизации.
Таким образом, задача оптимизации сводится к нахождению экстремума целевой функции.
Наиболее общей постановкой оптимальной задачи является выражение критерия оптимальности в виде экономической оценки (производительность, себестоимость продукции, прибыль, рентабельность).Однако в частных задачах оптимизации, когда объект является частью технологического процесса, не всегда удается или не всегда целесообразно выделять прямой экономический показатель, который бы полностью характеризовал эффективность работы рассматриваемого объекта. В таких случаях критерием оптимальности может служить технологическая характеристика, косвенно оценивающая экономичность работы агрегата (время контакта, выход продукта, степень превращения, температура). Например устанавливается оптимальный температурный профиль, длительность цикла – "реакция – регенерация". Но в любом случае любой критерий оптимальности имеет экономическую природу [3].
Критерий оптимальности должен иметь ясный физический смысл ,отражать наиболее существенные стороны процесса , должен иметь количественную оценку.
При этом всякое изменение значений управляющих параметров двояко сказывается на величине R:
– прямо, так как управляющие параметры непосредственно входят в выражение критерия оптимизации;
– косвенно – через изменение выходных параметров процесса, которые зависят от управляющих.
Как правило, для конкретных задач оптимизации химических производств критерий оптимальности не может быть записан в виде аналитического выражения.
В принципе, для оптимизации вместо математической модели можно использовать и сам объект, однако оптимизация опытным путем имеет ряд существенных недостатков:
– необходим реальный объект;
– необходимо изменять технологический режим в значительных пределах, что не всегда возможно;
– длительность испытаний и сложность обработки данных. Наличие математической модели (при условии, что она достаточно надежно описывает процесс) позволяет значительно проще решить задачу оптимизации аналитическим либо численным методами.
Итак, для решения задачи оптимизации необходимо:
– составить математическую модель объекта оптимизации,
– выбрать критерий оптимальности и составить целевую функцию,
– установить возможные ограничения, которые должны накладываться на переменные,
– выбрать метод оптимизации, который позволит найти экстремальные значения искомых величин.
Принято различать задачи статической оптимизации для процессов, протекающих в установившихся режимах, и задачи динамической оптимизации.
В первом случае решаются вопросы создания и реализации оптимальной модели процесса, во втором – задачи создания и реализации системы оптимального управления процессом при неустановившихся режимах эксплуатации.
Если требуется определить экстремум целевой функции без задания условий на какие–либо другие величины, то такая оптимизация называется безусловной. Такие критерии обычно используются при решении частных задач оптимизации (например, определение максимальной концентрации целевого продукта, оптимального времени пребывания реакционной смеси в аппарате и т.п.)[4].
Если необходимо установить экстремум целевой функции при некоторых условиях, которые накладываются на ряд других величин (например, определение максимальной производительности при заданной себестоимости, определение оптимальной температуры при ограничениях по термостойкости катализатора и др.), то такая оптимизация называется условной.
Процедура решения задачи оптимизации обязательно включает, помимо выбора управляющих параметров, еще и установление ограничений на эти параметры.
Ограничения могут накладываться как по технологическим, так и по экономическим соображениям.
В зависимости от управляющих параметров различают следующие задачи:
– оптимизация при одной управляющей переменной – одномерная оптимизация,
– оптимизация при нескольких управляющих переменных – многомерная оптимизация,
– оптимизация при неопределённости данных,
– оптимизация с непрерывными, дискретными и смешанным типом значений управляющих воздействий.
В зависимости от критерия оптимизации различают:
– с одним критерием оптимизации – критерий оптимальности единственный.
– со многими критериями. Для решения задач со многими критериями используются специальные методы оптимизации.
1.2 Многокритериальная оптимизация
В однокритериальной оптимизации рассматриваются только те случаи, когда ясен единственный критерий, по которому производится оценка эффективности, и требуется обратить в максимум (минимум) единственный показатель f(x). На практике такие задачи, где критерий оценки однозначно диктуется целевой направленностью системы (или операции) встречаются не так уж часто – преимущественно при рассмотрении небольших по масштабу и скромных по значению проектов или мероприятий. Когда же идет речь о крупномасштабных, сложных операциях, затрагивающих разнообразные интересы их организаторов и общества в целом, то их эффективность, как правило не может быть полностью охарактеризована с помощью одного–единственного показателя эффективности f(x). На помощь ему приходится привлекать другие, дополнительные показатели. Такие задачи оптимизации (или исследования операций) называются многокритериальными [5].
Пример многокритериальной задачи. Организуется (или реорганизуется) работа промышленного предприятия. Каким критерием пользоваться? С одной стороны нам бы хотелось обратить в максимум валовый объем продукции V. Желательно также было бы получить максимум чистого дохода D. Что касается себестоимости S, то ее хотелось бы обратить в минимум, а производительность труда П – в максимум. При обдумывании этой задачи может возникнуть еще ряд дополнительных критериев.
Такая множественность показателей эффективности, из которых одни желательно обратить в максимум, а другие – в минимум, характерна для любой сколько-нибудь сложной задачи исследования операций [6].
На вопрос, можно ли в многокритериальной задаче найти решение, одновременно удовлетворяющее всем показателям нужно отвечать – нет. Поэтому часто применяемая фраза: «достигнуть максимального эффекта при минимальных затратах» представляет собой не более чем фикцию.
Существует соблазн свести задачу со многими критериями к однокритериальной: составляют какую–то функцию от всех показателей и рассматривают ее как один «обобщенный» показатель, по которому и оптимизируется решение. Часто такой обобщённый показатель имеет вид дроби, в числителе которой стоят все величины, увеличение которых желательно, а в знаменателе – те, увеличение которых нежелательно. Например, продуктивность и доход – в числителе, время выполнения и расходы – в знаменателе. Такой способ объединения нескольких показателей не может быть рекомендован потому, что он основан на неявном допущении, что недостаток в одном показателе всегда может быть скомпенсирован за счет другого; например, малая продуктивность – за счет низкой стоимости и т.д. Это, как правило, несправедливо.
Нередко применяется и другой, более сложный способ составления обобщенного показателя эффективности W – он представляет собой взвешенную сумму частных показателей, в которую каждый Wi из них входит с каким–то весом аi, отражающим его важность:
Причем для тех показателей, которые желательно увеличить, веса берутся положительными, уменьшить – отрицательными. При произвольном назначении весов а1, а2, … этот способ ничем не лучше предыдущего (разве только тем, что он не обращается в бесконечность). Его сторонники ссылаются на то, что и человек, принимая компромиссное решение, тоже мысленно взвешивает все “за” и “против”, приписывая больший вес более важным для него факторам. Этот подход имеет право на существование, но только в тех ситуациях, когда весовые коэффициенты а1, а2, … постоянны, а не меняются в зависимости от ситуации.
Математический аппарат в многокритериальных задачах прежде всего позволяет решать прямые задачи исследования операций, т.е. для любого решения х находить значения показателей эффективности W1, W2, …, сколько бы их ни было (кстати, для прямых задач многокритериальность – не помеха). И во–вторых, что особенно важно, математика помогает «выбраковать» из множества возможных решений Х заведомо неудачные, уступающие другим по всем критериям, оставляющие только эффективные решения.
Поиск эффективных решений (или, как говорят паретовских решений) в принципе осуществляется так. Пусть имеется многокритериальная задача исследования операций с k критериями W1, W2, …, Wk. Для простоты положим, что все эти величины желательно максимизировать. Пусть в составе множества возможных решений есть два решения x1 и x2 такие, что все критерии W1, W2, …, Wk для первого решения больше или равны соответствующим критериям для второго решения, причем хотя бы один из них действительно больше. Очевидно, тогда в составе множества Х нет смысла сохранять решение x2, оно вытесняется (или доминируется) решением x1. Удалив x2 как неконкурентоспособное и перейдем к сравнению других решений по всем критериям. В результате такой итерационной процедуры отсеивания заведомо непригодных решений множество X может быть сокращено: в нем остаются только эффективные, паретовские решения, характерные тем, что ни для одного из них не существует доминирующего решения [7].
Когда из множества возможных решений выделены эффективные, то выбор конкретного решения из числа паретовских лежит на лице, принимающем решение (ЛПР). В качестве лица, принимающего решение может быть, например главный инженер проекта сложного инженерно-технического устройства (промышленного здания, газопровода, системы телекоммуникаций и т.д.). ЛПР может быть и руководитель, распределяющий средства на закупку научного оборудования. В качестве ЛПР может быть и обыкновенный покупатель, которому нужно совершить достаточно дорогостоящие покупки, поскольку при наличии нескольких вариантов выбор конкретной покупки достаточно сложен. Во всех перечисленных трех случаях выбора есть одна общая черта – нужно принять решение, последствия которого станут до конца ясными лишь в будущем. Никакие математические расчеты не могут определить наилучший компромисс в многокритериальной задаче.
2 МАТЕМАТИЧЕСКИЕ МОДЕЛИ И МЕТОДЫ, ЛЕЖАЩИЕ В ОСНОВЕ РАЗРАБОТКИ
2.1 Метод полного перебора
Метод перебора или равномерного поиска является простейшим из прямых методов минимизации. Перебор это решение задач, возникающих из заданной задачи. То есть значение некоторого искомого параметра фиксируется различным образом, и производится выбор того из рассмотренных значений, которое дает наиболее подходящее решение.
Основная задача при реализации переборных методов заключается в нахождении такого порядка элементов перебора, при котором искомый элемент «встретится» как можно раньше.
Необходимо учесть, что сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий[8].
Рисунок 2.1 Схема алгоритма перебора
2.2 Метод Парето
В. Парето открыл эффект концентрированного напряжения. В данном случае имеется в виду, что концентрация на жизненно важной деятельности больше всего влияет на достижение желаемых результатов. Отсюда вытекает правило 20/80: концентрация 20 % времени на наиболее важных проблемах может привести к получению 80% результатов. Остальные 80% времени обеспечивают лишь оставшиеся 20% результатов.
Алгоритм нахождения множества Парето:
принять P(Y)=Y, i=1, j=2. Создаётся текущее множество Паретооптимальных векторов, которое в начале совпадает с множеством Y.
проверить выполнение неравенства. Если да, то перейти к п.3. Если нет, то перейти к п.5.
Удалить из текущего множества P(Y) вектор, так как он не является Паретооптимальным. Перейти к п.4.
Проверить выполнение неравенства j<N. Если да, то положить на это болт j=j+1 и вернуться к п.2. Если нет, то перейти к п.7.
Проверить выполнение неравенства . Если да, то перейти к п.6. Если нет, то перейти к п.4.
6. Удалить из текущего множества P(Y) вектор, так как он не является Паретооптимальным. Перейти к п.7.
7. Проверить выполнение неравенства i<N-1. Если да, то положить i=i+1, j=j+1 и вернуться к п.2. Если нет, закончить вычисления.
2.3 Методы экспертного анализа
Основная идея экспертных методов состоит в том, чтобы использовать интеллект людей, их способность искать и находить решение слабо формализованных задач. В теории экспертных оценок разработан ряд методов проведения экспертизы. Рассмотрим основные методы экспертного анализа:
– метод Саати. Часто затруднительно напрямую оценить важность некоторого объекта среди ряда других. Подобная ситуация может иметь место при наличии объектов различной природы. Например, среди ранжируемых показателей эффективности могут быть показатели, имеющие определенное стоимостное выражение, а также показатели этического, эстетического рода и т.п. Указанное затруднение преодолевается посредством попарного сравнения объектов по степени их влияния на достижение цели. При этом эксперт должен вынести суждение о том, насколько с точки зрения достижения цели один объект важнее второго. Анализируя совокупность объектов, эксперт определяет численное предпочтение одного объекта перед другим по некоторой заранее выбранной шкале отсчета. Простым примером может служить выбор места работы выпускником ВУЗа. Выпускник должен оценить, насколько для него уровень оплаты труда, например, важнее, чем перспективы продвижения по служебной лестнице и т.д.
Пусть эксперт анализирует объектов. Сравнивая их попарно между собой, он определяет чисел , каждое из которых характеризует, по мнению эксперта, относительную значимость - го объекта по сравнению с - м. Величина представляет оценку (приближенное значение) истинной значимости сравниваемых объектов. Совокупность экспертных оценок можно записать в виде квадратной матрицы
(1.5)
Элементы этой матрицы (относительные значимости объектов) можно рассматривать как отношения истинных важностей
(1.6)
При оценке относительных значимостей используется обычно девятибалльная шкала.
Из формулы (1.6) следует, что из общего числа всех элементов матрицы попарного сравнения независимыми являются лишь . Во-первых, диагональные элементы матрицы равны единице. Во-вторых, при изменении порядка сравнения оценка относительной значимости объекта должна меняться на противоположную оценку:
(1.7)
Это означает, что элементы матрицы попарного сравнения, расположенные симметрично относительно главной диагонали, представляют собой взаимно обратные числа.
Выбор решения выполняется в следующем порядке. Сначала эксперты заполняют матрицы парных сравнений. Затем для каждой матрицы определяются оценки предпочтения альтернатив над другими, то есть находятся суммы строк матриц по формуле (1.8):
(1.8)
где k – число экспертов;
n – число альтернатив.
После этого определяются обобщенные оценки предпочтения альтернатив над другими (с учетом мнения всех экспертов) – и находится сумма всех оценок . Находятся веса альтернатив по формуле (1.9):
(1.9)
Лучшей считается альтернатива, имеющая наибольший вес.
– метод предпочтений. Данный метод основан на ранжировании альтернатив, выполняемом группой экспертов. Каждый из экспертов выполняет ранжирование альтернатив, то есть указывает, какая из альтернатив, по его мнению, является лучшей, какая следующей за ней, и т.д.
Пусть имеется m экспертов: Э1, Э2, ..., Эm и n критериев (альтернатив): Z1, Z2, ..., Zn [9].
Каждый эксперт проводит оценку критериев, пользуясь числами натурального ряда. Наиболее важной цели присваивается значение 1, менее важной 2 и т.д. В этих условиях веса критериев определяются следующим образом:
составляется исходная матрица k предпочтений размером m×n, причём 1≤ kij ≤ n, где ;
составляется модифицированная матрица K предпочтений. С оценками:
; (1.10)
находятся суммарные оценки предпочтений по каждому критерию:
; (1.11)
вычисляются исходные веса критериев:
(1.12)
Наиболее предпочтительной является альтернатива, имеющая максимальный вес.
Для данного метода существует возможность проверки согласованности экспертных оценок. Для этого вычисляется коэффициент конкордации по следующему алгоритму. Сначала находятся суммы оценок, указанных экспертами для каждой из альтернатив: , где . Затем находится вспомогательная величина α:
(1.13)
Находится . Находится коэффициент конкордации:
(1.14)
При υ ≥ 5, степень согласованности экспертных оценок считается достаточной, в противном случае требуется уточнение и согласование экспертных оценок.
Также в одну группу с методом Саати и методом предпочтений входит метод Ранга. В нём подобно методу Саати эксперты дают оценки альтернативам. В соответствии с этими оценками высчитываются веса оцениваемых альтернатив, затем происходит выбор максимального из посчитанных весов, и соответственно, наиболее предпочтительной альтернативы.
Стоит упомянуть о том, что в методе Ранга также присутствует проверка на соответствие, путём высчитывания дисперсий, а затем происходит сравнение дисперсий и проверка того, чтобы различие не превышало 5% – 9%.
2.4 Метод ранга
По методу рангов эксперт осуществляет ранжирование (упорядочение) исследуемых объектов организационной системы в зависимости от их относительной значимости (предпочтительности). Наиболее предпочтительному объекту обычно присваивается ранг 1, а наименее предпочтительному — последний ранг, равный по абсолютной величине числу упорядочиваемых объектов. Более точным такое упорядочение становится при меньшем количестве объектов исследования и наоборот.
Таким образом, этот метод позволяет определить место исследуемого объекта среди других объектов СУ. Достоинством метода рангов является его простота. Однако метод не позволяет с достаточной точностью ранжировать объекты, количество которых превышает 15 —20, а также ответить на вопрос, как далеко по значимости находятся исследуемые объекты друг от друга[9].
Наиболее предпочтительной является альтернатива, имеющая
максимальный вес.
Рисунок 2.1 – Схема алгоритма метода Ранга
3 Разработка структуры и состава программных средств
3.1 Постановка задачи
Предприятие планирует освоить выпуск нового изделия в количестве не менее 10 000 штук в год. Для этого ему необходимо приобрести станки двух типов. При этом, на изготовление изделия, предприятие может выделить не более 200 часов в месяц. Существует также ограничение по стоимости (не более 1000 млн.руб.) и по потребляемой мощности (не более 50000 кВт–ч в месяц). Технические характеристики станков первого и второго вида приведены в таблицах 3.1, 3.2 соответственно.
Таблица 3.1 – Технические характеристики станков первого вида
Станок ST11 ST12 ST13 ST14 ST15
Производительность, изд./час 15 3 7 11 10
Стоимость, млн. руб. 640,0 110,0 320,0 450 257,0
Энергоэффективность,кВт-ч/изд. 27,8 33,5 17,0 23,0 11,6
Таблица 3.2 – Технические характеристики станков второго вида
Станок ST21 ST22 ST23 ST24 ST25
Производительность, изд./час 10 7 13 17 11
Стоимость, млн. руб. 354,0 275,0 200,0 700,0 158,0
Энергоэффективность,кВт-ч/ изд. 12,0 24,0 35,5 17,0 18,3
Кроме того, при выборе станков необходимо учесть эксплуатационные характеристики в отношении этого оборудования (таблицы 3.3 и 3.4)
Таблица 3.3 – Эксплуатационные характеристики станков первого вида
Станок ST11 ST12 ST13 ST14 ST15
Сервисное обслуживание да нет да да нет
Надежность (наработка на отказ),ч 150 000 70 000 70 000 100 000 110 000
Удобство в использовании хорошо отлично плохо плохо отлично
Таблица 3.4 – Эксплуатационные характеристики станков первого вида
Станок ST21 ST22 ST23 ST24 ST25
Сервисное обслуживание да да да нет да
Надежность (наработка на отказ),ч 150 000 150 000 120 000 200 000 110 000
Удобство в использовании плохо отлично очень хорошо хорошо отлично
Таблица 3.5 – Вариант задания
Вариант Однокритериальная оптимизация Многокритериальная оптимизация
метод Параметр Метод экспертного анализа Число экспертов Метод отбора Выбор лучшего решения
20 перебор Стоимость Ранга 2 Парето МАИ
В соответствии с вариантом задания на курсовой проект (таблица 3.5) необходимо:
– разработать программное средство оптимизации по заданному критерию в рамках существующих ограничений методом полного перебора;
– разработать программное средство многокритериальной оптимизации с учетом мнения двух экспертов. Для этого необходимо:
– реализовать перевод качественных оценок в числовую форму по шкале Харрингтона;
– определить лучшую альтернативу методом экспертного анализа (Метод Ранга);
– реализовать отбор бесперспективных альтернатив (Множество Парето);
– определить лучшую альтернативу методом анализа иерархий.
3.2 Описание алгоритма решения задачи
Согласно варианту поставленная задача должна решаться методом полного перебора для одномерной оптимизации. Рассмотрим основную суть данного алгоритма.
Метод перебора или равномерного поиска является простейшим из прямых методов минимизации. Перебор это решение задач, возникающих из заданной задачи. То есть значение некоторого искомого параметра фиксируется различным образом, и производится выбор того из рассмотренных значений, которое дает наиболее подходящее решение.
Основная задача при реализации переборных методов заключается в нахождении такого порядка элементов перебора, при котором искомый элемент «встретится» как можно раньше.
Необходимо учесть, что сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий.
Для получения оптимального решения поставленной задачи при многомерной оптимизации необходимо реализовать ряд этапов. Рассмотрим их.
Для начала необходимо перевести все качественные оценки в числовую форму по шкале Харрингтона. Диапазон значений по данной шкале приведён в таблице 2.6
Таблица 3.6 Шкала Харрингтона
Качественные оценки Очень плохо Плохо Удовлетворительно Хорошо Отлично
Количественные оценки 0.0 – 0.2 0.2 – 0.36 0.36 – 0.63 0.63 – 0.8 0.8 – 1.0
Оценки типа «да/нет» так же переводятся в числовую форму, причём оценке «да» соответствует значение – 0.67, а «нет» – 0.33.
Все числовые оценки переводятся в безразмерный вид (представить оценки в долях единицы) и при этом лучшей оценке соответствует большее значение. Для осуществления такого перевода необходимо разделить все значения оценок по данному критерию на максимальное значение этого критерия.
Метод приписывания баллов (метод ранга). Этот метод основан на том, что эксперты оценивают важность частного критерия по шкале от 0 до 10. При этом разрешается оценивать важность дробными величинами или приписывать одну и ту же величину из выбранной шкалы нескольким критериям. Обозначим через hik балл i-го эксперта для k-критерия, тогда:
где сумма баллов i - ой строки;
m – количество критериев.
rik - называют весом, подсчитанным для k - критерия i - м экспертом. Отсюда, учитывая, что , где L количество экспертов, получим веса альтернатив:
Как и в методе попарного сравнения, лучшей считается альтернатива, имеющая наибольший вес.
Реализуется метод Парето для отбора бесперспективных альтернатив.
Суть данного метода заключается в следующем: одна альтернатива превосходит вторую, если она превосходит ее, по крайней мере, по одной компоненте и не хуже второй по любой другой компоненте. Если альтернатива удовлетворяет этому свойству относительно всех других альтернатив, то ее называют оптимальной.
Применение принципа Парето позволяет из множества всех возможных исключить заведомо неприемлемые решения, т.е. те, которые никогда не могут оказаться выбранными, если выбор осуществляется достаточно «разумно». После такого исключения остается множество, которое называют множеством Парето или областью компромиссов.
Выбор множества Парето производится следующим образом. Все альтернативы попарно сравниваются друг с другом по всем критериям. Если при сравнении каких-либо альтернатив оказывается, что одна из них не лучше другой ни по одному критерию, то ее можно исключить из рассмотрения.
Данный метод позволяет сократить количество альтернатив, но не позволяет получить окончательное решение.
Определяем лучшую альтернативу методом анализа иерархий (МАИ). Рассмотрим более подробно данный метод.
Метод анализа иерархий, применяется в настоящее время при решении самых разнообразных проблем, среди которых, в частности: проектирование транспортных систем крупных городов, разработка планов обеспечения энергетическими ресурсами отраслей промышленности, оценка сценария развития высшего образования, определение приоритетных направлений научных исследований и др.
МАИ не предписывает лицу, принимающему решение (ЛПР), какого-либо «правильного» решения, а позволяет ему в интерактивном режиме найти такой вариант (альтернативу), который наилучшим образом согласуется с его пониманием сути проблемы и требованиями к ее решению.
Анализ проблемы принятия решений в МАИ начинается с построения иерархической структуры, которая включает цель, критерии, альтернативы и другие рассматриваемые факторы, влияющие на выбор. Эта структура отражает понимание проблемы лицом, принимающим решение. Каждый элемент иерархии может представлять различные аспекты решаемой задачи, причем во внимание могут быть приняты как материальные, так и нематериальные факторы, измеряемые количественные параметры и качественные характеристики, объективные данные и субъективные экспертные оценки. Иными словами, анализ ситуации выбора решения в МАИ напоминает процедуры и методы аргументации, которые используются на интуитивном уровне.
Следующим этапом анализа является определение приоритетов, представляющих относительную важность или предпочтительность элементов построенной иерархической структуры, с помощью процедуры парных сравнений. Безразмерные приоритеты позволяют обоснованно сравнивать разнородные факторы, что является отличительной особенностью МАИ.
На заключительном этапе анализа выполняется синтез (линейная свертка) приоритетов на иерархии, в результате которой вычисляются приоритеты альтернативных решений относительно главной цели. Лучшей считается альтернатива с максимальным значением приоритета.
Иерархические структуры, используемые в МАИ, представляет собой инструмент для качественного моделирования сложных проблем. Вершиной иерархии является главная цель; элементы нижнего уровня представляют множество вариантов достижения цели (альтернатив); элементы промежуточных уровней соответствуют критериям или факторам, которые связывают цель с альтернативами.
После построения иерархии участники процесса используют МАИ для определения приоритетов всех узлов структуры. Информация для расстановки приоритетов собирается со всех участников и математически обрабатывается.
Приоритеты — это числа, которые связаны с узлами иерархии. Они представляют собой относительные веса элементов в каждой группе. Подобно вероятностям, приоритеты — безразмерные величины, которые могут принимать значения от нуля до единицы. Чем больше величина приоритета, тем более значимым является соответствующий ему элемент. Сумма приоритетов элементов, подчиненных одному элементу выше лежащего уровня иерархии, равна единице.
4 Описание разработанного приложения
4.1 Структура программного комплекса
Для решения поставленной задачи было разработано приложение Windows Forms, которое включает в себя графический интерфейс. Приложение было разработано в среде программирования Microsoft Visual Studio 2012 под .NET Framework 4.5. Программа состоит из двух классов, которые представляют собой графический интерфейс, а так же из шести классов, которые содержат различные методы, для решения поставленной задачи. В таблицах 4.1-4.4 рассмотрим состав некоторых классов.
Таблица 4.1 – Описание элементов класса Form1.cs
Название Тип Описание
machineOne List<string> Список, содержащий информацию о станках первого типа
machineTwo List<string> Список, содержащий информацию о станках второго типа
machineCounter int Счетчик станков
markMatrix
Double[,]
Массив, содержащий оценки экспертов
weights List<double> Список, содержащий веса
parettoMachines List<string> Список, содержащий информацию о станках, прошедших отбор методом Паретто
button1_Click void Метод, запускающий рассчет
button2_Click Void Метод, очищающий поле результатов
button3_Click Void Метод, закрывающий приложение
button4_Click Void Метод, открывающий окно «О программе»
FillMatrix Double[,] Метод, заполняющий таблицу оценок экспертов
FillTables Void Метод, заполняющий таблицу с данными о станках
CreateMachine Void Метод, заполняющий списки с данными о станках
Таблица 4.2 – Описание элементов класса Harrington.cs
Название Тип Описание
ConvertService Double Метод, преобразующий «да» и «нет» в числа
ConvertConvenience double Метод преобразования сведений об удобстве к шкале Харрингтона
Таблица 4.3 – Описание элементов класса Machine.cs
Название Тип Описание
_name string Наименование
_perfomance int Производительность
_price int Стоимость
_energy double Энергоэффективность
_service string обслуживание
_reliability int Надежность
_convenience String Удобство
_serviceMark Double Обслуживание по шкале
Таблица 4.4 – Описание элементов класса Rang.cs
Название Тип Описание
FindAdditional double Метод для нахождения суммы баллов
FindAlternativeAddition double Метод для нахождение суммы альтернатив
RangMethod List<double> Метод Ранга
weight List<double> Список весов
alterList List<double> Список сумм альтернатив
4.2 Инструкция пользователя
Разработанное приложение имеет простой, информативный и удобный интерфейс, который не требует длительного вникания либо обучения. Главное окно программы содержит всю оперативную информацию, такую как исходные данные и результаты работы программы (Рисунок 4.1).
Рисунок 4.1 – Главное окно программы
Программа разработана для помощи в выборе оптимального решения, которое заключается в отборе пары станков разного типа при заданных условиях.
Информация о станках отображается в двух таблицах, которые находятся в блоке «Исходные данные» (рисунок 4.2).
Рисунок 4.2 – Таблица с данными по станку
Ниже, под таблицами с исходными данными по станкам располагается таблица с оценками экспертов (рисунок 4.3).
Рисунок 4.3 – Таблица с оценками экспертов
Для редактирования данных в таблице достаточно сделать двойной клик левой клавишей мыши по интересующей ячейке (рисунок 4.4).
Рисунок 4.4 – Редактирование таблицы
Чтобы вывести резултат работы программы, необходимо выбрать нужный метод оптимизации(однокритериальная либо многокритериальная) и нажать на кнопку рассчет. Все эти манипуляции необходимо производить в блоке программы «Результаты» (рисунок 4.5).
Рисунок 4.5 – Блок программы «Результаты»
После расчета программа выведет сообщение об успешном окончании расчета (рисунок 4.6) и после этого в блоке «Результаты» в специальном поле будут выведены результаты расчетов, как это показано на рисунке 4.7.
Рисунок 4.6 – Успешное выполнение расчета
Рисунок 4.7 – Результаты работы программы
Если в процессе работы с программой пользователю понадобится очистить окно с результатами, то для этих целей предусмотрена кнопка «Очистить», которая очищает данное окно.
Так же в программе присутствует кнопка «О программе», понажатию которой можно узнать о разработчике данного ПО (рисунок 4.8).
Рисунок 4.8 – Окно «О программе»
Чтбы завершить работу приложения следует нажать на кнопку «Выход» либо закрыть программу стандартным средством всех windows–приложений – крестик в верхнем правом углу программы.
4.3 Верификация работы программы
Исходя из поставленной задачи данной курсовой работы, нам необходимо произвести однокритериальную оптимизацию с помощью полного перебора по заданному критерию, в нашем случае это стоимость. Для того чтобы проверить правильность расчета программой лучшей пары станков по однокритериальной оптимизации необходимо так же учесть ограничения которые обусловлены заданием, которое представлено в пункте 3.1.
Всего возможно 25 альтернатив, т.к. имеются 5 станков первого типа и 5 станков второго типа. После произведения ручного расчета на прохождение по ограничениям получаем следующие данные:
ST11 и ST21: стоимость = 994;
ST11 и ST22: стоимость = 915;
ST11 и ST23: стоимость = 846;
ST11 и ST24: стоимость превышает лимит в 1000 млн. рублей;
ST11 и ST25: стоимость = 798;
ST12 и ST21: стоимость =464;
ST12 и ST22: стоимость =385;
ST12 и ST23: стоимость =310;
ST12 и ST24: стоимость =810;
ST12 и ST25: стоимость =268;
ST13 и ST21: стоимость =674;
ST13 и ST22: стоимость =595;
ST13 и ST23: стоимость =520;
ST13 и ST24: стоимость превышает лимит в 1000 млн. рублей;
ST13 и ST25: стоимость =478;
ST14 и ST21: стоимость =804;
ST14 и ST22: стоимость =725;
ST14 и ST23: стоимость =650;
ST14 и ST24: стоимость превышает лимит в 1000 млн. рублей;
ST14 и ST25: стоимость =608;
ST15 и ST21: стоимость =611;
ST15 и ST22: стоимость =532;
ST15 и ST23: стоимость =457;
ST15 и ST24: стоимость =957;
ST15 и ST25: стоимость =415.
Очевидно, что лучшей парой по производительности является пара ST12 и ST25. Как видно на рисунке 4.9 результаты работы программы сходятся с результатами ручного расчета. Из этого следует, что программа работает верно.
Рисунок 4.9 – Результаты выполнения однокритериальной оптимизации.
ЗАКЛЮЧЕНИЕ
В заключение, к данной курсовой работе можно сказать, что все поставленные задачи по одномерной и многомерной оптимизации в соответствии с заданием успешно решены.
Разработанное приложение позволит при желании осуществить правильный выбор альтернативы станков при их покупке. Следует отметить, что станки будут соответствовать всем параметрам качества, которые определены потребителем, в нашем случае заданием, и в случае необходимости параметры оптимизации можно отредактировать.
Интерфейс прост в использовании и доступен далёкому от программирования пользователю, то есть большому числу пользователей.
Приложение проверено на тестах, то есть, проведена верификация результатов. Этот факт говорит о том, что приложение может применяться для решения реальных практических задач.
В ходе выполнения курсового проекта более детально изучены и реализованы методы однокритериальной и многокритериальной оптимизации, такие как метод полного перебора, метод Ранга, метод анализа иерархий, метод выбора множества по Парето.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. МГСУ кафедра "ИСТАС" направление САПР // Методы оптимизации [Электронный ресурс]. 2000–20011. – Режим доступа: http://sapr.mgsu.ru/biblio/optimiz/opt.htm . Дата доступа : 09.03.2013.
2. Сафронов, В. Л. Лекции и учебные пособия по системному анализу / В. Сафронов // Системный анализ и проектирование [Электронный ресурс]. 2006–2012. Режим доступа: http://victor–safronov.narod.ru/systems–analysis/lectures/zhivickaya/28.html . Дата доступа: 10.02.2013.
3. Шикин, Е. В. Исследование операций / Е. В. Шикин, Г. Е. Шикина. М.: ТК Велби, Изд–во Проспект, 2006. 280 с.
4. Акимов, С. В. Проблемы автоматизации структурно–параметрического синтеза / С. В. Акимов // Оптимизация [Электронный ресурс]. 2005–2006. – Режим доступа: http://www.structuralist.narod.ru/dictionary/opt.htm . Дата доступа : 08.04.2013.
4. Жиглявский,А.А.Методы поиска глобального экстремума / А.А. Жиглявский, А.Г. Жилинкас — М.: Наука, Физматлит, 1991.
5. Карманов, В.Г. Математическое программирование -Математическое программирование / В.Г. Карманов — Изд-во физ.-мат. литературы, 2004.
6. Корн, Г. Справочник по математике для научных работников и инженеров / Г. Корн, Т. Корн — М.: Наука, 1970. — С. 575—576.
7. Коршунов, Ю.М. Математические основы кибернетики / Ю.М. Коршунов — М.: Энергоатомиздат, 1972.
5. Информационные технологии оптимальных решений. Учебный курс для специальности «Государственное управление и экономика» . Минск: Академия управления при Президенте Республики Беларусь, 2003. 241 с.
6. Теория принятия решений. Учебно–методическое пособие / Ю.О. Матузко. Запорожье: Запорожская государственная инженерная академия, 2009. 61 с.Шикин, Г. Е. Шикина. М.: ТК Велби, Изд–во Проспект, 2006. 280 с.
7. Подиновский, В. В. Парето–оптимальные решения многокритериальных задач. / В. В. Подиновский, В. Д. Ногин. М.: Наука. Главная редакция физико–математической литературы, 1982.— 256 с.
8. Мосеев, А. В. Применение методов искусственного интеллекта в переборных алгоритмах / А. В. Мосеев // Метод перебора и задачи, решаемые при помощи этого метода [Электронный ресурс]. 1999. Режим доступа: http://underwood.narod.ru/as/diplom/chapter2.html . Дата доступа: 10.04.2013.
9. Максимов, Ю.А. Алгоритмы линейного и дискретного программирования / Ю.А. Максимов — М.: МИФИ, 1980.
ПРИЛОЖЕНИЕ А
(обязательное)
Схема алгоритма метода Ранга
ПРИЛОЖЕНИЕ Б
(обязательное)
Листинг программы
Файл Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CourseOPR
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
machineOne.Add("Производительность, изд/час");
machineOne.Add("Стоимость, млн.руб");
machineOne.Add("Энергоэффективность, КВТ/ч - изд");
machineOne.Add("Сервисное обслуживание");
machineOne.Add("Надежность");
machineOne.Add("Удобство использования");
machineOne.Add("15");
machineOne.Add("640");
machineOne.Add("27,8");
machineOne.Add("Да");
machineOne.Add("150000");
machineOne.Add("Хорошо");
machineOne.Add("3");
machineOne.Add("110");
machineOne.Add("33,5");
machineOne.Add("Нет");
machineOne.Add("70000");
machineOne.Add("Отлично");
machineOne.Add("7");
machineOne.Add("320");
machineOne.Add("17");
machineOne.Add("Да");
machineOne.Add("70000");
machineOne.Add("Плохо");
machineOne.Add("11");
machineOne.Add("450");
machineOne.Add("23");
machineOne.Add("Да");
machineOne.Add("100000");
machineOne.Add("Плохо");
machineOne.Add("10");
machineOne.Add("257");
machineOne.Add("11,6");
machineOne.Add("Нет");
machineOne.Add("110000");
machineOne.Add("Отлично");
machineTwo.Add("Производительность, изд/час");
machineTwo.Add("Стоимость, млн.руб");
machineTwo.Add("Энергоэффективность, КВТ/ч - изд");
machineTwo.Add("Сервисное обслуживание");
machineTwo.Add("Надежность");
machineTwo.Add("Удобство использования");
machineTwo.Add("10");
machineTwo.Add("354");
machineTwo.Add("12");
machineTwo.Add("Да");
machineTwo.Add("150000");
machineTwo.Add("Плохо");
machineTwo.Add("7");
machineTwo.Add("275");
machineTwo.Add("24");
machineTwo.Add("Да");
machineTwo.Add("150000");
machineTwo.Add("Отлично");
machineTwo.Add("13");
machineTwo.Add("200");
machineTwo.Add("35,5");
machineTwo.Add("Да");
machineTwo.Add("120000");
machineTwo.Add("Очень хорошо");
machineTwo.Add("17");
machineTwo.Add("700");
machineTwo.Add("17");
machineTwo.Add("Нет");
machineTwo.Add("200000");
machineTwo.Add("Хорошо");
machineTwo.Add("11");
machineTwo.Add("158");
machineTwo.Add("18,3");
machineTwo.Add("Да");
machineTwo.Add("110000");
machineTwo.Add("Отлично");
FillTables(machineOne, dataGridView1);
FillTables(machineTwo, dataGridView2);
CreateMachine(dataGridView1, false);
CreateMachine(dataGridView2, true);
dataGridView3.RowCount = 6;
dataGridView3.Columns[0].Width = 150;
dataGridView3.Columns[1].Width = 70;
dataGridView3.Columns[2].Width = 70;
dataGridView3[0, 0].Value = "Производительность";
dataGridView3[0, 1].Value = "Стоимость";
dataGridView3[0, 2].Value = "Энергоэффективность";
dataGridView3[0, 3].Value = "Сервисное обслуживание";
dataGridView3[0, 4].Value = "Наежность";
dataGridView3[0, 5].Value = "Удобство использования";
dataGridView3[1, 0].Value = "7";
dataGridView3[1, 1].Value = "5";
dataGridView3[1, 2].Value = "3";
dataGridView3[1, 3].Value = "7";
dataGridView3[1, 4].Value = "9";
dataGridView3[1, 5].Value = "3";
dataGridView3[2, 0].Value = "8";
dataGridView3[2, 1].Value = "6";
dataGridView3[2, 2].Value = "5";
dataGridView3[2, 3].Value = "4";
dataGridView3[2, 4].Value = "3";
dataGridView3[2, 5].Value = "1";
comboBox1.SelectedIndex = 0;
}
private void CreateMachine(DataGridView DGV, bool repeat)
{
for (int i = 1; i < DGV.ColumnCount; i++)
for (int j = 0; j < DGV.RowCount; j++)
{
if (j == 5)
{
if (repeat)
{
machines[machineCounter] = new Machine("ST2" + i, int.Parse(DGV[i, j - 5].Value.ToString()), int.Parse(DGV[i, j - 4].Value.ToString()), Convert.ToDouble(DGV[i, j - 3].Value), DGV[i, j - 2].Value.ToString(), int.Parse(DGV[i, j - 1].Value.ToString()), DGV[i, j].Value.ToString());
}
else
{
machines[machineCounter] = new Machine("ST1" + i, int.Parse(DGV[i, j - 5].Value.ToString()), int.Parse(DGV[i, j - 4].Value.ToString()), Convert.ToDouble(DGV[i, j - 3].Value), DGV[i, j - 2].Value.ToString(), int.Parse(DGV[i, j - 1].Value.ToString()), DGV[i, j].Value.ToString());
}
machineCounter++;
}
}
}
private void FillTables(List<string> data, DataGridView table)
{
table.RowCount = 6;
int count = 0;
int i = 0;
for (int j = 0; j < data.Count; j++)
{
table[i, count].Value = Convert.ToString(data.ElementAt(j));
count++;
if (count == 6)
{
count = 0;
i++;
}
}
}
public double[,] FillMatrix()
{
double[,] markMatrix = new double[2, 6];
for (int i = 1; i < dataGridView3.ColumnCount; i++)
{
for (int j = 0; j < dataGridView3.RowCount; j++)
{
markMatrix[i - 1, j] = Convert.ToDouble(dataGridView3[i, j].Value);
}
}
return markMatrix;
}
Machine[] machines = new Machine[10];
List<string> machineOne = new List<string>();
List<string> machineTwo = new List<string>();
private static int machineCounter = 0;
private static double[,] markMatrix = new double[2, 6];
private static List<double> weights = new List<double>();
private static List<Machine> parettoMachines = new List<Machine>();
private void button1_Click(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case 0:
int[] restrictions = new int[4];
restrictions[0] = 200;
restrictions[1] = 1000;
restrictions[2] = 50;
restrictions[3] = 10000;
richTextBox1.Text += Perebor.calculate(machines, restrictions)+"
";
break;
case 1:
markMatrix = FillMatrix();
weights = Rang.RangMethod(markMatrix);
parettoMachines = Paretto.ParetosMethod(machines);
richTextBox1.Text += "Результат многокритериальной оптимизации:
лучшая пара станков: " + Mai.MAImethod(weights, parettoMachines);
break;
}
MessageBox.Show("Расчет выполнен!");
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void button4_Click(object sender, EventArgs e)
{
About window = new About();
window.Show();
}
}
}
Файл Paretto.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
class Paretto
{
public static List<Machine> ParetosMethod(Machine[] machines)
{
List<Machine> newMachines = CreatePairs(machines);
List<Machine> tmp = newMachines;
for (int i = 1; i < newMachines.Count; i++)
{
if (newMachines[i - 1].GetServiceMark >= newMachines[i].GetServiceMark && newMachines[i - 1].GetConvenienceMark >= newMachines[i].GetConvenienceMark && newMachines[i - 1].GetReliability >= newMachines[i].GetReliability)
{
tmp.RemoveAt(i);
}
}
return tmp;
}
private static List<Machine> CreatePairs(Machine[] machines)
{
List<Machine> newMachines = new List<Machine>();
for (int i = 0; i < machines.Length / 2; i++)
{
for (int j = machines.Length / 2; j < machines.Length; j++)
{
newMachines.Add(new Machine(machines[i].GetName + " и " + machines[j].GetName, machines[i].GetPerfomance + machines[j].GetPerfomance, machines[i].GetPrice + machines[j].GetPrice, machines[i].GetEnergy + machines[j].GetEnergy, machines[i].GetServiceMark + machines[j].GetServiceMark, machines[i].GetReliability + machines[j].GetReliability, machines[i].GetConvenienceMark + machines[j].GetConvenienceMark));
}
}
return newMachines;
}
}
}
Файл Perebor.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
class Perebor
{
public static string calculate(Machine[] machines, int[] restrictions)
{
double min = (machines[0].GetPrice + machines[5].GetPrice);
string result = "Нет пары станков, удовлетворяющей всем условиям.";
for (int i = 0; i < 5; i++)
{
for (int j = 5; j < 10; j++)
{
if (machines[i].GetPrice + machines[j].GetPrice < restrictions[1] && (machines[i].GetPrice + machines[j].GetPrice) * 12 * restrictions[0] >= restrictions[3])
{
if (machines[i].GetPrice + machines[j].GetPrice < min)
{
min = machines[i].GetPrice + machines[j].GetPrice;
result = "Однокритериальная оптимизация:
Оптимальный выбор - " + machines[i].GetName + " и " + machines[j].GetName + "
";
}
}
}
}
return result;
}
}
}
Файл Mai.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
class Mai
{
public static string MAImethod(List<double> weights, List<Machine> machines)
{
string result = null;
double max = 0;
int sign = 0;
double res = machines[0].GetPrice;
for (int i = 0; i < weights.Count; i++)
{
if (weights[i] > max)
{
max = weights[i];
sign = i;
}
}
for (int i = 0; i < machines.Count; i++)
{
if (machines[i].GetPrice < res)
{
res = machines[i].GetEnergy;
result = machines[i].GetName;
}
}
return result;
}
}
}
Файл Machine.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
public class Machine
{
//Поля класса станок
private string _name;
private int _perfomance;
private int _price;
private double _energy;
private string _service;
private int _reliability;
private string _convenience;
private double _serviceMark;
private double _convenienceMark;
//Конструктор
public Machine()
{
}
public Machine(string name, int perfomance, int price, double energy, string service, int reliability, string convenience)
{
this._name = name;
this._perfomance = perfomance;
this._price = price;
this._energy = energy;
this._service = service;
this._reliability = reliability;
this._convenience = convenience;
//Приводим значения к шкале Харрингтона
this._serviceMark = Harrington.ConvertService(service);
this._convenienceMark = Harrington.ConvertConvenience(convenience);
}
//Второй конструктор
public Machine(string name, int perfomance, int price, double energy, double serviceMark, int reliability, double convenienceMark)
{
this._name = name;
this._perfomance = perfomance;
this._price = price;
this._energy = energy;
this._serviceMark = serviceMark;
this._reliability = reliability;
this._convenienceMark = convenienceMark;
}
public Machine Copy()
{
return new Machine(
this._name,
this._perfomance,
this._price,
this._energy,
this._serviceMark,
this._reliability,
this._convenienceMark);
}
//Свойства
public string GetName
{
get
{
return this._name;
}
}
public int GetPerfomance
{
get
{
return this._perfomance;
}
}
public int GetPrice
{
get
{
return this._price;
}
}
public double GetEnergy
{
get
{
return this._energy;
}
}
public string GetService
{
get
{
return this._service;
}
}
public int GetReliability
{
get
{
return this._reliability;
}
}
public string GetConvenience
{
get
{
return this._convenience;
}
}
public double GetServiceMark
{
get
{
return this._serviceMark;
}
}
public double GetConvenienceMark
{
get
{
return this._convenienceMark;
}
}
}
}
Файл Harington.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
class Harrington
{
public static double ConvertService(string isServ)
{
if (isServ == "Да")
{
return 0.67;
}
else
if (isServ == "Нет")
{
return 0.33;
}
else
{
return 0;
}
}
//Преобразование сведений об удобстве к шкале Харрингтона
public static double ConvertConvenience(string mark)
{
if (mark == "Очень плохо")
{
return 0;
}
else
if (mark == "Плохо")
{
return 0.2;
}
else
if (mark == "Удовлетворительно")
{
return 0.36;
}
else
if (mark == "Хорошо")
{
return 0.63;
}
else
if (mark == "Очень хорошо")
{
return 0.8;
}
else
if (mark == "Отлично")
{
return 1;
}
else
{
return 0;
}
}
}
}
Файл Rang.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CourseOPR
{
class Rang
{
private static List<double> markListFirst = new List<double>();
private static List<double> markListSecond = new List<double>();
private static List<double> alterList = new List<double>();
private static List<double> weight = new List<double>();
//Метод для нахождения суммы баллов
private static double FindAdditional(double[,] matrix, int column)
{
double sum = 0;
for (int i = 0; i < matrix.GetLength(1); i++)
{
sum += Convert.ToDouble(matrix[column, i]);
}
return sum;
}
//Метод для нахождение суммы альтернатив
private static double FindAlternativeAddition(List<double> markList)
{
double sum = 0;
for (int i = 0; i < markList.Count; i++)
{
sum += markList[i];
}
return sum;
}
//Метод Ранга
public static List<double> RangMethod(double[,] matrix)
{
for (int i = 0; i < matrix.GetLength(1); i++)
{
markListFirst.Add(Math.Round((Convert.ToDouble(matrix[0, i])) / FindAdditional(matrix, 0), 2));
markListSecond.Add(Math.Round((Convert.ToDouble(matrix[1, i])) / FindAdditional(matrix, 1), 2));
alterList.Add(markListFirst[i] + markListSecond[i]);
}
for (int i = 0; i < alterList.Count; i++)
{
weight.Add(Math.Round(alterList[i] / FindAlternativeAddition(alterList), 2));
}
return weight;
}
public static int RangResult()
{
double max = weight[0];
int maxPosition = 0;
for (int i = 0; i < weight.Count; i++)
{
if (weight[i] > max)
{
max = weight[i];
maxPosition = i;
}
}
return maxPosition;
}
}
}
Многокритериальная оптимизация
Курсовая работа по предмету «Программирование»