Транспортная задача с ограниченными пропускными способностями

Рассмотрим Т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 , то знак выделения этого столбца уничтожают, а сам элемент ck =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.