Автор работы: Пользователь скрыл имя, 17 Января 2013 в 22:50, реферат
Работа посвящена наиболее распространенному методу решения задачи линейного программирования – симплекс-методу. Симплекс-метод является классическим и наиболее проработанным методом в линейном программировании.
Введение
1. Описание задачи
2. Описание метода решения
3. Проектирование интерфейса
4. Структура программного модуля
5. Тестирование
Заключение
Список использованной литературы и программных средств
Приложение 1. Интерфейс приложения
Приложение 2. Листинг класса SimplexSolve
Содержание
Введение
1. Описание задачи
2. Описание метода решения
3. Проектирование интерфейса
4. Структура программного модуля
5. Тестирование
Заключение
Список использованной литературы и программных средств
Приложение 1. Интерфейс приложения
Приложение 2. Листинг класса SimplexSolve
Введение
Линейное программирование – математическая дисциплина, посвященная теории и методам решения экстремальных задач на множествах n-мерного векторного пространства, задаваемых системами линейных уравнений и неравенств.
Линейное программирование является частным случаем выпуклого программирования, которое в свою очередь является частным случаем математического программирования. Термин «программирование» нужно понимать в смысле «планирования». Он был предложен в середине 1940-х годов Джорджем Данцигом, одним из основателей линейного программирования, ещё до того, как компьютеры были использованы для решения линейных задач оптимизации.
Работа посвящена наиболее распространенному методу решения задачи линейного программирования – симплекс-методу. Симплекс-метод является классическим и наиболее проработанным методом в линейном программировании.
1. Описание задачи
Задача линейного
В качестве конкретных примеров задач, которые относятся к области линейного программирования, можно назвать задачу об использовании сырья, задачу об использовании мощностей, задачу на составление оптимальной производственной программы.
Задача ЛП заключается
в отыскании вектора
, максимизирующего/
(1)
при следующих линейных ограничениях
(2)
(3)
Запись задачи ЛП в виде (1)-(3) называется нормальной формой задачи.
Эту же задачу ЛП можно представить в векторно-матричной записи:
(4)
где - вектор коэффициентов целевой функции,
- вектор решения,
- вектор свободных членов,
- матрица коэффициентов.
Область называется областью допустимых значений (ОДЗ) задач линейного программирования. Соотношения (2), (3) называются системами ограничений задачи ЛП. Так как , то можно ограничиться изучением задачи одного типа.
Решением задачи ЛП, или оптимальным планом, называется вектор, удовлетворяющий системе ограничений задачи и оптимизирующий целевую функцию.
Другая форма представления задачи ЛП – каноническая. Она имеет вид:
В канонической форме
записи задач линейного
2. Описание метода решения
Симплекс-метод является наиболее распространенным вычислительным методом, который может быть применен для решения любых задач ЛП как вручную, так и с помощью ЭВМ.
Этот метод позволяет переходить от одного допустимого решения к другому, причем так, что значения целевой функции непрерывно возрастают. В результате оптимальное решение находят за конечное число шагов. Алгоритм симплекс-метода позволяет также установить является ли задача ЛП разрешимой.
Рассмотрим задачу ЛП в канонической форме. Будем искать решение задачи (6), (7), (8).
(6)
(7)
(8)
.
|
… |
|
|
… |
|
| |
|
|
… |
|
0 |
… |
0 |
0 |
|
|
… |
|
1 |
… |
0 |
|
… |
… |
… |
… |
… |
… |
… |
… |
|
|
… |
|
0 |
… |
1 |
|
где - вектор коэффициентов целевой функции,
- вектор свободных членов,
- матрица коэффициентов.
В остальных случаях переход к пункту 3.
Если все элементы ведущего столбца , то задача ЛП не является разрешимой, т.к. целевая функция не ограничена на множестве допустимых значений, переход на пункт 7.
Таким образом, ведущий элемент .
Новые значения элементов остальных строк матрицы:
,
Все элементы в ведущем столбце равны 0, тогда как сам ведущий элемент равен 1.
3. Проектирование интерфейса
Разработанное приложение
имеет простой однооконный
Вверху окна стандартно располагается строка меню (JMenu), содержащая подменю (JSubMenu) Файл, Режим работы, Справка. В подменю Файл доступны следующие пункты меню (JMenuItem): Открыть файл, Выход. В подменю Режим работы с помощью Группы радиокнопок (JRadioButton Group) осуществляется взаимоисключающий выбор одного из двух режимов работы: автоматический, режим обучения. Из подменю Справка доступен вызов окна «О программе» (SimplexAboutBox).
Под строкой меню располагается панель инструментов, дублирующая функции, доступные из строки меню, но предоставляющая более удобное использование и быстрый доступ к ним пользователю. Она содержит кнопку (JButton) «Загрузить файл», а также список (JComboBox) для выбора режима работы.
Далее располагаются панели (JPanel), предоставляющие информацию о решаемой задаче, а именно:
В центральной части окна расположена таблица (JTable), отображающая симплекс-таблицу на текущем шаге, и набор кнопок (JButton) для работы с таблицей:
В автоматическом режиме:
В режиме обучения:
Внизу окна расположено поле для вывода многострочного текста (JTextArea), в котором отображается вспомогательная информация о текущем состоянии выполнения программы, а также о правилах выбора ведущих столбца и строки.
Рис. 1. Главное окно разработанного приложения.
Скриншоты интерфейса разработанного приложения при разных вариантах работы программы представлены в Приложении 1.
4. Структура программного модуля
В рамках поставленной задачи был разработан программный модуль, осуществляющий решение задачи линейного программирования на основе начального допустимого базисного решения.
Входными данными является текстовый файл, содержащий начальное допустимое базисное решение (на входные данные накладываются следующие ограничения: максимальное количество свободных переменных – 5, базисных – 8).
Выходными данными является полученный вектор решения, а также сообщения о состоянии выполнения программы.
Разработанный программный модуль предоставляет пользователю возможность выбора одного из двух режимов работы:
В автоматическом режиме (Приложение 1, рис.2) решение задачи осуществляется в одно действие без участия пользователя. В режиме обучения (Приложение 1, рис.3) решение выполняется пошагово с привлечением участия пользователя на каждом шаге. Пользователь осуществляет выбор ведущего столбца, затем ведущей строки, после чего симплекс таблица перестраивается и итерация повторяется. Построение симплекс таблиц ведётся до тех пор, пока решение не станет оптимальным либо пока не будет получено сообщение об ошибке.
В программе предусмотрена
обработка следующих
Также реализована система подсказок, предоставляющая пользователю более лёгкую работу с программным средством.
В качестве среды разработки была выбрана NetBeans IDE, являющаяся средой разработки приложений на языке Java.
Структура созданного программного модуля представляет собой совокупность следующих классов:
Класс SimplexSolve содержит следующие методы:
static void initSolution(int varCount) - создаёт вектор решения необходимой размерности.
static float[][] Solve(float[][] matrix) - осуществляет решение задачи в автоматическом режиме. Получая на вход начальную симплекс-таблицу, возвращает преобразованную симплекс-таблицу с полученным решением.
static boolean userChooseCol(float[][] matrix, JTable tableName) – выполняет выбор ведущего столбца и сравнивает полученный результат с выбором пользователя. Возвращает истину, если выбор был произведен верно, иначе ложь. В случае если результаты не совпали, выводит сообщение об ошибке.
static boolean userChooseRow(float[][] matrix, JTable tableName) – проводит проверку ограниченности целевой функции на множестве допустимых решений, выполняет выбор ведущей строки и сравнивает полученный результат с выбором пользователя. Возвращает истину, если выбор был осуществлён верно, иначе ложь. В случае если результаты не совпали, сообщает пользователю об ошибке.
static void userBuildNewTable(float[][] matrix, JTable tableName) – перестраивает симплексную таблицу и обновляет вектор решения.
static boolean checkSolved(float matrix[][]) – проверяет текущее решение на оптимальность. Возвращает истину, если решение оптимально, иначе ложь.