Задача о назначениях

Автор: Пользователь скрыл имя, 21 Февраля 2013 в 15:11, курсовая работа

Краткое описание

Цель работы - исследовать решение задач о назначениях.
Задачи:
1. Рассмотреть теоретические основы задач о назначениях;
2. Проанализировать Венгерский метод решения задачи о назначениях.

Оглавление

Введение
1. Теоретические основы задач о назначениях
1.1 Задача о назначениях
1.2 Особые случаи задачи о назначениях
2. Венгерский метод решения задачи о назначениях
2.1 Сущность Венгерского метода
2.2 Описание алгоритма венгерского метода
2.3 Венгерский метод для транспортной задачи
2.4 Обоснование Венгерского метода
3. Алгоритм решения задачи назначениях
Заключение
Список литературы

Файлы: 1 файл

Курсовая работа.docx

— 63.00 Кб (Скачать)

Каждая итерация начинается первым и заканчивается вторым этапом. Между ними может несколько раз  проводиться пара этапов: третий - первый. Перед началом итерации знаком “+”  выделяют столбцы матрицы Сk, которые содержат нули со звездочками.

Первый этап. Просматривают  невыделенные столбцы Сk. Если среди них не окажется нулевых элементов, то переходят к третьему этапу. Если же невыделенный нуль матрицы Собнаружен, то возможен один из двух случаев: 1) строка, содержащая невыделенный нуль, содержит также и нуль со звездочкой; 2) эта строка не содержит нуля со звездочкой.

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

В первом случае этот невыделенный нуль отмечают штрихом и выделяют строку, в которой он содержится (знаком “+” справа от строки). Просматривают  эту строку, находят нуль со звездочкой и уничтожают знак “+” выделения  столбца, в котором содержится данный нуль.

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

Этот процесс за конечное число шагов заканчивается одним  из следующих исходов:

1). все нули матрицы Свыделены, т.е. находятся в выделенных строках или столбцах. При этом переходят к третьему этапу;

2). имеется такой невыделенный нуль в строке, где нет нуля со звездочкой. Тогда переходят ко второму этапу, отметив этот нуль штрихом.

Второй этап. На этом этапе  строят следующую цепочку из нулей  матрицы Сk: исходный нуль со штрихом, нуль со звездочкой, расположенный в одном столбце с первым нулем со штрихом в одной строке с предшествующим нулем со звездочкой и т.д. Итак, цепочка образуется передвижением от 0' к 0по столбцу, от 0к 0' по строке и т.д.

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

Далее над элементами цепочки, стоящими на нечетных местах ( 0' ) -, ставим звездочки, уничтожая их над четными элементами ( 0). Затем уничтожаем все штрихи над элементами Си знаки выделения “+”. Количество независимых нулей будет увеличено на единицу. На этом (k+1) -я итерация закончена.

Третий этап. К этому  этапу переходят после первого, если все нули матрицы Свыделены. В таком случае среди невыделенных элементов Свыбирают минимальный и обозначают его h (h>0). Далее вычитают h из всех элементов матрицы Сk, расположенных в невыделенных строках и прибавляют ко всем элементам, расположенным в выделенных столбцах. В результате получают новую матрицу С'k, эквивалентную Сk. Заметим, что при таком преобразовании, все нули со звездочкой матрицы Состаются нулями и в С'k, кроме того, в ней появляются новые невыделенные нули. Поэтому переходят вновь к первому этапу. Завершив первый этап, в зависимости от его результата либо переходят ко второму этапу, либо вновь возвращаются к третьему этапу.

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

Пример. Решить задачу о назначениях  с матрицей

При решении задачи используем следующие обозначения:

Знак выделения “+”, подлежащий уничтожению, обводим кружком; цепочку, как и ранее, указываем стрелками.

Предварительный этап. Отыскиваем максимальный элемент первого столбца - 4. Вычитаем из него все элементы этого  столбца. Аналогично для получения  второго, третьего, четвертого и пятого столбцов новой матрицы вычитаем все элементы этих столбцов от п'яти, трех, двух и трех соответственно. Получим матрицу С'(C'~C). Так как в каждой строке Сесть нуль, то С= Си процесс приведения матрицы заканчивается. Далее ищем и отмечаем знаком “*” независимые нули в С0, начиная с первой строки.

Первая итерация. Первый этап. Выделяем знаком “+” первый, второй, и четвертый столбцы матрицы  С0, которые содержат 0*.

Просматриваем невыделенный третий столбец, находим в нем  невыделенный нуль С23 = 0, отмечаем его штрихом и выделяем знаком “+” вторую строку. Просматриваем эту строку, находим в ней элемент С22 = 0и уничтожаем знак выделения второго столбца, содержащего 0*. Затем просматриваем второй столбец - в нем нет невыделенных элементов. Переходим к последнему невыделенному столбцу (пятому), ищем в нем невыделенные нули. Поскольку невыделенных нулей нет, то переходим к третьему этапу.

Третий этап. Находим минимальный  элемент в невыделенной части  матрицы С(т.е. элементы, которые лежат в столбцах и строках, не отмеченных знаком “+”). Он равен h = 1.

Вычтем h = 1 из всех элементов  невыделенных строк (т.е. всех, кроме  второго) и прибавим ко всем элементам  выделенных столбцов (первого и четвертого). Получим матрицу С'и перейдем к первому этапу.

Первый этап. Перед его  началом вновь выделяем знаком “+”  первый, второй и четвертый столбцы. Просматриваем невыделенный третий столбец, находим в нем невыделенный нуль С23 = 0, отмечаем его знаком штрих. Поскольку во второй строке есть 0(элемент С22), то выделяем знаком “+” вторую строку, далее уничтожаем знак выделения второго столбца, где лежит 0*. Потом просмотрим второй столбец, находим в нем невыделенный нуль С12 = 0, отмечаем его знаком штрих. Поскольку в первой строке есть нуль со звездочкой С14 = 0*, то выделяем его знаком “+”, и уничтожаем знак выделения четвертого столбца, где находился этот знак 0*. Затем пересматриваем четвертый столбец и находим в нем невыделенный нуль С54 = 0. Так как в строке, где он находится, нет нуля со звездочкой, то отметив этот 0 штрихом, переходим ко второму этапу.

Второй этап. Начиная с  элемента с54 = 0', строим цепочку, двигаясь от него по столбцу. Находим нуль со звездочкой с14 = 0*, далее от него движемся вдоль первой строки и находим 0'(с12), от этого элемента движемся вдоль первого столбца к с22 = 0*, в конечном итоге, двигаясь от с22 = 0вдоль второй строки приходим к исходному с23 = 0'. Таким образом, цепочка построена: 0'54-0*14-0'12-0*22-0'23. Заменяем штрих на звездочку и уничтожаем звездочки над четными элементами цепочки, а также все знаки выделения столбцов и строк. На этом первая итерация заканчивается. В результате число независимых нулей увеличилось на единицу. Поскольку следующие итерации выполняются аналогично, то приведем результаты их выполнения без дополнительных пояснений. После второй итерации количество независимых нулей (0*) стало равно 5 (размерности матрицы С) и поэтому алгоритм заканчивает работу. Искомые элементы назначения соответствуют позициям независимых нулей матрицы С(т.е. 0*).

Соответствующее значение целевой  функции

Первая итерация. Первый этап Третий этап

h=1

Первая итерация. Первый этап. Второй этап.

 
   
     
     

Вторая итерация

Первый этап Второй этап

 
   
     
     

2.3 Венгерский метод для транспортной задачи

Рассмотренная выше задача о назначениях представляет собой  частный случай Т-задачи, когда . Поэтому венгерский метод, применимый для решения транспортной задачи специального вида, можно распространить на общий случай Т-задачи. [18; 59].

Пусть требуется решить Т-задачу следующего вида минимизировать

при условиях

Алгоритм решения Т-задачи, основанный на венгерском методе, состоит  из предварительного этапа и конечного  числа однотипных итераций.

В результате предварительного этапа вычисляют матрицу

элементы которой удовлетворяют следующим условиям:

(3.3.1)

(3.3.2)

Если в условиях (3.3.1), (3.3.2) строгие равенства, то матрица Хявляется решением Т-задачи.

Матрицу, построенную в  результате k-й итерации, обозначим

Обозначим также

(3.3.3)

 

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

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

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

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

(3.3.4)

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

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

(3.3.5)

 

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

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

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

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

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

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

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

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

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

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

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

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

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

построена, осуществляют переход  к матрице от матрицы Хпо формулам

(3.3.7)

где (3.3.8)

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

Вычисляем невязку для

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

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

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

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

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

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

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

(3.3.9)

Эта формула справедлива  для целочисленных значений всех переменных и .

2.4 Обоснование венгерского метода

Прежде всего введем справедливость признака оптимальности, т.е. если , то план Х- оптимален.

Действительно, в силу построения Хk, если , то (эти нули называют существенными). Поэтому план Хоказывается оптимальным для задачи с матрицей Сk, так как

(3.3.10)

Но матрица Сполучена эквивалентными преобразованиями из исходной матрицы С. Докажем, что Х- оптимален и для задачи с матрицей С. Матрицы С и Скак эквивалентные связаны соотношениями

для всех (i,j) (3.3.11)

Тогда значение целевой функции  для плана Хпри матрице С будет равно

Информация о работе Задача о назначениях