Транспортная задача с ограниченными пропускными способностями
Рассмотрим Тd - задачу:
Минимизировать
при условиях
Введем следующие определения.
1. Элемент сij = 0 матрицы С называется Х- неполным нулем, если в плане Х Тd-задачи элемент хij < dij. Если же хij = dij, то элемент сij называется Х - полным нулем.
2. Х - существенным нулем матрицы С называется такой ее элемент сij = 0, для которого хij > 0, в противном случае этот элемент называется несущественным нулем.
Описание алгоритма венгерского метода. Алгоритм решения Тd-задачи, основанный на венгерском методе, состоит из предварительного этапа и ряда однотипных итераций [18; 59].
Предварительный этап. Его цель - приведение матрицы С и построение начального приближения к решению Х0.
В каждом столбце матрицы С разыскивают минимальный элемент и вычитают из всех элементов данного столбца. В результате получают матрицу С'. Далее, из всех элементов каждой строки С' вычитают минимальный элемент этой строки и получают в результате матрицу С0(С0@С), в каждой строке и столбце которой имеется хотя бы один нуль.
После этого формируют матрицу Х0=|| xij0 ||, процесс построения которой ведут по столбцам. Пусть уже заполнены первые (j-1) столбцы матрицы Х0. Перенумеруем нули j-го столбца матрицы С0 сверху вниз и через ikj (k=1,2,.,r) обозначим номер строки, содержащей k-й нуль j-го столбца. Тогда элементы j-го столбца определяются в соответствии с формулой
если k=1,2.. (3.3.21)
Если для матрицы Х0 суммарная невязка
то Х0 - оптимальной план Тd-задачи.
Если же D0>0, то переходят к первой итерации.
Каждая итерация алгоритма в общем случае включает 3 этапа: начинается первым этапом, затем несколько раз могут повторяться первый и третий этапы, а заканчивается итерация вторым этапом либо установлением неразрешимости данной задачи.
(k+1)-я итерация. Предположим, что уже осуществлено k итераций алгоритма, в результате которых получены матрицы Хk и Сk.
Пусть и еще не установлена неразрешимость Тa-задачи.
Целью (k+1)-й итерации является построение матрицы Хk+1 и проверка ее на оптимальность или на установление неразрешимости Тd-задачи. Перед началом итерации знаком '+' выделяют те столбцы матрицы Сk, для которых невязка
.
Первый этап. Выбирают произвольный невыделенный Хk- неполный нуль матрицы Сk, если это элемент Сijk , то вычисляют невязку строки i, его содержащей:
.
Тогда возможен один из двух случаев:
Во втором случае, отметив этот невыделенный нуль cijk =0 знаком штрих, сразу переходим ко второму этапу.
В первом случае знаком '+' выделяют i -ю строку матрицы Сk , а элемент сijk отмечают штрихом. Если на пересечении μ-го выделенного столбца i-й строки матрицы Сk расположен Хk-существенный нуль матрицы Сk , то знак выделения этого столбца уничтожают, а сам элемент ciμk =0 отмечают звездочкой. Далее просматривают столбец m, отыскивают в нем невыделенный неполный нуль (нули). Если такой нуль имеется, то отмечают его штрихом и анализируют строку, содержащую его. За конечное число шагов процесс выделения Хk-неполных нулей матрицы Сk заканчивается одним из трех исходов:
1) найден Хk-неполный нуль в строке і, где > 0, тогда переходим ко второму этапу, отметив этот нуль штрихом;
2) все Хk-неполные нули выделены, для каждого из них , а среди невыделенных элементов матрицы Сk имеются либо положительные, либо среди дважды выделенных элементов Сk (т.е. элементов, расположенных на пересечении выделенных строк и столбцов), отрицательные элементы. В этом случае переходим к третьему этапу;
3) все Хk-неполные нули выделены (для кажого из них dи(k) = 0), все невыделенные элементы Сk - отрицательны, а дважды выделенные -положительны. Это означает неразрешимость Тd - задачи.
Второй этап. Он состоит в построении цепочки из нулей матрицы Сk, отмеченных штрихами и звездочками. С помощью этой цепочки осуществляют переход от Хk к Хk+1. Итак, пусть первый этап завершился таким образом, что для некоторого невыделенного неполного нуля, расположенного, например, на пересечении строки l1 и столбца m1, невязка . Этот элемент принимают за начало цепочки из отмеченных нулей матрицы Сk. Цепочку строят так.
Движутся по столбцу m1 матрицы С0 и находят в нем нуль со звездочкой , далее движутся от него по строке l1 и находят и т.д. Процесс построения цепочки, складывающийся из последовательных переходов от нуля со штрихом к нулю со звездочкой по столбцу и от нуля со звездочкой к нулю со штрихом по строке, всегда начинается и заканчивается на нуле со штрихом.
Пусть в результате построения образована цепочка вида
. (3.3.22)
Элементы хij(k+1) матрицы Хk+1 вычисляют по рекуррентной формуле
|
(3.3.23)
Параметр определяют из соотношения
, (3.3.24)
где - минимальный четный по порядку следования элемент цепочки; - минимальный резерв до насыщения для нечетных (по порядку следования) элементов цепочки;
- невязкая строки, откуда начинается цепочка,
- невязкая столбца, где цепочка заканчивается.
Если суммарная невязка
то матрица Хk+1 является решением Тd-задачі, в противном случае переходят к следующей итерации.
Третий этап. На этом этапе производят преобразование матрицы Сk в эквивалентную матрицу Сk'.
Пусть первый этап закончился вторым исходом. Обозначим минимальный элемент
,
где h' - минимальный среди невыделенных положительных элементов матрицы Сk ; h'' - минимальный среди дважды выделенных отрицательных элементов матрицы Сk , взятых с обратным знаком. Вычитаем h из элементов матрицы Сk , расположенных в невыделенных строках, и прибавляем h к элементам Сk , расположенным в выделенных столбцах. Получим матрицу Сk' . Если дважды выделенный отрицательный элемент Сk становится нулем в Сk' , то знак выделения над столбцом уничтожают, а сам элемент отмечают звездочкой. Остальные знаки выделения, а также все отметки нулей переносят из матрицы Сk в матрицу Сk'.
Далее, снова переходят к первому этапу, заменив Сk на Сk'. Если первый этап снова завершится вторым исходом, то опять возвращаются к третьему этапу. Циклы, состоящие из первого и третьего этапов, проводят до тех пор, пока последний из них не закончится первым или третьим исходом. При первом исходе переходят ко второму этапу, а при третьем - делают вывод о неразрешимости Тd-задачи из-за несовместимости ее условий.
Пример 3.6. Решить венгерским методом Тd-задачу со следующими условиями
- матрица пропускных способностей коммуникаций.
Предварительный этап. Составляем матрицу С:
.
Затем строим матрицу Х0 с учетом матрицы D:
.
Будем отмечать одной точкой сверху неполные нули матрицы Сk , а двумя точками Хk -полные нули этих матриц. Строки матрицы Сk , которым отвечают ненулевые невязки, будем отмечать знаком '´'.
Первая итерация Третий этап
Первый этап Второй этап
Первая итерация. Первый этап. Знаком '+' выделяем четвертый столбец. Так как матрица С0 не содержит ни одного Х0 - неполного нуля, то сразу переходим к третьему состоянию, отыскиваем неполный невыделенный нуль, c23 и, отметив его штрихом, переходим ко второму этапу. Цепочка, построенная на втором этапе, состоит из одного элемента x320 . Поэтому
Вторая итерация
|
Третья итерация
Первый этап Третий этап
Второй этап
D3 = 2
Третья итерация состоит из первого и третьего этапов при h = 1, а также из первого и второго этапов, причем цепочка второго этапов, причем цепочка второго этапа содержит лишь один элемент x312.
Четвертая итерация
Первый и третий этапы
Третий этап Первый этап
Второй этап
Поскольку суммарная невязка D4=0, то Х4-оптимальный план. Соответствующее значение целевой функции Lmin=3.I + 1.4 + 2.2 + 1.4 + 2.1 + 1.3 + 1.2 + 1.1 = 23.