Описание алгоритма Венгерского метода

Предварительный этап. В каждом из столбцов матрицы транспортных издержек Описание алгоритма Венгерского метода - student2.ru отыскивают минимальный элемент, который вычитают из всех элементов этого столбца. Получают матрицу С'. Далее в каждой строке матрицы С' выбирают минимальный элемент и вычитают его из всех элементов рассматриваемой строки. Приходят к матрице С00 ~ C), все элементы которой неотрицательны, причем в каждой строке и столбце С0 имеем по крайней мере, один нуль. Строят матрицу Х0 так, чтобы ее ненулевые элементы были расположены в позициях нулей матрицы С0.

Пусть Описание алгоритма Венгерского метода - student2.ru - номер строки, в которой расположен k-й нуль j-го столбца матрицы С0. Тогда элементы первого столбца матрицы Х0 определяют по рекуррентной формуле

Описание алгоритма Венгерского метода - student2.ru (3.3.4)

Т.е. все элементы первого столбца Описание алгоритма Венгерского метода - student2.ru , которым соответствуют ненулевые элементы в матрицы С0, заполняют нулями, а остальные элементы этого столбца заполняют по методу северо-западного угла.

Допустим, что столбцы Х0 от первого до (j-1) -го включительно уже заполнены. Тогда элементы j-го столбца определяют в соответствии с формулой

Описание алгоритма Венгерского метода - student2.ru (3.3.5)

Если Описание алгоритма Венгерского метода - student2.ru , то Х0 - оптимальный план Т-задачи. Если Описание алгоритма Венгерского метода - student2.ru , то переходим к первой итерации.

(k+1)-я итерация. Каждая итерация состоит из двух или трех этапов. Итерация начинается первым этапом, а заканчивается вторым. Между первым и вторым этапами в общем случае несколько раз могут быть проведены третий и первый этапы.

Допустим, что уже проведено k итераций, причем Описание алгоритма Венгерского метода - student2.ru . В этом случае необходимо, используя матрицы Сk и Хk, провести следующую (k+1)-ю итерацию. Перед началом итерации выделяют знаком '+' те столбцы матрицы Сk, для которых невязки по столбцам равны

Описание алгоритма Венгерского метода - student2.ru .

Первый этап. Если все ненулевые элементы матрицы Сk окажутся в выделенных столбцах, то переходят к третьему этапу. В противном случае пусть некоторый невыделенный нуль находится в Описание алгоритма Венгерского метода - student2.ru -й строке и в Описание алгоритма Венгерского метода - student2.ru -м столбце. Тогда вычисляют значения невязки Описание алгоритма Венгерского метода - student2.ru -й строки:

Описание алгоритма Венгерского метода - student2.ru .

Возможен один из двух случаев: 1) Описание алгоритма Венгерского метода - student2.ru , 2) Описание алгоритма Венгерского метода - student2.ru . В первом случае Описание алгоритма Венгерского метода - student2.ru -ю строку Сk отмечают знаком '+' справа от нее, а сам невыделенный нуль отмечают штрихом. Далее просматривают элементы Описание алгоритма Венгерского метода - student2.ru -й строки, которые лежат в выделенных столбцах и ищут среди них существенные нули (напомним, что существенным нулем Сk называется такой элемент Описание алгоритма Венгерского метода - student2.ru , для которого Описание алгоритма Венгерского метода - student2.ru ). Если таким существенным нулем оказался элемент Описание алгоритма Венгерского метода - student2.ru , а сам столбец m - выделен, то знак выделения '+' над столбцом m уничтожают, а сам этот нуль отмечают звездочкой.

Затем просматривают m-й столбец и отыскивают в нем нуль (нули), расположенные в отличных от Описание алгоритма Венгерского метода - student2.ru -й строках. Если такой нуль имеется, то отмечают его штрихом и анализируют невязку его строки.

Далее процесс поиска нулей и выделение их (штрихами или звездочками) продолжается аналогично, и за несколько шагов он заканчивается одним из следующих исходов:

1) найдем очередной невыделенный нуль матрицы Сk, для которого невязкая в строке Описание алгоритма Венгерского метода - student2.ru . Тогда отметив его штрихом, переходим ко второму этапу;

2) все нули матрицы Сk оказались выделенными, причем для каждого из нулей, выделяемых штрихом, невязка Описание алгоритма Венгерского метода - student2.ru . Тогда переходим к третьему этапу.

Во втором случае, отметив этот нуль штрихом, сразу переходим к третьему этапу.

Второй этап. Состоит в построении цепочки из нулей матрицы Сk, отмеченных штрихами и звездочками, и в последующем переходе к новой матрице Хk+1

Пусть для некоторого нуля со штрихом матрицы Сk, расположенного, например, в позиции ( Описание алгоритма Венгерского метода - student2.ru ), невязка строки Описание алгоритма Венгерского метода - student2.ru . Начиная с этого элемента Описание алгоритма Венгерского метода - student2.ru , строят цепочку из отмеченных нулей матрицы Сk: двигаясь по столбцу Описание алгоритма Венгерского метода - student2.ru , выбирают нуль со звездочкой Описание алгоритма Венгерского метода - student2.ru , далее двигаясь от него по строке Описание алгоритма Венгерского метода - student2.ru , находят нуль со штрихом Описание алгоритма Венгерского метода - student2.ru . Потом движутся от него по столбцу m2 к следующему нулю со звездочкой и т.д.. Такой последовательный переход от 0' к 0* по столбцу и от 0* к 0' по строке осуществляют до тех пор, пока это возможно.

Можно доказать, что процесс построения цепочки однозначный и законченный, цепочка не имеет циклов, начинается и заканчивается нулем со штрихом.

После того как цепочка вида

Описание алгоритма Венгерского метода - student2.ru

построена, осуществляют переход к матрице Описание алгоритма Венгерского метода - student2.ru от матрицы Хk по формулам

Описание алгоритма Венгерского метода - student2.ru (3.3.7)

где Описание алгоритма Венгерского метода - student2.ru (3.3.8)

Таким образом, Описание алгоритма Венгерского метода - student2.ru -минимальный элемент среди совокупности четных элементов цепочки, невязки строки, где начинается цепочка, и столбца, где она заканчивается.

Вычисляем невязку для Описание алгоритма Венгерского метода - student2.ru

На этом (k+1)-я итерация заканчивается.

Третий этап. Итак, допустим, что все нули выделены. Третий этап заключается в переходе от матрицы Сk к эквивалентной матрице С′k, в которой появляется новый невыделенный нуль (или нули). Пусть Описание алгоритма Венгерского метода - student2.ru , где минимум выбирают из всех невыделенных элементов матрицы Сk. Тогда из всех элементов невыделенных строк матрицы Сk вычитают h, а ко всем элементам выделенных столбцов прибавляют h. В результате получают матрицу С'k(С'k ~ Ck), в которой все существенные нули матрицы Сk остаются нулями, и кроме того, появляются новые невыделенные нули.

Далее переходят к первому этапу, и в зависимости от его результата либо переходят ко второму этапу, либо снова возвращаются к третьему этапу. За конечное число повторов пары этапов третий - первый обязательно перейдем ко второму этапу.

Если после выполнения второго этапа Описание алгоритма Венгерского метода - student2.ru то Хk+1 - оптимальный план. В противном случае переходим к (k+2) итерации.

Отметим некоторые важные особенности венгерского метода.

Поскольку данный метод в отличие от метода потенциалов не использует опорных планов, то явление вырожденности плана для него отсутствует. Это устраняет возможность зацикливания, связанного с вырожденностью планов Т-задачи, которая облегчает программирование метода и его реализацию на ЭВМ.

Метод позволяет на каждой итерации по величине невязки Описание алгоритма Венгерского метода - student2.ru оценить близость Хk к оптимальному плану, а также верхнюю границу необходимого числа оставшихся итераций Nост:

Описание алгоритма Венгерского метода - student2.ru . (3.3.9)

Эта формула справедлива для целочисленных значений всех переменных Описание алгоритма Венгерского метода - student2.ru и Описание алгоритма Венгерского метода - student2.ru .

Наши рекомендации