Программное средство для выбора оптимального автомобиля для сотрудников организации

Разработка приложения, предназначенного для помощи в осуществлении оптимального выбора автомобиля для организации. Определение особенностей механизма, производящего расчет оптимального решения на основе однокритериального и многокритериального анализа.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.11.2015
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине «ОПТИМИЗАЦИЯ ПРОЕКТНЫХ РЕШЕНИЙ»

на тему:

«программное средство для выбора оптимального автомобиля для сотрудников организации»

Исполнитель: студентка гр. ИТ-42

Дубоделова Е.В.

Руководитель: ст. преподаватель Стефановский И.Л.

Гомель 2015

Содержание

Введение

1. Анализ методов однокритериальной и многокритериальной оптимизации

1.1 Понятие оптимизации

1.2 Классификация методов оптимизации

1.3 Однокритериальная оптимизация

1.4 Многокритериальная оптимизация

2. Разработка математической модели задачи

2.1 Постановка задачи

2.2 Информационная модель

2.3 Метод полного перебора

2.4 Шкала Харрингтона

2.5 Метод ранга

2.6 Метод Парето

2.7 Метод Электра

3. Разработка программных средств для решения задачи

3.1 Обзор и достоинства языка C#

3.2 Структура программного комплекса

3.3 Инструкция пользователя

4. Верификация программных средств

Заключение

Список использованных источников

Приложения

Введение

Первые задачи оптимизационного характера, связанные с нахождением оптимальных величин, появились еще в древние времена. Развитие промышленности в XVII - XVIII веках привело к необходимости исследования более сложных задач и к появлению вариационного исчисления. Однако лишь в XX веке при огромном размахе производства и осознания ограниченности ресурсов Земли встала задача оптимального использования энергии, материалов, рабочего времени, большую актуальность приобрели вопросы наилучшего в том или ином смысле управления различными процессами физики, техники, экономики и других. Сюда относятся, например, задача организации производства с целью получения максимальной прибыли при заданных затратах ресурсов, задача управления системой гидростанций и водохранилищ с целью получения максимального количества электроэнергии, задача о космическом перелете из одной точки пространства в другую наибыстрейшим образом или с наименьшей затратой энергии, задача о быстрейшем нагреве или остывании металла до заданного температурного режима и многие другие задачи.

Потребности развития самой вычислительной математики так же привели к необходимости исследования таких задач, как, например, задачи оптимального выбора параметров итерационного процесса, задачи оптимизации закупки оборудования с определенными характеристиками при заданных ограничениях, задачи минимизации невязки уравнений.

В настоящее время теория оптимизационных задач обогатилась фундаментальными результатами, появились ее новые разделы. Потребности практики соответствовали бурному развитию приближенных методов решения оптимизационных задач. Появление быстродействующих электронно-вычислительных машин сделало возможным эффективное решение многих важных прикладных оптимизационных задач, которые ранее из-за своей сложности представлялись недоступными.

Достижение определенного результата может быть осуществлено не единственным образом. Все зависит от выбранного критерия. На практике оказывается, что в большинстве случаев понятие «наилучший» может быть выражено количественно - минимум затрат, минимум времени, максимум прибыли и т.д. Поэтому возможна постановка математических задач поиска оптимального результата, так как принципиальных различий в поиске наименьшего или наибольшего значения нет. Оптимальный результат, как правило, находится не сразу, а в результате процесса, называемого процессом оптимизации.

Цель данной курсовой работы заключается в разработке приложения, предназначенного для помощи в осуществлении оптимального выбора автомобиля для организации. Приложение должно позволять производить расчет оптимального решения на основе однокритериального и многокритериального анализа.

приложение однокритериальный автомобиль решение

1. Анализ методов однокритериальной и многокритериальной оптимизации

1.1 Понятие оптимизации

Оптимизация - это процесс приведения объекта (системы) в оптимальное (наилучшее) состояние. Для проведения оптимизации необходимы: математическая модель объекта, целевая функция и оптимизационный алгоритм, представленные на рисунке 1.1. Целевая функция формализует требования, предъявляемые к объекту (увеличение надежности, снижение стоимости, максимизация прибыли и т.д.). Оптимизационный алгоритм ищет экстремум целевой функции.

Иными словами под оптимизацией понимают процесс выбора наилучшего варианта из множества всех возможных. С точки зрения инженерных расчетов методы оптимизации позволяют выбирать наилучший вариант конструкции, наилучшее распределение ресурсов и т. д.

В процессе решения задач оптимизации, как правило, необходимо найти оптимальное значение некоторых параметров, которые определяют данную задачу. При решении инженерных задач их принято называть проектными параметрами. В качестве проектных параметров могут быть значения линейных размеров (массы, температуры и т. др.). Число проектных параметров характеризует размерность (степень сложности) задачи оптимизации.

Рисунок 1.1 - Процесс оптимизации

Выбор оптимального решения или сравнения двух альтернативных решений проводится с помощью некоторой зависимой величины (функции), которая определяется проектными параметрами. Эта величина называется целевой функцией или критерием качества. В процессе решения задачи оптимизации должны быть найдены такие значения проектных параметров, при которых целевая функция имеет максимум (или минимум). Таким образом, целевая функция-- это глобальный критерий оптимальности в математических моделях, с помощью которых описываются инженерные задачи.

Целевую функцию можно записать в следующем виде:

(1.1)

Примерами целевых функций, которые встречаются в инженерных расчетах, являются прочность или масса конструкции, мощность установки, объем выпуска продукции, стоимость перевозки грузов и др.

В случае одного проектного параметра целевая функция является функцией одной переменной и ее графики-- некоторая кривая на плоскости.

Стоит отметить, что целевая функция не всегда может быть представлена в виде формулы. Иногда она может принимать лишь некоторые дискретные значения, задаваться в виде таблицы и так далее. Однако в любом случае она должна быть однозначной функцией проектных параметров.

Целевых функций может быть несколько. Например, при проектировании изделий машиностроения одновременно требуется обеспечить максимальную надежность, минимальную материалоемкость, максимальный полезный объем (или же грузоподъемность).

Оптимизация осуществляется при помощи алгоритмов математического программирования и бывает структурной, параметрической и структурно-параметрической. В процессе структурной оптимизации оптимизируется структура объекта, в процессе же параметрической - оптимизируются параметры (номиналы) элементов, входящих в состав структуры. Эти задачи решаются при помощи алгоритмов дискретного, непрерывного и дискретно-непрерывного математического программирования, соответственно.

В зависимости от числа критериев, по которым выполняется оптимизация объекта, различают однокритериальную и многокритериальную оптимизацию. Так, например, если при синтезе усилителя необходимо лишь достичь максимального коэффициента усиления, то это будет задачей однокритериальной оптимизации. Если помимо максимального коэффициента усиления необходимо еще достичь минимального уровня шума (два критерия качества) - то это уже будет задачей многокритериальной оптимизации. Следует заметить, что обычно не удается достичь максимума сразу по нескольким критериям.

По наличию ограничений на целевую функцию и рабочие параметры различают оптимизацию без ограничений и при наличии ограничений. Так, если при синтезе усилителя необходимо, чтобы коэффициент усиления был не меньше какой-то заданной величины, то говорят о наложении ограничения на соответствующий критерий. Если же при этом требуется использовать номиналы элементов, значения которых должны попасть в какой-то заданный интервал (например, сопротивления должны быть не меньше 100 Ом и не больше 100 КОм), то тогда мы имеем дело с ограничениями на рабочие параметры.

И структурный, и параметрический синтез объектов может осуществляться при помощи оптимизационных алгоритмов: структурный синтез - при помощи методов дискретного математического программирования; параметрический - непрерывного; структурно-параметрический - при помощи алгоритмов дискретно-непрерывного математического программирования.

В случае параметрического синтеза при известной (заданной) структуре объекта подбираются параметры (номиналы) элементов таким образом, чтобы минимизировать (максимизировать) целевую функцию. Предположим, мы каким-то образом определили структуру изделия и хотим подобрать параметры элементов из которых он состоит, таким образом, мы собираемся провести параметрический синтез данного усилителя, используя оптимизационные алгоритмы. Для этого нам необходимо задать соответствующую целевую функцию и выбрать оптимизационный алгоритм. В результате минимизации (максимизации) целевой функции, мы получим изделие с минимальным (максимальным) значением искомого параметра.

Следует заметить, что существующие оптимизационные алгоритмы обычно не гарантируют нахождение глобального оптимума, но это не является критическим. Например, для увеличения вероятности нахождения глобального оптимума можно значительно увеличить число итераций, использовать несколько алгоритмов, многократно запускать соответствующие алгоритмы и т.д.

Если помимо подбора параметров необходимо еще и определить структуру объекта, то мы будем уже иметь дело со структурно-параметрическим синтезом. Если задача параметрической оптимизации сейчас решается практически для любых объектов, то развитие структурно-параметрической оптимизация сейчас находится лишь на начальной стадии развития.

Для решения задач оптимизации нужно располагать ресурсами оптимизации, под которыми понимают свободу выбора значений некоторых параметров оптимизируемого объекта. Другими словами, объект оптимизации должен обладать определенными степенями свободы, например, управляющими воздействиями, которые позволяют изменять его состояние в соответствии с теми или иными требованиями [1].

Ещё одно условие правильной постановки оптимальной задачи заключается в наличии количественной оценки качества объекта оптимизации. Это условие также необходимо, поскольку лишь в этом случае можно сравнить эффект от выбора тех или иных управляющих воздействий.

Количественная оценка оптимизируемого качества объекта может называться критерием оптимальности, целевой функцией, функцией качества, экономическим критерием и т.д. Вид критерия оптимальности определяется конкретным содержанием решаемой задачи оптимизации и может оказывать существенное влияние на выбор метода решения. В конечном итоге достигаемое значение критерия оптимальности дает количественную оценку эффекта оптимизации.

1.2 Классификация методов оптимизации

Классификацию задач оптимизации проводят по следующим признакам:

1) в зависимости от управляющих параметров различают следующие задачи:

--оптимизация при одной управляющей переменной - одномерная оптимизация;

оптимизация при нескольких управляющих переменных - многомерная оптимизация;

оптимизация при неопределённости данных;

оптимизация с непрерывными, дискретными и смешанным типом значений управляющих воздействий;

2) в зависимости от критерия оптимизации различают:

с одним критерием оптимизации - критерий оптимальности единственный;

со многими критериями;

3) по виду отображения функции детерминированное, вероятностное или неопределённое, что позволяет выделить соответственно:

задачи ПР в условиях определенности (детерминированные);

задачи ПР в условиях риска (вероятностная неопределённость);

задачи ПР в условиях неопределённости;

4) в зависимости от числа критериев, по которым выполняется оптимизация объекта:

задачи ПР со скалярным критерием (однокритериальная задача);

задачи ПР с векторным критерием (многокритериальные задачи);

5) тип системы отображает предпочтения одного лица или коллектива:

задачи индивидуального ПР;

задачи группового ПР;

6) по наличию ограничений на целевую функцию и рабочие параметры различают:

оптимизация без ограничений;

оптимизация при наличии ограничений (наложении ограничения на соответствующий критерий);

7) в зависимости от алгоритмов математического программирования оптимизация бывает:

структурной - оптимизируется структура объекта и используются дискретные алгоритмы математического программирования;

параметрической - оптимизируются параметры (номиналы) элементов, т.е. при известной (заданной) структуре объекта подбираются параметры (номиналы) элементов таким образом, чтобы минимизировать (максимизировать) целевую функцию. Используются алгоритмы непрерывного математического программирования;

структурно-параметрической. Используются алгоритмы дискретно-непрерывного программирования [2];

8) по числу оптимизирующих факторов. Здесь также можно выделить два подмножества:

однофакторные задачи;

многофакторные задачи.

Рассмотрим более подробно однокритериальные и многокритериальные задачи оптимизации.

1.3 Однокритериальная оптимизация

Существует значительное число систем, в частности из области управленческой деятельности, моделируя которые мы приходим к различным формам задач оптимизации. Рассмотрим задачу однокритериальной оптимизации. В общей форме она запишется следующим образом:

(1.2)

Т.е. на некотором допустимом множестве максимизируется либо минимизируется функция от вектора переменных .

Действительно, практически любая задача управления состоит в оптимизации заданной целевой функции при некоторых «организациях». Мы либо максимизируем прибыль (объем производства, функцию полезности, заданную в произвольную форму, или любой прочий эквивалент «счастья»), либо минимизируем затраты (риск при инвестировании, объем перевозок и т.д.). При этом в различных задачах нас ограничивают объем имеющихся денежных средств, объем ресурсов (сырьевых либо каких-то иных) и любые другие соображения. Подобные ограничения обычно записываются в виде равенств и неравенств. Таким образом, получаем следующую формулировку задачи оптимизации:

(1.3)

при (1.4)

(1.5)

Очевидно, что задача минимизации может быть превращена в задачу максимизации путем замены функции .

В частном случае, когда все функции , , являются линейными, задача называется задачей линейного программирования.

Рассмотрим данный тип задач. Для них характерно то, что целевая функция линейно зависит от , а также то, что ограничения, накладываемые на независимые переменные, имеют вид линейных равенств или неравенств относительно этих переменных.

Такие задачи часто встречаются на практике - например, при решении проблем, связанных с распределением ресурсов, планированием производства, организацией работы транспорта и т.д.

Общая задача линейной оптимизации заключается в нахождении максимума (минимума) линейной целевой функции. Вид целевой функции и ограничений описываются формулами (1.61.9).

, (1.6)

при ограничениях:

, (1.7)

, (1.8)

(1.9)

где целевая функция, критерий оптимальности или линейная форма;

x вектор неизвестных;

коэффициенты целевой функции;

коэффициенты ограничений;

величины правых частей ограничений.

Вектор значений неизвестных , удовлетворяющих условию задачи (1.7) - (1.9) , называется допустимым решением или допустимым планом задачи линейной оптимизации. Совокупность всех допустимых планов называется множеством допустимых планов. Допустимое решение называется оптимальным, если оно обеспечивает максимальное (или, в зависимости от условий задачи, минимальное) значение целевой функции.

Решение задач линейной оптимизации может быть получено без особых затруднений (естественно, при корректной формулировке проблемы). Классическим методом решения задач данного типа является симплекс-метод. В случае лишь двух переменных успешно может использоваться также графический метод решения, обладающий преимуществом наглядности. Очевидно, в случае n>2 применение графического метода невозможно [3].

1.4 Многокритериальная оптимизация

С привычной точки зрения задача со многими критериями решения не имеет - далеко не всегда есть возможность одновременного удовлетворения всех заданных условий. Поэтому, когда говорят о решении многокритериальной задачи, имеют в виду какой-нибудь компромисс между изначально противоречивыми требованиями. А так как практически любая подобная ситуация допускает разные компромиссные разрешения, то и подходы к поиску многочисленны и весьма разнообразны.

Пусть у нас имеется несколько целевых функций, которые для упрощения записи нам нужно максимизировать (как уже говорилось, задача на минимум преобразуется заменой знака функции на противоположный). По прежнему имеется набор ограничений, задающих область допустимых значений задачи. Получаем задачу многокритериальной оптимизации, которая в общей форме формулируется следующим образом:

(1.10)

где - некоторому множеству, называемому допустимым множеством задачи.

Главная возникающая здесь сложность в неоднозначности оптимального решения: в точке, где один из критериев достигает своего максимума, другой может быть очень далек не только от максимума, но и даже от какой-либо приемлемой величины. Проиллюстрировать возможную ситуацию можно на рисунке 1.2.

Рисунок 1.2 - Экстремумы функций

Видим, что максимум функций и достигается в точке b, однако она же является точкой минимума третьей функции , максимум которой достигается в точке а. Каким образом можно прийти к компромиссу? Существует множество подобных способов. Перечислим некоторые из подходов к задачам со многими критериями.

Метод уступок лицо, принимающее решения (руководитель), подводится к выбору решения путем постепенного ослабления первоначальных требований, как правило, одновременно невыполнимых.

Метод идеальной точки в области допустимых значений неизвестных ищется такая их совокупность, которая способна обеспечить набор значений критериев, в том или ином смысле ближайший к наилучшему, как правило, недосягаемому (в так называемой точке утопии).

Метод свертывания лицо, принимающее решения (руководитель), сводит многокритериальную задачу к задаче с одним критерием.

Метод ограничений множество допустимых значений неизвестных уменьшается путем осмысленного введения дополнительных ограничений на заданные критерии.

Метод анализа иерархий на основании суждений экспертов оценивается вклад в общую оценку каждого критерия.

Хотя перечисленные методы и носят отчетливо выраженный количественный характер, они нередко позволяют прояснить интересующую нас качественную картину.

Следует признать, что применение этих методов в реальных ситуациях, когда как число подлежащих определению величин и охватывающих их ограничений, так и число самих критериев особенно велики, сопряжено со значительными объемами вычислений. Поэтому при рассмотрении серьезной проблемы без привлечения современных вычислительных средств и эффективных алгоритмов никак не обойтись.

Обращаясь к многокритериальным задачам, мы сталкиваемся с ситуацией, когда оптимальность искомого решения уже не столь очевидна. Поэтому возникает необходимость в выборе еще одного, нового критерия, критерия оптимальности, и предъявлении заслуживающих доводов в его пользу.

По своему характеру критерии делятся на количественные и качественные. Грубо говоря, критерий является количественным, когда его значения имеет смысл сравнивать, указывая, на сколько или во сколько раз одно значение больше другого, и качественным, когда такие сравнения бессмысленны [4].

2. Разработка математической модели задачи

2.1 Постановка задачи

Организация выбирает автомобиль для своих сотрудников. Характеристики автомобилей, из которых делается выбор, хранятся в таблице базы данных

В курсовом проекте необходимо:

1) Разработать программное средство однокритериальной оптимизации по заданному параметру - стоимость. Выбран метод полного перебора.

2) Разработать программное средство многокритериальной оптимизации с учетом мнения двух экспертов. Для этого необходимо:

а) реализовать перевод качественных оценок в числовую форму по шкале Харрингтона;

б) определить значимость (веса) критериев методом Ранга;

в) реализовать отбор бесперспективных альтернатив (Множество Парето);

г) определить лучшую альтернативу методом Электра.

Подробные описания всех методов приведены далее.

2.2 Информационная модель

При исследовании предметной области возникла необходимость в использовании базы данных с информацией об автомобилях для удобной работы с данными.

Была создана одна таблица - «Cars», в которой содержится информация об автомобилях. Структура ТБД приведена в таблице 2.1.

Таблица 2.1 - Описание таблицы базы данных

Имя поля

Описание

Тип данных

Id

Код

Счетчик

Title

Марка

Текстовый

Cost

Стоимость

Числовой

Engine

Объем двигателя

Числовой

Type

Тип автомобиля (легковой, грузовой)

Текстовый

Conditioner

Наличие кондиционера

Текстовый

Mark

Оценка пользователя

Текстовый

2.3 Метод полного перебора

Метод перебора или равномерного поиска является простейшим из прямых методов минимизации. Перебор это решение задач, возникающих из заданной задачи. То есть значение некоторого искомого параметра фиксируется различным образом, и производится выбор того из рассмотренных значений, которое дает наиболее подходящее решение.

Основная задача при реализации переборных методов заключается в нахождении такого порядка элементов перебора, при котором искомый элемент «встретится» как можно раньше.

Необходимо учесть, что сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет.

Рисунок 2.1 Схема алгоритма перебора

2.4 Шкала Харрингтона

Для реализации многокритериальной оптимизации нам необходимо перевести все качественные оценки в числовую форму по шкале Харрингтона. Диапазон значений по данной шкале приведён в таблице 2.2.

Таблица 2.2 Шкала Харрингтона

Качественные оценки

Очень плохо

Плохо

Удовлетворительно

Хорошо

Отлично

Количественные оценки

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.67, «легковой» - 0.33.

2.5 Метод ранга

По методу рангов эксперт осуществляет ранжирование (упорядочение) исследуемых объектов организационной системы в зависимости от их относительной значимости (предпочтительности). Наиболее предпочтительному объекту обычно присваивается ранг 1, а наименее предпочтительному -- последний ранг, равный по абсолютной величине числу упорядочиваемых объектов. Более точным такое упорядочение становится при меньшем количестве объектов исследования и наоборот.

Таким образом, этот метод позволяет определить место исследуемого объекта среди других объектов. Достоинством метода рангов является его простота. Однако метод не позволяет с достаточной точностью ранжировать объекты, количество которых превышает 15 --20, а также ответить на вопрос, как далеко по значимости находятся исследуемые объекты друг от друга[9].

В нашей задаче каждый из экспертов (независимо от других) оценивает критерии по некоторой шкале (в данном случае, 10-балльной). Чем более важным является критерий, тем более высокий балл для него указывается.

а) Заносим результат оценок в матрицу размерности MxN, где M число экспертов, N число критериев. Обозначим эти оценки как Xij, i=1,...,M, j=1,...,N.

б) Находим суммарную оценку критериев по формуле 2.1

(2.1)

в) Определяем веса критериев по формуле 2.2

(2.2)

Наиболее важным является критерий, имеющий максимальный вес.

Схема алгоритма Ранга представлена на рисунке 2.2.

Рисунок 2.2 - Схема алгоритма метода Ранга

2.6 Метод Парето

В. Парето открыл эффект концентрированного напряжения. В данном случае имеется в виду, что концентрация на жизненно важной деятельности больше всего влияет на достижение желаемых результатов. Отсюда вытекает правило 20/80: концентрация 20 % времени на наиболее важных проблемах может привести к получению 80% результатов. Остальные 80% времени обеспечивают лишь оставшиеся 20% результатов.

В нашей задаче мы реализуем метод Парето для отбора бесперспективных альтернатив.

Алгоритм выделения области Парето:

Выбрать альтернативу Аi, полагая i = 1.

Альтернатива Аi сравнивается с остальными по всем показателям, и отмечаются те из них, которые строго хуже, чем Аi

Отмеченные альтернативы не могут принадлежать области Парето и из дальнейшего рассмотрения исключаются.

Полагаем i = i + 1.

Если и альтернатива Аi i уже была отмечена на предыдущих итерациях, то выполняется переход к п.4.

Если и альтернатива еще не помечена, то производится переход к п. 2.

Если , где n - число сравниваемых альтернатив, то осуществляется переход к п. 8.

Альтернативы, оставшиеся не отмеченными, образуют множество эффективных решений (область Парето) [5].

Данный метод позволяет сократить количество альтернатив, но не позволяет получить окончательное решение.

2.7 Метод Электра

Метод ЭЛЕКТРА (ELECTRE - Elimination Et Choice Traduisant la Realite - исключение и выбор, отражающие реальность) предложена профессором Б. Руа (Франция). Метод предназначен для решения задач, в которых из имеющегося множества альтернатив требуется выбрать заданное количество лучших альтернатив с учетом их оценок по нескольким критериям, а также важности этих критериев.

Основная идея метода заключается в следующем. Для каждой пары альтернатив (Xi и Xj ) выдвигается предположение (гипотеза) о том, что альтернатива Xi лучше, чем Xj. Затем для каждой пары альтернатив находятся два индекса: индекс согласия (величина, подтверждающая предположение о превосходстве Xi над Xj ) и индекс несогласия (величина, опровергающая это предположение). На основе анализа этих индексов выбирается одна или несколько лучших альтернатив («ядро» альтернатив).

Алгоритм метода состоит из следующих шагов:

Шаг_1. Выполняется переход к безразмерному виду критериев.

Шаг_2. Определяются индексы согласия cjk:

где , , vj - вес i-го критерия, , n - количество альтернатив, I+ - подмножество критериев, по которым j-я альтернатива не хуже k-й.

Шаг_3. Определяются индексы несогласия djk:

где , j = , k = , pik, pij - безразмерные оценки, n - количество альтернатив, i I- - подмножество критериев, по которым j-я альтернатива не превосходит k-ю.

Шаг_4. Находится предельное значение индекса согласия:

(2.5)

Шаг_5. Находится предельное значение индекса несогласия:

(2.6)

Шаг_6. Выделяются лучшие альтернативы или «ядро» альтернатив, удовлетворяющие условию:

cj > c*, dj < d*, (2.7)

где c*, d* - пороговые значения индексов, или уровни, согласия и несогласия соответственно (как правило, используют c* = d* = 0,5).

Если условие выполняется, то одна из альтернатив превосходит другую. В противном случае альтернативы несравнимы. Из множества альтернатив удаляются те, которые не удовлетворяют хотя бы по одному уровню. Оставшиеся образуют ядро альтернатив.

3. Разработка программных средств для решения задачи

3.1 Обзор и достоинства языка C#

C# имеет в стиле синтаксиса имеет много общего с Java (отсутствие множественного наследования и шаблонов, наличие сборщика мусора) и Delfi (ориентированность на создание компонент), в то же время имеет и свой колорит.

При создании языка в основу дизайна легла легкость использования, доминирующая над мощностью языка и скоростью выполнения. Отсюда и сборщик мусора с управляемыми объектными ссылками, который автоматически освобождает память, отбирая при этом процессорное время. Реализована безопасность работы с типами, а это, по мнению многих, является вторым важнейшим фактором избегания ошибок.

C# объектно-ориентированный язык, как и вся платформа .NET. Более того, это язык, ориентированный на написание компонент. C# создан для программирования в управляемой среде, но позволяет писать и неуправляемый код.

В языке также применяется автоматическая инициализация переменных. Все типы, которые размещаются в стеке инициализируются нулями. Объекты остальных типов размещаются в куче, доступ к ним осуществляется по объектной ссылке.

В C# представлена концепция пространств имен, аналогичная пакетам в Java. Это позволяет иерархически структурировать систему типов, делая код намного более понятным и позволяя избежать проблем с именованием. Вы можете рассматривать пространства имен как директории, а языковые типы как файлы в этих директориях.

C# позволяет использовать при разработке парадигму атрибутивного программирования, когда в компиляционных модулях вместе с типом может сохраняться мета-информация. Данная информация впоследствии может быть получена и использована во время выполнения. Более того, этой информацией может воспользоваться компилятор или, скажем, дизайнер, что позволяет, не запуская компонент, получать информацию о нем.

Microsoft Visual Studio -- линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ.

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода, добавление новых наборов инструментов.

3.2 Структура программного комплекса

Для решения поставленной задачи была выбрана среда разработки приложений - Microsoft Visual Studio 2010. Разработанная программа состоит из графического класса и нескольких классов, выполняющих расчет.

Класс Form1, главный класс, который отображает главное окно приложения с навигацией и исходные данные для выполнения проекта. Он содержит графические элементы, позволяющие загрузить остальные классы.

Класс OdnOpt, служит для реализации однокритериальной оптимизации, элементы класса описаны в таблице 3.1;

Таблица 3.1 - Элементы класса «OdnOpt»

Название метода

Описание

private void button1_Click()

метод реализует однокритериальную оптимизацию по установленному критерию из TextBox1

класс MnogOpt, служит для реализации многокритериальной оптимизации, элементы класса описаны в таблице 3.2;

Таблица 3.2 - Элементы класса «MnogOpt»

Название метода

Описание

public bool PustTabl()

проверяет, введены ли оценки экспертов

public bool PustBox()

проверяет, введены ли уровни согласия и несогласия

public double[,] ReadFromTable()

считывает оценки экспертов из таблицы

public void button1_Click()

запускает многокритериальную оптимизацию

Класс MnogOpt содержит вложенные классы Perevod и MnogokrOptimiz, предназначенные для реализации этапов многокритериальной оптимизации. Элементы этих классов описаны в таблицах 3.3 и 3.4 соответственно.

Таблица 3.3 - Элементы класса «Perevod»

Название метода

Описание

public void BezrazmVid()

перевод количественных характеристик автомобилей в безразмерный вид

public void DaNet()

перевод характеристик типа «да-нет» в безразмерный вид

public void Tip()

перевод типа автомобиля в безразмерный вид

public void PerevodPoshksle()

перевод качественных характеристик автомобилей по шкале Харрингтона

Таблица 3.4 - Элементы класса «MnogokrOptimiz»

Название метода

Описание

public double[] MetodRanga()

определение весов критериев методом Ранга

public void MetodPareto()

реализует «отбрасывание» неподходящих альтернатив и формирование области Парето

public void Elektra()

определение оптимального автомобиля методом Электра и формирование ядра альтернатив

Исходный код приложения представлен в приложениях А, Б, В, Г.

3.3 Инструкция пользователя

Разработанный пользовательский интерфейс является простым и интуитивно-понятным для обычного пользователя. Программный продукт состоит из четырех форм, первая из которых отображает характеристики автомобиля, вторая реализует однокритериальную оптимизацию, третья служит для ввода оценок экспертов и вывода лучших альтернатив после многокритериальной оптимизации, а четвертая отображает более подробные данные о ходе многокритериальной оптимизации.

При запуске программы появится форма, отображающая характеристики автомобилей. Вид этой формы представлен на рисунке 3.1.

Рисунок 3.1 - Вид окна при запуске приложения

Пользователю предоставляется выбор: он может запустить однокритериальную или многокритериальную оптимизацию, выбрав соответствующий пункт меню.

При выборе пункта «Однокритериальная оптимизация» появится форма, вид которой представлен на рисунке 3.2.

Рисунок 3.2 - Вид формы «Однокритериальная оптимизация»

Здесь можно ввести ограничение - минимальную стоимость автомобиля. После нажатия кнопки «Поиск» будет выведен результат оптимизации. Вид формы с результатами представлен на рисунке 3.3.

Рисунок 3.3 - Вид формы с результатами однокритериальной оптимизации

При выборе пункта меню «Многокритериальная оптимизация» появится форма для ввода экспертных оценок и уровней согласия и несогласия. Вид формы с уже введенными данными представлен на рисунке 3.4.

Рисунок 3.4 - Вид формы «Многокритериальная оптимизация»

После нажатия кнопки «Выполнить многокритериальную оптимизацию» к форме добавляется таблица с результатами оптимизации. Ее вид представлен на рисунке 3.5.

Рисунок 3.5 - Вид формы «Многокритериальная оптимизация» с результатами

Здесь пользователь может увидеть лучшие альтернативы, а также нажать кнопку «Подробнее», чтобы получить сведения о промежуточных этапах оптимизации. Вид формы «Дополнительно» представлен на рисунке 3.6.

Рисунок 3.6 - Вид формы «Дополнительно»

4. Верификация программных средств

Для проверки выполненной оптимизации решим эту задачу вручную, сократив количество альтернатив до трех.

Первый шаг - вычисление веса критериев методом Ранга. Оценим критерии с точки зрения двух экспертов и запишем данные в таблицу 4.1.

Таблица 4.1 - Оценки экспертов

Стоимость

Объем двигателя

Тип

Наличие кондиционера

Оценка пользователя

Э1

8

9

6

5

7

Э2

7

8

5

6

9

Вычислим сумму оценок каждому критерию, а затем общую оценку критериям:

С1=8+7=15;

С2=9+8=17;

С3=6+5=11;

С4=5+6=11;

С5=7+9=16;

С=15+17+11+11+16=70.

Затем определяем вес критериев как частное суммы оценок каждого критерия к общей оценке.

V1=15/70=0,214;

V2=17/70=0,243;

V3=11/70=0,157;

V4=11/70=0,157;

V5=16/70=0,229.

Сравним полученные веса с результатами программы, которые представлены на рисунке 4.1.

Рисунок 4.1 - Результаты расчета веса критериев программно

Следующий шаг для верификации - перевод характеристик автомобилей в безразмерную форму. Критерий «стоимость» должен стремиться к минимуму, поэтому для перевода его в безразмерную форму необходимо найти минимальный элемент в строке и делить его на каждый элемент этой строки. Критерий «объем двигателя» должен стремиться к максимуму, поэтому для перевода мы должны найти максимальный элемент в строке и делить на него каждый элемент этой строки. Критерий «тип автомобиля» имеет два варианта: «легковой» и «грузовой». Полагаем, что этим вариантам соответствуют значения 0,33 и 0,66 соответственно. Критерий «наличие кондиционера» представлен двумя вариантами: «да» (0,66) и «нет» (0,33). Критерий «оценка пользователя» переводится по шкале Харрингтона.

Исходные характеристики автомобилей представлены в таблице 4.2.

Таблица 4.2 - Характеристики автомобилей

Марка

Стоим.

Объем двигателя

Тип

Кондиционер

Оценка пользователя

Audi 100

60

2

легковой

да

хорошо

BMW 525

90

2,5

легковой

да

отлично

Mazda 626

20

1,8

легковой

нет

удовлетворительно

Представим расчет для критерия «стоимость»:

Минимальный элемент = 20.

Х11=20/60=0,333;

Х21=20/90=0,222;

Х31=20/20=1.

Расчет для критерия «объем двигателя»:

Максимальный элемент = 2,5.

Х12=2/2,5=0,8;

Х22=2,5/2,5=1;

Х32=1,8/2,5=0,72.

Расчет для критерия «тип автомобиля»:

Х13=легковой=0,33;

Х23=легковой=0,33;

Х33=легковой=0,33.

Расчет для критерия «наличие кондиционера»:

Х14=да=0,66;

Х24=да=0,66;

Х34=нет=0,33.

Расчет для критерия «оценка пользователя»:

Х15=хорошо=0,7;

Х25=отлично=0,9;

Х35=удовлетворительно=0,5.

Сравним результаты с программой, представленной на рисунке 4.2.

Рисунок 4.2 - Безразмерная форма характеристик автомобилей

Следующий шаг - формирование множество Парето-оптимальных альтернатив. Проверим, есть ли автомобили, по всем характеристикам уступающие или равные другим.

Альтернатива 1 хуже альтернативы 3 по критерию «стоимость», но лучше или равна по другим критериям. Она остается во множестве.

Альтернатива 2 хуже других по критерию «стоимость», однако лучше или равна по остальным критериям. Она остается во множестве.

Альтернатива 3 хуже или равна других по всем критериям, кроме критерия «стоимость», по которому она лучше. Она также остается во множестве.

Таким образом, множество Парето совпадает с исходным множеством. Сравним с результатами программы, которые представлены на рисунке 4.3.

Рисунок 4.3 - Множество Парето, составленное программой

Заключительный шаг - заполнение матриц индексов согласия и несогласия и формирование ядра альтернатив.

Вычислим индексы согласия, сравнивая первый автомобиль со вторым и первый с третьим:

С12=0,214+0,157+0,157=0,528;

С21=0,243+0,157+0,157+0,229=0,786;

С13=0,243+0,157+0,157=0,557;

С31=0,214+0,157=0,371.

Вычислим индексы несогласия, сравнивая те же станки:

D12=max[1-0,8;0,9-0,7]=0,2;

D21=max[0,333-0,222]= 0,933-0,333=0,111;

D13=max[1-0,333]=0,666;

D31=max[0,8-0,72; 0,666-0,333; 0,7-0,5]=0,333.

Представим для сравнения матрицы индексов согласия и несогласия из программы на рисунке 4.3.

Рисунок 4.3 - Матрицы индексов согласия и несогласия

Для формирования ядра альтернатив необходимо вычислить предельные значения индексов:

С1=min[0,528; 0,785]=0,528;

С2= min[0,785; 0,785]=0,785;

С3= min[0,371; 0,371]=0,371.

D1=max[0,2; 0,666]=0,666;

D2=max[0,111; 0,777]=0.777;

D3=max[0,34; 0,4]=0,4.

Сравним расчеты с результатами программы, которые представлены на рисунке 4.4.

Рисунок 4.4 - Предельные значения индексов согласия и несогласия

При установлении уровня согласия 0,5, а уровня несогласия 0,7 в ядро альтернатив попадает альтернатива 1 - Audi 100. В программе результат оказался аналогичным. Результат представлен на рисунке 4.5.

Рисунок 4.5 - Ядро альтернатив, полученное в программе

Сравнивая все результаты, полученные вручную, и результаты выполнения оптимизации программой, можно сделать вывод, что данная программа работает корректно.

Таким образом, была создана программа для реализации однокритериальной и многокритериальной оптимизации, которая осуществляет ввод оценок экспертов, позволяет устанавливать пороги индексов согласия и несогласия, а так же выводит результат в удобной форме.

Заключение

В результате выполнения курсового проекта были решены поставленные задачи по однокритериальной и многокритериальной оптимизации.

Разработанная программа создана для того, чтобы организация могла подобрать оптимальный автомобиль для своих сотрудников. Программа позволяет вводить экспертные оценки, и если пользователь программы по знаниям не может оценить важности критериев, то следует прибегать к людям, которые хорошо ориентируются в этой области.

Интерфейс прост в использовании и доступен большому числу пользователей. Для сокращения ошибок при работе с программой были реализованы поля со списком и сообщения об ошибках.

Программа проверена на тесте, что дает возможность сделать заключение о корректности ее работы. Были сравнены веса критериев, таблица безразмерной формы, множество Парето, матрицы индексов согласия и несогласия, предельные значения индексов и результаты оптимизации.

Безусловно, совершенно идеальных оптимизационных решений быть не может. В данном курсовом проекте при изменении порога согласия или несогласия экспертов формируется ядро, в которое могут входить разные автомобили.

В результате решения поставленной задачи можно увидеть, что однокритериальная оптимизация менее точна и объективна, нежели многокритериальная. Но есть надежда, что в будущем оптимизационные задачи приблизятся к совершенству, позволяя получать близкое к идеалу решение при минимальной погрешности.

Список использованных источников

1. Вентцель Е.С. Исследование операций: задачи, принципы, методология.-2-е изд., стер. М.: Наука. Гл. ред. Физ.-мат. Лит., 1988.

2. Акимов, С. В. Проблемы автоматизации структурно-параметрического синтеза / С. В. Акимов. - СПб.: Челябинск, 2006. - 58 с.

3. Горбунов, В.М. Теория принятия решений. Учебное пособие / В.М. Горбунов. Томск: Национальный исследовательский томский политехнический университет, 2010. 67 с.

4. Матузко, Ю.О. Теория принятия решений. Учебно-методическое пособие / Ю.О. Матузко. Запорожье: Запорожская государственная инженерная академия, 2009. 61 с.

5. Лесин, В.В. Основы методов оптимизации / В.В. Лесин, Ю.П. Лисовец. - М.: Изд-во МАИ, 1995. - 344 с.

6. Шикин, Е. В. Исследование операций / Е. В. Шикин, Г. Е. Шикина. М.: ТК Велби, Изд-во Проспект, 2006. 280 с.

7. Федоров, A. Microsoft Visual Studio 2010: первое знакомство / А. Федоров. М.: Books Gui, 2009. - 92 с.

8. Ногин В. Д. Принятие решений в многокритериальной среде: количественный подход. / В. Д. Ногин - М.: ФИЗМАТЛИТ, 2005, 176 с.

9. Подиновский, В.В. Парето-оптимальные решения многокритериальных задач. / В.В. Подиновский, В.Д. Ногин. М.: Наука. Главная редакция физико-математической литературы, 1982. - 256 с.

Приложение А

(обязательное)

Исходный код главной формы

using System;

using System.Collections;

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 OPR

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

public double[,] Parametri;

public double[,] x;

public ArrayList alternativi = new ArrayList();

private void Form1_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "dbDataSet.Cars". При необходимости она может быть перемещена или удалена.

this.carsTableAdapter.Fill(this.dbDataSet.Cars);

dataGridView1.RowHeadersWidth = 120;

for(int i=0; i<dataGridView1.RowCount;i++)

dataGridView1.Rows[i].HeaderCell.Value = dataGridView1[1,i].Value+"";

}

public double[,] ReadFromTable(DataGridView dg)

{

double[,] matr = new double[dg.RowCount, dg.ColumnCount];

for (int i = 0; i < matr.GetLength(0); i++)

for (int j = 0; j < matr.GetLength(1); j++)

matr[i, j] = Convert.ToDouble(dg[j, i].Value);

return matr;

}

private void однокритериальнаяОптимизацияToolStripMenuItem_Click(object sender, EventArgs e)

{

Form opt_1 = new OdnOpt();

opt_1.Visible = true;

}

private void многокритериальнаяОптимизацияToolStripMenuItem_Click(object sender, EventArgs e)

{

Form opt_2 = new MnogOpt(this);

opt_2.Visible = true;

}

}

}

Приложение Б

(обязательное)

Исходный код формы «Однокритериальная оптимизация»

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 OPR

{

public partial class OdnOpt : Form

{

int nom;

public OdnOpt()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

if (textBox1.Text != "")

{

bool f = true;

int min = int.MaxValue;

string[] opt = new string[7];

listBox1.Items.Clear();

listBox1.Items.Add("Наилучший автомобиль: \n");

for (int i = 0; i < dbDataSet.Cars.Rows.Count; i++)

{

if (Convert.ToInt32(dbDataSet.Cars.Rows[i][2].ToString()) > Convert.ToInt32(textBox1.Text))

{

f = false;

if (Convert.ToInt32(dbDataSet.Cars.Rows[i][2].ToString()) < min)

{

opt[0] = dbDataSet.Cars.Rows[i][0].ToString();

opt[1] = dbDataSet.Cars.Rows[i][1].ToString();

opt[2] = dbDataSet.Cars.Rows[i][2].ToString();

opt[3] = dbDataSet.Cars.Rows[i][3].ToString();

opt[4] = dbDataSet.Cars.Rows[i][4].ToString();

opt[5] = dbDataSet.Cars.Rows[i][5].ToString();

opt[6] = dbDataSet.Cars.Rows[i][6].ToString();

min = Convert.ToInt32(opt[2]);

nom = i;

}

}

}

if (f)

{

listBox1.Items.Add("Нет подходящих автомобилей");

}

else

{

listBox1.Items.Add(opt[1] + " стоимостью: " + min + " млн.руб;");

listBox1.Items.Add("Характеристики:\n");

listBox1.Items.Add("Объем двигателя: " + opt[3] + " л");

listBox1.Items.Add("Тип автомобиля: " + opt[4]);

listBox1.Items.Add("Наличие кондиционера: " + opt[5]);

listBox1.Items.Add("Оценка пользователя: " + opt[6]);

}

}

}

private void OdnOpt_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "dbDataSet.Cars". При необходимости она может быть перемещена или удалена.

this.carsTableAdapter.Fill(this.dbDataSet.Cars);

}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57))

e.Handled = true;

}

}

}

Приложение В

(обязательное)

Исходный код формы «Многокритериальная оптимизация»

using System;

using System.Collections;

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 OPR

{

public partial class MnogOpt : Form

{

Form1 f1;

public double a, b;

public MnogOpt(Form1 f)

{

InitializeComponent();

f1 = f;

}

private void MnogOpt_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "dbDataSet.Cars". При необходимости она может быть перемещена или удалена.

this.carsTableAdapter.Fill(this.dbDataSet.Cars);

dataGridView1.RowCount = 2;

dataGridView1.Rows[0].HeaderCell.Value = "Э1";

dataGridView1.Rows[1].HeaderCell.Value = "Э2";

dataGridView1.RowHeadersWidth = 60;

this.Height = 230;

}

public bool PustTabl(DataGridView tabl)

{

bool flag = true;

for (int i = 0; i < tabl.RowCount && flag == true; i++)

for (int j = 0; j < tabl.ColumnCount && flag == true; j++)

if (tabl[j, i].Value == null)

flag = false;

return flag;

}

public bool PustBox()

{

bool flag = true;

if (comboBox1.SelectedItem == null || comboBox2.SelectedItem == null)

flag = false;

return flag;

}

public double[,] ReadFromTable(DataGridView dg)

{

double[,] matr = new double[dg.RowCount, dg.ColumnCount];

for (int i = 0; i < matr.GetLength(0); i++)

for (int j = 0; j < matr.GetLength(1); j++)

matr[i, j] = Convert.ToDouble(dg[j, i].Value);

return matr;

}

public double[] VesaKrit = new double[5];

public double[,] ocenki;

public string[,] pareto;

public double[] alter;

public int[] rez;

public double[,] ms;

public double[,] mns;

public double[] pr_is;

public double[] pr_ins;

public void button1_Click(object sender, EventArgs e)

{

if (PustTabl(dataGridView1) == true && PustTabl(f1.dataGridView1) == true && PustBox() == true)

{

label2.Text = "Нет подходящих альтернатив";

this.Height = 490;

groupBox2.Visible = true;

f1.x = f1.ReadFromTable(dataGridView1); // считываем оценки экспертов по критериям из таблицы

MnogokrOptimiz mn = new MnogokrOptimiz(f1.x, f1.alternativi);

f1.alternativi.Clear();

for (int i = 0; i < f1.dataGridView1.RowCount; i++)

f1.alternativi.Add(i);

VesaKrit = mn.MetodRanga(); // рассчитываем веса критериев по методу ранга

//*****перевод характеристик в безразмерный вид*****//

Perevod pr = new Perevod(f1.dataGridView1.ColumnCount - 2, f1.dataGridView1.RowCount);

double[] stoimost = new double[f1.dataGridView1.RowCount];

for (int i = 0; i < stoimost.Length; i++)

stoimost[i] = Convert.ToDouble(f1.dataGridView1[2, i].Value);

pr.BezrazmVid(stoimost, 0, false);

double[] engine = new double[f1.dataGridView1.RowCount];

for (int i = 0; i < engine.Length; i++)

engine[i] = Convert.ToDouble(f1.dataGridView1[3, i].Value);

pr.BezrazmVid(engine, 1, true);

string[] type = new string[f1.dataGridView1.RowCount];

for (int i = 0; i < type.Length; i++)

type[i] = f1.dataGridView1[4, i].Value.ToString();

pr.Tip(type, 2);

string[] condit = new string[f1.dataGridView1.RowCount];

for (int i = 0; i < condit.Length; i++)

condit[i] = f1.dataGridView1[5, i].Value.ToString();

pr.DaNet(condit, 3);

string[] mark = new string[f1.dataGridView1.RowCount];

for (int i = 0; i < mark.Length; i++)

mark[i] = f1.dataGridView1[6, i].Value.ToString();

pr.PerevodPoshksle(mark, 4);

ocenki = new double[f1.dataGridView1.RowCount,f1.dataGridView1.ColumnCount - 2];

for (int i = 0; i < pr.ocenki.GetLength(0); i++)

for (int j = 0; j < pr.ocenki.GetLength(1); j++)

ocenki[i, j] = pr.ocenki[i, j];

mn.MetodPareto(pr.ocenki); // отсеиваем бесперспективные альтернативы

int nn = 0;

alter = new double[mn.alt.Count];

for (int i = 0; i < alter.Length; i++)

alter[i] = Convert.ToDouble(mn.alt[i]);

pareto = new string[f1.dataGridView1.RowCount, f1.dataGridView1.ColumnCount - 1];

for (int i = 0; i < pareto.GetLength(0) && nn < alter.Length; i++)

{

if (i == alter[nn])

{

for (int j = 0; j < pareto.GetLength(1); j++)

pareto[nn, j] = f1.dataGridView1[j + 1, i].Value.ToString();

nn++;

}

}

mn.Elektra(pr.ocenki, VesaKrit); // выполнение метода Электра

ms = mn.mis;

mns = mn.mins;

pr_is = mn.min_is;

pr_ins = mn.max_ins;

a = Convert.ToDouble(comboBox1.Text);

b = Convert.ToDouble(comboBox2.Text);

rez = mn.best(a, b);

if (rez[0] == 1000)

{

label2.Visible = true;

dataGridView2.RowCount = 0;

dataGridView2.ColumnCount = 0;

}

else

{

label2.Visible = false;

int k = 0; int n = 0;

for (int i = 0; i < rez.Length && rez[i] != 1000; i++)

k++;

dataGridView2.RowCount = k;

dataGridView2.RowHeadersWidth = 142;

dataGridView2.ColumnCount = 6;

dataGridView2.Columns[0].Visible = false;

dataGridView2.Columns[5].Width = 120;

dataGridView2.Columns[1].HeaderCell.Value = "Стоимость, млн.руб.";

dataGridView2.Columns[2].HeaderCell.Value = "Объем двигателя, л.";

dataGridView2.Columns[3].HeaderCell.Value = "Тип";

dataGridView2.Columns[4].HeaderCell.Value = "Наличие кондиционера";

dataGridView2.Columns[5].HeaderCell.Value = "Оценка пользователя";

for (int i = 0; i < f1.dataGridView1.RowCount; i++)

if (i == rez[n])

{

for (int j = 0; j < f1.dataGridView1.ColumnCount - 1; j++)

{

dataGridView2[j, n].Value = f1.dataGridView1[j + 1, i].Value.ToString();

}

n++;

}

for (int i = 0; i < dataGridView2.RowCount; i++)

dataGridView2.Rows[i].HeaderCell.Value = dataGridView2[0, i].Value + "";

}

}

else MessageBox.Show("Введены не все данные!!!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.