Теория Принятия Решений Лабораторная 1
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационной безопасности
ПРАКТИЧЕСКАЯ РАБОТА №1 по дисциплине «Теория принятия решений»
Тема: Реализация метода последовательных уступок
Санкт-Петербург
2025
ЗАДАНИЕ
НА ЛАБОРАТОРНУЮ РАБОТУ
Группа Тема работы: реализовать на любом языке программу с
пользовательским интерфейсом, позволяющая производить решение многокритериальной задачи методом последовательных уступок.
Исходные данные: Метод последовательных уступок.
Содержание пояснительной записки:
Титульный лист, лист задания на практическую работу, содержание,
теоретическое введение, решение поставленной задачи, вывод, список использованных источников, приложение А — исходный код программы.
Дата выдачи задания: 08.03.2025
Дата сдачи задания: 22.03.2025
СОДЕРЖАНИЕ
Задание на лабораторную работу ................................................................ |
2 |
Содержание.................................................................................................... |
3 |
Теоретическое введение ............................................................................... |
4 |
Решение поставленной задачи ..................................................................... |
8 |
Вывод............................................................................................................ |
12 |
Список использованных источников ........................................................ |
13 |
Приложения ................................................................................................. |
14 |
Приложение А. исходный код программы............................................ |
14 |
ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ
Целью практической работы является реализация метода последовательных уступок на любом удобном языке программирования.
Формулировка определений и их свойств
В данной работе многокритериальная задача решается методом последовательных уступок. При этом ограничения задаются линейно, поэтому для нахождения значения каждой функции цели используется симплекс метод.
•Метод последовательных уступок
Процедура решения многокритериальной задачи методом последовательных уступок заключается в том, что все частные критерии располагают и нумеруют в порядке их относительной важности;
максимизируют первый, наиболее важный критерий; затем назначают величину допустимого снижения значения этого критерия и максимизируют второй по важности частный критерий при условии, что значение первого критерия не должно отличаться от максимального более чем на величину установленного снижения (уступки); снова назначают величину уступки, но уже по второму критерию и находят максимум третьего по важности критерия при условии, чтобы значения первых двух критериев не отличались от ранее найденных максимальных значений больше чем на величины соответствующих уступок; далее подобным же образом поочередно используются все остальные частные критерии; оптимальной обычно считают любую стратегию, которая получена при решении задачи отыскания условного максимума последнего по важности критерия.
Таким образом, при использовании метода последовательных уступок многокритериальная задача сводится к поочередной максимизации частных критериев и выбору величин уступок. Величины уступок характеризуют отклонение приоритета од них частных критериев перед другими от лексикографического: чем уступки меньше, тем приоритет жестче.
•Симплекс метод
Симплекс метод — это метод последовательного перехода от одного базисного решения системы ограничений задачи линейного программирования к другому базисному решению до тех пор, пока функция цели не примет оптимального значения (максимума или минимума).
Симплекс-метод является универсальным методом, которым можно решить любую задачу линейного программирования.
Всякое неотрицательное решение системы ограничений называется допустимым решением. Пусть имеется система ограничений с переменными ( < ).
Допустимым базисным решением является решение, содержащее неотрицательных основных (базисных) переменных и − неосновных. (небазисных, или свободных) переменных. Неосновные переменные в базисном решении равны нулю, основные же переменные, как правило,
отличны от нуля, то есть являются положительными числами.
Любые переменных системы линейных уравнений с переменными называются основными, если определитель из коэффициентов при них отличен от нуля. Тогда остальные − переменных называются неосновными (или свободными).
Важные условия Если допустимое базисное решение даёт оптимум линейной формы
(критерий оптимальности выполнен), а в выражении линейной формы через неосновные переменные отсутствует хотя бы одна из них, то полученное оптимальное решение - не единственное.
Если в выражении линейной формы имеется неосновная переменная с отрицательным коэффициентом в случае её максимизации (с положительным
- в случае минимизации), а во все уравнения системы ограничений этого шага указанная переменная входит также с отрицательными коэффициентами или отсутствует, то линейная форма не ограничена при данной системе
ограничений. В этом случае её максимальное (минимальное) значение записывают в виде F = ∞ ( = −∞).
Описание алгоритма симплекс метода
Шаг 1. Привести задачу линейного программирования к канонической форме. Для этого перенести свободные члены в правые части (если среди этих свободных членов окажутся отрицательные, то соответствующее уравнение или неравенство умножить на - 1) и в каждое ограничение ввести дополнительные переменные (со знаком "плюс", если в исходном неравенстве знак "меньше или равно", и со знаком "минус", если "больше или равно").
Шаг 2. Если в полученной системе m уравнений, то m переменных принять за основные, выразить основные переменные через неосновные и найти соответствующее базисное решение. Если найденное базисное решение окажется допустимым, перейти к допустимому базисному решению.
Шаг 3. Выразить функцию цели через неосновные переменные допустимого базисного решения. Если отыскивается максимум (минимум)
линейной формы и в её выражении нет неосновных переменных с отрицательными (положительными) коэффициентами, то критерий оптимальности выполнен и полученное базисное решение является оптимальным - решение окончено. Если при нахождении максимума
(минимума) линейной формы в её выражении имеется одна или несколько неосновных переменных с отрицательными (положительными)
коэффициентами, перейти к новому базисному решению.
Шаг 4. Из неосновных переменных, входящих в линейную форму с отрицательными (положительными) коэффициентами, выбирают ту, которой соответствует наибольший (по модулю) коэффициент, и переводят её в основные. Переход к шагу 2
Описание программы
Поскольку в качестве языка программирования был выбран язык «Java»,
поля и методы были реализованы при помощи парадигмы объектно-
ориентированного программирования, где каждый класс отвечает за свой
«функционал»:
•Класс Main
Отвечает за запуск программы
•Класс Interface
Класс Interface отвечает за графический пользовательский интерфейс, а
также за вызов функций, которые должны выполнятся по мере нажатия определенных кнопок интерфейса. Отвечает за «сбор» введенных пользователем данных в массивы.
•Класс Backend
Данный класс отвечает за дополнительные функции программы, в
данном случае «оптимизация ввода», а также функция, отвечающая за инициализацию решения.
•Класс Matrix
Отвечает за функции, связанные с матричными преобразованиями. В
данной программе потребовалась только лишь функция вывода матриц в поток вывода.
•Класс SimplexMethod
Класс, отвечающий за решение монокритериальной задачи с заданными ограничениями.
•Класс Log
Данный класс отвечает за ведения журнала лога программы: запись в лог и выгрузка информации из файла лога в интерфейс программы.
РЕШЕНИЕ ПОСТАВЛЕННОЙ ЗАДАЧИ
Для решения поставленной задачи был написан код на языке программирования Java 23.0.1. В качестве программного обеспечения использовались: операционная система Windows 10 pro x64 версии 22H2,
интегрированная среда разработки (IDE) JetBrains IntelliJ IDEA версии 2023.1,
компилятор OpenJDK 22. Для реализации графического интерфейса была использована библиотека JavaFX версии 23.0.1.
По результатам программирования была получена программа, которая считает метод последовательных уступок следующим образом:
•Производится расчет первой функции цели с ограничениями,
введенными пользователем.
•Далее коэффициенты функции цели идут в качестве ограничения,
при условии, что это ограничение не превышает (не меньше) посчитанное значение первой функции с учетом и без учета уступки (наиболее подходящий из двух результатов возвращается).
•Пункт 2 повторяется, пока существуют функции цели.
Стоит учесть, что новые ограничения добавляются каждый раз, и
учитываются в дальнейшем. Также немаловажным фактором является то, что уступка имеет одно значение и распространяется на все функции цели
Также важным пунктом является и то, что все введенные данные и вычисления записываются в файл-журнал.
Было произведено несколько тестов. В качестве первых тестовых значений были взяты следующие функции цели:
31 + 22 + 3 → {4 1 + 52 + 83 →
При ограничениях:
{ 31 + 52 + 3 ≥ 3 4 1 + 52 + 83 ≥ 1
При уступке равной 1
Эти данные введены в программу (рисунок 1)
Рисунок 1. Ввод в программу
Результатом работы программы стало значение функции цели №2 равное
трем (рисунок 2)
Рисунок 2. Результат работы программы.
Теперь попробуем поменять уступку на 1.5. По идее, увеличивая уступки, значение функции должно сильнее приблизиться к минимуму. И
действительно, было получено значение меньшее, чем при предыдущем расчете (рисунок 3).
