- •Содержание
- •Введение
- •1 Постановка задачи оптимизации закупки топлива авиакомпанией
- •1.1 Качественное описание задачи
- •1.2 Концептуальная модель задачи
- •1.3 Математическая постановка задачи
- •2 Алгоритмизация решения задачи оптимизации закупки топлива авиакомпанией
- •2.1 Методы нахождения опорного и оптимального решения транспортной задачи
- •2.2 Описание венгерского метода нахождения оптимального плана
- •2.3 Описание алгоритма нахождения опорного плана методом северо-западного угла
- •2.4 Описание алгоритма нахождения оптимального плана распределительным методом
- •2.5 Проектирование сценария диалога
- •2.6 Описание структур данных
- •2.7 Описание программной системы «Оптимизация закупки топлива авиакомпанией»
- •2.8 Структурная схема сценария диалога и описание его программной реализации
- •2.9 Структурная схема алгоритмов метода северо-западного угла и распределительного и описание их программной реализации
- •2.10 Структурная схема алгоритмов ведения файловых архивов, графического представления результатов и их программная реализация
- •3. Численные эксперименты
- •3.1 Ручная реализация метода северо-западного угла и распределительного
- •3.2 Ручная реализация венгерского метода
- •3.3 Машинные эксперименты с программной системой
- •3.4 Качественная интерпретация полученных результатов
- •Заключение
2.3 Описание алгоритма нахождения опорного плана методом северо-западного угла
Метод северо-западного угла достаточно прост в алгоритмической реализации, поэтому его чаще всего выбирают для нахождения опорного плана на основе машинных вычислений.
Структурная схема алгоритма представлена в приложении А. Подробный алгоритм метода северо-западного угла имеет следующую структуру:
Первый шаг алгоритма заключается в обнулении матрицы перевозки.
На втором шаге «координаты» рассматриваемого элемента матрицы перевозки устанавливаются в соответствии с северо-западным углом (i=1, j=1).
На третьем этапе вычисляется минимальное значение d из запасов i-того поставщика и потребности j-того потребителя.
На четвёртом этапе из запасов i-того поставщика и потребности j-того потребителя вычесть значение d.
На пятом этапе значение рассматриваемого элемента приравнивается значению d
Если на данном этапе запасы i-того поставщика истощены, инкрементировать i.
Если на данном этапе потребности j-того потребителя полностью удовлетворены, инкрементировать j.
Если координаты находятся в пределах матрицы m*n, то переход на третий этап.
Иначе переход на проверку вырожденности и конец.
Алгоритм проверки вырожденности состоит из одного блока ветвления, сравнивающего количество базисных элементов с числом m+n-1. Если эти значения равны, производится переход на вычисление оптимального решения. В противном случае добавляются недостающее до невырожденного плана количество базисных нулей.
2.4 Описание алгоритма нахождения оптимального плана распределительным методом
Распределительный метод крайне удобен в программной реализации, так как данный метод просто алгоритмируется, а из-за высокой производительности современных ЭВМ недостатки по скорости вычислений метода сводятся на нет.
Структурная схема алгоритма представлена в приложении В. Алгоритм распределительного метода нахождения оптимального решения транспортной задачи имеет следующую структуру:
На первом этапе алгоритма устанавливаются координаты первого свободного элемента.
На втором этапе строится и означивается цикл пересчёта для данного элемента.
На третьем этапе вычисляется цена цикла пересчёта.
Если она не меньше нуля:
Если данный свободный элемент не последний: произвести переход к следующему элементу.
Иначе (если элемент был последний) План оптимален, вычисление стоимости маршрута.
Переход на конец.
Иначе (если цена цикла оказалась отрицательной):
Найти минимальный элемент цикла, помеченный знаком минус.
Произвести переход по циклу: вычесть найденный минимум из всех элементов цикла, помеченных знаком минус, и прибавить его ко всем элементам цикла, помеченным знаком плюс.
Переход на первый этап.
2.5 Проектирование сценария диалога
Логической моделью построения диалога в программе была выбрана модель «запрос-ответ»: Пользователь формирует запрос к программе и посылает его, а программа реагирует на запрос, формируя ответ запроса.
Запрос со стороны пользователя формируется путём введения значений матрицы стоимости, запасов поставщиков и нужд потребителей. Отправка запроса производится нажатием кнопки «Выполнить».
Реакция программы на запрос зависит от корректности запроса. Если в запросе были некорректно введены значения матрицы стоимости, запасов поставщиков или нужд потребителей (несоответствие размерностей матрицы и векторов или наличие недопустимых символов), то программа выдаёт сообщение об ошибке. Кроме того, при корректно введённых данных задача может быть несбалансированна, и, так как данная программа ориентирована на решение только сбалансированных задач, то она потребует сбалансировать задачу. Если же все условия выполнены, то программа выдаёт количество выполненных итераций и посчитанных циклов пересчёта, а также оптимальную матрицу перевозок и стоимость перевозок по данному плану.
Преимуществами данной модели ведения диалога являются простота реализации и оптимальное количество поступаемой информации пользователю. Недостатками же являются отсутствие последовательности ввода данных (в используемой модели ввод производится в одном окне, хотя можно было реализовать ввод каждой группы параметров последовательно в отдельных экранах) и промежуточной статистики по ходу решения, которая могла бы пригодиться профессионалам (но простого пользователя ввела бы в замешательство).
Структурная схема алгоритма ведения диалога представлена на рисунке 2.1
Рисунок 2.1- Структурная схема алгоритма ведения алгоритма диалога.
