Для предложенного здесь метода доказана конечность процесса отсечений, но число этих отсечений непредсказуемо (вполне может обнаружиться быстрое решение задач с десятками переменных и ограничений и фантастически длительное для задач небольших размеров).
Математическую и техническую постановку задачи можно сформулировать следующим образом. Разработать программное обеспечение на встроенном языке среды MatLAB, позволяющее решать линейные программы симплексным методом с учетом приведенного выше теоретического материала.
Несмотря на то, что в поставляемом вместе с MatLAB пакете программ OptimizationToolbox имелась функция linprog реализующая решение линейных задач, было принято решение реализовывать симплекс-метод и метод Гомори не используя уже готовые решения, но максимально задействуя встроенные функции среды разработки.
В ходе разработки наибольшее внимание уделялось удобству работы с программой и качеству реализации методов.
В плане ограничений накладываемых на пользователя можно отметить лиши разумность вводимых данных.
Программа написана на встроенном в MatLAB языке программирования. Не смотря на всю простоту языка программирования MatLAB’а стоит отметить его большую функциональность обеспечиваемую встроенными функциями и пакетами расширений Toolbox.
Отличительной особенностью разработанной программы является ее графический интерфейс (Рисунок 1), обеспечивающий максимально удобную работы и позволяющий работать с программой даже не посвященным в программирование, математику и экономику людям.
Основная часть программного кода в соответствии со своим назначением разделена на функции, которые хранятся отдельно от интерфейса и могут быть использованы пользователем по своему усмотрению, в том числе в других приложениях/программах или же могут быть вызваны через консоль MatLAB.
Рисунок 1. Графический интерфейс программы
Для запуска проекта необходимо запустить среду MatLAB и указать путь к каталогу с программой. Затем необходимо запустить графический интерфейс (Рисунок 1) для чего в консоли MatLAB’а требуется ввести guide и в открывшемся окошке (Рисунок 2) выбрать вкладку «Открыть существующий GUI» и указав путь к GUI-интерфейсу «MainSimplexForm.fig» нажать кнопку «ОК».
Рисунок 2. GUIDE - среда разработки и работы с GUI-интерфейсами MatLAB
В итоге появится макет интерфейса (Рисунок 3) для запуска которого достаточно нажать комбинацию клавиш «Ctrl+T» или зеленую стрелочку на панели под главным меню. После запуска перед вами появится полноценный графический интерфейс (Рисунок 1).
Рисунок 3. Макет GUI-интерфейса
Вверху формы расположено главное меню (Рисунок 4), состоящее из пунктов «Примеры», «Дополнительно» и «Выход».
Рисунок 4. Главное меню
Пункт «Примеры» позволяет загрузить или создать пример работы с программой. Примеры хранятся в текстовых файлах с расширением «matex» содержащих целевую функцию, ограничения и условия неотрицательности.
Пункт «Дополнительно» позволяет пользователям операционной системы Windows получить доступ к Калькулятору, Блокноту и некоторым другим приложениям.
Пункт «Выход» закрывает среду MatLAB.
Для ввода функции, ограничений, условий неотрицательности и выбора метода используется центральная часть формы (Рисунок 5).
Рисунок 5. Здесь можно ввести исходные данные и выбрать метод решения
Для запуска метода и просмотра результатов его работы служит нижняя часть формы (Рисунок 6).
Рисунок 6. Здесь можно запустить метод и просмотреть результат его работы
Особое внимание надо обратить на статусное сообщение. Поля «Оптимальный план» и «Экстремум функции» будут заполнены последними значениями, но судить об их верности можно только прочитав статусное сообщение! Решение двойственной задачи отображается только для обычного варианта симплексного метода.
В случае если вы хотите воспользоваться частично целочисленным методом стоит обратить внимание на ввод требуемых иксов (Рисунок 7).
Рисунок 7. Ввод номеров требуемых целых иксов
Необходимо через пробел вводить номера иксов, которые вы хотите видеть целыми.
В ходе разработки проекта были написаны следующие функции:
1. parser_input – функция разделения строки типа “2x1+5x2-7x3” на массив номеров иксов и массив коэффициентов при этих иксах;
2. parser_allogr – функция канонизации, формирующая составляющие симплексной таблицы из введенных функции, ограничений, условий неотрицательности;
3. load_example – функция чтения файла с примером;
4. save_example – функция записи файла с примером;
5. simple_simplex – функция, реализующая простой симплекс-метод;
6. gomory_simplex – функция, реализующая метод Гомори;
7. MainSimplexForm – функция, связанная с графическим интерфейсом и содержащая основные вызовы остальных функций.
Все перечисленные выше функции снабжены подробной справкой и для более подробного ознакомления с ними достаточно в консоли MatLAB ввести: help имя_функции
Данные функции можно использовать в других программах написанных для MatLAB, т.к. они работают в проекте как «автономные модули».
Итогом написания данной курсовой работы является компьютерная реализация решения линейных программ симплексным методом в обычном, целочисленном и частично целочисленном вариантах.
Разработанная программа позволит упростить решение подобных задач непосвященными во все тонкости пользователям, а также послужит примером для интересующихся экономико-математическими методами людей.
Следует отметить, что симплексный метод в различных вариациях фигурирует во многих задачах дисциплины «исследование операций», например, при рассмотрении двойственности в линейном программировании, целочисленном линейном программировании, матричных играх и т.д. Соответственно созданная программа позволит упростить решение упомянутых выше задач.
1. Тынкевич М.А. «Экономико-математические методы (исследование операций)», издание 2-е, исправленное и дополненное, Кемерово, 2007г.
2. Конюховский П.В. «Математические методы исследования операций в экономике», СПб.: Питер, 2008г.
3. Дегтярев Ю.И. «Исследование операций», М.: Высшая школа, 2009 г.
4. Ануфриев И.Е., Смирнов А.Б., Смирнова Е.Н. «MATLAB 7», СПб.: БХВ-Петерберг, 2005г.
5. Дъяконов В. «MATLAB 6: Учебный курс», СПб.: Питер, 2010г.