При рассмотрении транспортных задач можно было заметить, что ТЗ иногда оказывается вырожденной. Это происходит, если при некотором допустимом распределении поставка в любую клетку, кроме последней, удовлетворяет спрос всего столбца, используя при этом все ресурсы соответствующей строки.
В рассматриваемой задаче каждый ресурс назначается только на одну работу, а каждая работа требует только одного ресурса. Следовательно, задача о назначении есть полностью вырожденная форма транспортной задачи. В этом случае методы решения транспортных задач оказываются малоэффективными: при любом назначении всегда автоматически совпадают поставки по строке со спросом по столбцу и, поэтому, вместо получаем ненулевых значений и, в связи с этим, необходимо заполнить матрицу величинами и совершать «фиктивные перевозки».
Специальный метод решения задачи о назначении основан на следующих теоремах.
Теорема 1. Если минимизирует по всем таким, что минимизирует также функционал
Доказательство:
т.е. решение не изменится, если прибавить к любому столбцу или строке матрицы некоторую константу или вычесть ее из них.
Теорема 2. Если все и можно отыскать набор , такой, что , то это решение оптимально, т.е. .
Доказательство. (самостоятельно)
Рассматриваемый метод решения сводится к прибавлению констант к строкам и столбцам и вычитанию их из строк и столбцов до тех пор, пока достаточное число величин не обращается в нуль, что дает искомое решение.
В 1912 году венгерский математик Кёниг (König D.) среди других утверждений доказал теорему, благодаря которой оказалось возможным построить алгоритм решения задач о назначении.
Пусть дана матрица , некоторые элементы которой являются нулями, а другие произвольны. Обозначим через - совокупность всех строк, а через - совокупность всех столбцов. Множество рядов матрицы (т.е. множество ее строк и столбцов) называется опорным, если удаление этих рядов приводит к исчезновению из нее всех нулей. Если минимальное опорное множество состоит из строк и столбцов, то можно утверждать, что .
Минимальное число рядов в опорном множестве матрицы назовем индексом рассредоточения –.
В качестве примера рассмотрим матрицу .
М= |
|
|
|
|
|
|
|
0 |
|
|
|
|
* |
|
|
|
|
|
|
* |
|
|
|
0 |
0 |
|
|
|
|
|
|
|
|
|
|
* |
|
|
|
|
|
Как , так и являются опорными множествами, причем меньше из них состоит из четырех рядов . Можно найти опорное множество, состоящее из еще меньшего числа рядов. Для матрицы оказывается и .
Совокупность нулей матрицы образует связку строк и столбцов, если эти нулей стоят на пересечении различных строк и различных столбцов. Так, обведенные рамкой нули образуют связку
.
Каждая строка и каждый столбец встречаются в этом выражении ровно по одному разу.
Максимальной связкой называют ту связку, которая содержит наибольшее число нулей. Это число называют индексом квадратности матрицы - .
Теорема Кёнига формулируется следующим образом:
,
т.е. минимальное число опорного множества равно максимальному числу нулей связки, или индекс рассредоточения матрицы равен индексу ее квадратности.
Для поиска максимальной связки можно предложить следующий алгоритм:
В строке или столбце, который содержит наименьшее число нулей, обведем один из нулей, а затем вычеркнем все нули, которые находятся в той же строке или в том же столбце, что и обведенный квадратной рамкой нуль.
Повторить пункт 1, пока существуют непомеченные нули.
Алгоритм поиска минимального опорного множества:
пометить звездочкой (*) все строки, которые не содержат ни одного обведенного квадратной рамкой нуля;
пометить звездочкой столбец, содержащий перечеркнутый нуль, хотя бы в одной из помеченных строк;
пометить звездочкой строку, содержащую обведенный нуль, хотя бы в одном из помеченных столбцов;
повторять пункты 2 и 3, пока не останется строк или столбцов, которые ещё можно пометить;
перечеркнуть каждую непомеченную строку и каждый помеченный столбец.
Алгоритм решения задачи о назначении.
В каждом столбце таблицы выберем наименьший элемент и вычтем его из всех элементов этого столбца.
.
Описанный прием позволяет получить хотя бы один нуль в каждом столбце.
В каждой строке таблицы выберем наименьший элемент и вычтем его из всех элементов этой строки:
.
Найти максимальную связку и определить индекс квадратности матрицы.
Если индекс квадратности , решение найдено
Найти минимальное опорное множество.
Из всех непрочеркнутых элементов выбрать наименьшее число.
Вычесть это число из всех непрочеркнутых элементов и прибавить его ко всем дважды прочеркнутым элементам.
Перейти к пункту 3.
Пример. Для неоднородной сети ЭВМ перераспределить вычислительные ресурсы, если известны потери, связанные с функционированием -го ресурса в -ом узле.
|
С1 |
С2 |
С3 |
С4 |
С5 |
L1 |
35 |
30 |
18 |
11 |
24 |
L2 |
32 |
33 |
21 |
10 |
21 |
L3 |
24 |
31 |
29 |
22 |
11 |
L4 |
9 |
16 |
28 |
35 |
26 |
L5 |
26 |
19 |
17 |
24 |
35 |
C1 С2 С3 С4 С5 L1 26 14 1 1 13 L2 23 17 4 0 10 L3 15 15 12 12 0 L4 0 0 11 25 15 L5 17 3 0 14 24
|
C1 |
C2 |
C3 |
C4 |
C5 |
|
L1 |
25 |
13 |
0 |
0 |
12 |
* |
L2 |
23 |
17 |
4 |
0 |
10 |
* |
L3 |
15 |
15 |
12 |
12 |
0 |
|
L4 |
0 |
0 |
11 |
25 |
15 |
|
L5 |
17 |
3 |
0 |
14 |
24 |
* |
|
|
|
* |
* |
|
|
.
.
Обведем , обведем квадратной рамкой элемент и вычеркнем ;
Обведем и вычеркнем ;
Обведем и вычеркнем .
Индекс квадратности .
Пометим , далее , далее . Прочеркнем и получим опорное множество.
Минимальный непрочеркнутый элемент .
7.
|
С1 |
С2 |
С3 |
С4 |
С5 |
L1 |
22 |
10 |
0 |
0 |
9 |
L2 |
20 |
14 |
4 |
0 |
7 |
L3 |
15 |
15 |
15 |
15 |
0 |
L4 |
0 |
0 |
14 |
28 |
15 |
L5 |
14 |
0 |
0 |
14 |
21 |
Остальные элементы не изменяются .
Обведем ; обведем , вычеркнем .
Обведем , вычеркнем .
Обведем , вычеркнем .
Обведем .
=18+10+11+9+19=67.
Индекс квадратности - .
Аналогичный расчет позволяет определить максимальные потери, которые составляют 167 ед. Между наилучшим и наихудшим решением имеется разница 100 ед. и существует ещё 118 промежуточных решений.