- •Содержание
- •Введение
- •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.2 Описание венгерского метода нахождения оптимального плана
Венгерский метод базируется на следующих определениях: суммарная невязка плана, суммарная невязка по строкам и столбцам. Суммарной невязкой плана по строкам называется величина ∂i, которая имеет вид:
(2.2)
Данная величина показывает, сколько единиц продукции остаётся на складах всех поставщиков при использовании данного плана перевозок.
Суммарной невязкой плана по столбцам называется величина вида:
(2.3)
Эта величина имеет смысл суммарной непогашенной потребности потребителей при использовании данного плана перевозок.
Легко заметить, что в сбалансированном плане суммарная невязка по строкам будет эквивалента по величине суммарной невязке по столбцам. Это условие используется для контроля вычислений невязок.
Суммарной невязкой называется величина вида:
∆=∂i+∂j, (2.4)
Физически невязка представляет собой удвоенную величину единицы товара, которую надо распределить поставщикам и потребителям. Величина невязки определяет наихудшее из возможных случаев итераций, которое необходимо выполнить для достижения оптимального решения. Поэтому число итераций подчиняется следующему неравенству:
∆/2≥n (2.5)
где n – количество итераций решения транспортной задачи венгерским методом.
Данное неравенство объясняется тем, что при переходе от одной итерации к другой невязки по строкам и по столбцам уменьшается на определённую величину. И так как минимальная величина этого уменьшения – единица, то худшее число итераций соответствует половине суммарной невязки.
Решение транспортной задачи венгерским методом состоит из одного предварительного этапа и n итераций, которая состоит из комбинации первого, второго и третьего этапов.
Предварительный этап начинается с того, что в каждом столбце матрицы С отыскивается минимальный элемент, который вычитается из всех элементов данного столбца. В итоге получаем матрицу С’.
Аналогичная операция проделывается по строкам матрицы С’. В результате получаем матрицу С0. Для нулей матрицы С0, перемещаясь по столбцам сверху вниз и меняя столбцы слева направо строим начальный план Х0 и определяем невязку этого плана. Если невязка равна нулю, то рассчитывается целевая функция плана, в противном случае переходят к итерационной части алгоритма.
Разметка выполняется в начале итерации и сохраняется до ее конца. В ходе эквивалентных преобразований матрицы С разметка переносится. Различают символом “+” столбцы, невязки которых нулевые и в которых есть существенные нули. Прочие элементы разметки добавляются в ходе итерации. Столбцы (или строки), отмеченные символом “+”, называются выделенными и образуют выделенную часть матрицы С.
Итерация начинается с первого этапа, который носит название поискового. В нём необходимо найти ноль матрицы С, находящий в невыделенной части матрицы и стоящий на строке с положительной невязкой. Если в процессе поиска обнаруживается, что таких нулей нет, то прибегают к эквивалентным преобразованиям матрицы (третий этап). Если ноль найдется, то строят цепочку и корректируют план (второй этап).
Поиск выполняют, двигаясь по невыделенным столбцам сверху вниз. Первый найденный ноль отмечают штрихом и анализируют его невязку по строке. Если невязка положительна, то это искомый ноль. В противном случае невязка по строке равна нулю, строчку выделяют знаком “+”. Просматривают выделенную строку по элементам выделенных столбцов на наличие существенного нуля. Существенным нулем называется нуль матрицы С, соответствующий элемент которого в матрице перевозок X не равен нулю. если на пересечении выделенной строки и выделенного столбца оказывается существенный ноль, то его отмечают “*”, а знак выделения над столбцом снимают, после этого столбец считается невыделенным и в нем можно осуществить поиск. Если же в этой строке невыделенного нуля нет, то происходит поиск невыделенного элемента на пометку знаком «’». Поиск заканчивается, когда найден искомый ноль, либо когда все нули матрицы находятся либо в выделенных строках, либо в выделенных столбцах.
Если в ходе поиска на первом этапе находится невыделенный нуль с положительной невязкой в строке, то производится переход на второй этап, который также называется этапом построения цепочки и коррекции плана. На втором этапе идёт активная работа с цепочкой нулей. Цепочка незамкнута, содержит нечетное число элементов, должна начинаться и заканчиваться нулём со штрихом и, в принципе, может состоять из одного нуля со штрихом.
Построение цепочки происходит в следующей последовательности: от найденного нуля со штрихом по столбцу к нулю со звездой, а от нуля со звездой по строке к нулю со штрихом. Далее выбирается корректирующий элемент по правилу: невязка строки начала, невязка строки конца и элементы плана Х, которые соответствуют нулю со “*”, входящих в цепочку. = min {i, j, Х*ij цепочка}
Как только найден такой элемент, план корректируют. Из элементов, которые соответствуют нулям со звездочкой, вычитают , а к элементам соответствующим нулям со штрихом прибавляют . Затем происходит расчёт невязок. разметка и переход к первому этапу следующей итерации.
Если же в первом этапе найти невыделенный нуль с положительной невязкой в строке не удалось, то происходит переход в третий этап (этап эквивалентных преобразований). Он начинается с того, что в невыделенной части матрицы С выбирается наименьший положительный элемент, который прибавляется к элементам выделенных столбцов и вычитается из элементов невыделенных строк. Производится переход на первый этап данной итерации.
