- •Методические указания
- •Часть 2 Модуль 2
- •Общие сведения
- •Венгерский метод в задаче о назначениях и в задаче о кратчайшем пути.
- •Алгоритм решения задачи венгерским методом
- •Решить транспортную задачу с ограничением пропускной способности
- •Алгоритм решения задачи закрытого типа
- •Транспортная задача по критерию времени
Алгоритм решения задачи венгерским методом
Первый шаг алгоритма состоит в подборе вычитаемых параметров qi и rj (i,j = 1,2,...,5). Подбор постоянных qi и rj можно осуществлять как по строкам qi так и по столбцам rj. Начнем со строк. Максимально возможное число qi которое можно вычесть из стоимостей Сij какой-либо строки i (i = 1,2,...,5), равно минимальному значению стоимости Сij в этой строке: qi = min {ci1 , ci2, ci3, ci4, ci5}. Полученные значения qi приведены в правом столбце табл. 1. Результат Sij вычитания qi, sij = cij - qi, i= 1,2,...,5, помещен в табл. 2, каждая строка которой теперь содержит хотя бы одно нулевое значение Sij. Аналогично определяем максимально возможное число rj которое можно вычесть из стоимостей Сij какого-либо столбца. j (j = 1,2,3,4,5), rj= тin{ c1j, c2j, c3j, c4j, c5j}. В табл. 2 только последний столбец B5 не содержит нулевых Sij. Вычтем из элементов si5 значение r5 = 1 и результат запишем в табл. 3. В результате каждая строка и каждый столбец содержат хотя бы по одному нулевому значению Sij = 0, которые можно использовать для получения допустимого решения, помня, что каждая строка и столбец должны содержать только одну клетку с Хij = 1.
Таблица 2
Выбор min сij в столбце
I \ j |
B1 |
B2 |
B3 |
B4 |
B5 |
A1 |
0 |
1 |
3 |
0 |
2 |
A2 |
1 |
2 |
0 |
1 |
2 |
A3 |
1 |
0 |
1 |
0 |
1 |
A4 |
0 |
1 |
2 |
1 |
2 |
A5 |
2 |
2 |
1 |
0 |
1 |
Min cij |
0 |
0 |
0 |
0 |
1 |
Таблица 3
Допустимое решение
I \ j |
B1 |
B2 |
B3 |
B4 |
B5 |
A1 |
0 |
1 |
3 |
0 |
1 |
A2 |
1 |
2 |
0 |
1 |
1 |
A3 |
1 |
0 |
1 |
0 |
0 |
A4 |
0 |
1 |
2 |
1 |
1 |
A5 |
2 |
0 |
1 |
0 |
0 |
Второй шаг алгоритма заключается в том, чтобы найти допустимое решение {Хij = 1}, соответствующее нулевым значениям {sij= 0}. Чтобы найти такое решение, рассмотрим, например, сначала строки (или столбцы), содержащие наименьшее число нулей. В каждой такой строке (или столбце) выберем и выделим один из нулей. Далее, не будем рассматривать строку (и столбец), в которых находится выделенный нуль. Продолжим эту процедуру, рассматривая оставшиеся строки (и столбцы) с наименьшим числом нулей, пока не будут выделены все возможные нули (по одному в каждой строке и в каждом столбце).
В табл. 3 строки A2 и А4, содержат по одному нулю: s23 и s41, поэтому выделим эти нули и положим х23 = x41 = 1. Строки A2 и А4 и столбцы B1 и B3 исключаем из дальнейшего рассмотрения. Затем среди оставшихся строк найдем строку с наименьшим числом нулей и повторим тот же процесс. В строке A1 остался один нуль: s14 =0, выделим его, положим х14 = 1 и исключим строку A1 и столбец В4 из дальнейшего рассмотрения. В оставшихся строках А3 и A5 осталось по два нуля. Выберем в строке A3 клетку s32 =0, выделим нуль и положим Х32 = 1. Тогда в оставшейся строке А5 имеем s55 = 0 и х55= 1. Переменные х14, x23, х32, х41 и х55 показывают оптимальную расстановку работников, которой соответствуют затраты f=4+5+5+5+6= 25. Заметим, что можно было в строке A3 выбрать s35 = 0 и х35 = 1, а в строке А5 - s52 = 0 и x52 = 1 и это не изменило бы значение f.
В тех ситуациях, когда не удается найти допустимое решение Хij, соответствующее нулевым значениям Sij, рассмотренный алгоритм должен быть модифицирован. Проиллюстрируем модифицированный алгоритм на примере задачи о назначениях, приведенной в табл. 4.
Таблица 4
Параметры задачи и выбор min cij в строке
i\J |
B1 |
B2 |
B3 |
B4 |
B5 |
min cij |
A1 |
7 |
8 |
10 |
8 |
9 |
7 |
A2 |
7 |
3 |
5 |
5 |
6 |
3 |
A3 |
6 |
4 |
6 |
7 |
8 |
4 |
A4 |
7 |
3 |
6 |
6 |
7 |
3 |
A5 |
8 |
5 |
6 |
7 |
9 |
5 |
Первый шаг алгоритма аналогичен описанному выше, и его результат представлен в табл. 5-6. На втором шаге попытаемся получить допустимое решение, выделив по одному нулевому значению Sij = 0 в каждой строке и в каждом столбце табл. 6. В соответствии с алгоритмом в допустимое решение могут входить переменные Х11, X21 и X53, определяемые единственным нулевым значением Sij в соответствующих столбцах или строках. Понятно, что используя только нулевые значения Sij, нельзя построить допустимого решения.
Таблица 5
Выбор min cij в столбце
i\J |
B1 |
В2 |
В3 |
В4 |
B5 |
А1 |
0 |
1 |
3 |
1 |
2 |
А2 |
4 |
0 |
2 |
2 |
3 |
А3 |
2 |
0 |
2 |
3 |
4 |
А4 |
4 |
0 |
3 |
3 |
4 |
a5 |
3 |
0 |
1 |
2 |
4 |
Min cij |
0 |
0 |
1 |
1 |
2 |
Таблица 6
Результат 2-го шага
i\J |
В1 |
B2 |
B3 |
B4 |
В5 |
|
A1 |
0 |
1 |
2 |
0 |
0 |
|
А2 |
4 |
0 |
1 |
1 |
1 |
!!! |
А3 |
2 |
0 |
1 |
2 |
2 |
! |
А4 |
4 |
0 |
2 |
2 |
2 |
! |
A5 |
3 |
0 |
0 |
1 |
2 |
|
|
|
!! |
|
|
|
|
Следующий, третий, шаг алгоритма состоит в определении минимального числа строк и столбцов, содержащих нулевые клетки Si = 0. Для этого отметим (например, восклицательными знаками) в таблице:
1) строки, не содержащие выделенных нулей (один !);
2) столбцы, содержащие невыделенные нули в помеченных строках (два !!);
3) строки, содержащие выделенный нуль в помеченных столбцах (три !!!).
Следует повторять п. 2 и 3 до тех пор, пока не будут помечены все строки и столбцы, которые таким образом можно пометить. Далее, выделим все непомеченные строки и все помеченные столбцы (например, жирной рамкой). Выделенные таким образом строки и столбцы являются минимальным набором строк и столбцов, содержащим все нули.
В рассматриваемом примере (табл. 6) отмечены восклицательными знаками сначала строки A3 и A4 (п. 1) затем столбец В2 (п. 2) и, наконец, строка А2 (п. 3). На этом этапе больше нельзя пометить какую-либо строку или столбец. Выделим (жирной рамкой) непомеченные строки A1 и A5 и помеченный столбец В2 (табл. 7). Это минимальная совокупность строк и столбцов, содержащих все нулевые клетки.
На четвертом шаге алгоритма среди невыделенных элементов найдем наименьший р. Этот элемент р вычитается из всех невыделенных элементов и прибавляется к элементам, стоящим на пересечении выделенных строк и столбцов, а остальные элементы не изменяются. В табл. 7 элемент р = 1 и в результате четвертого шага получим табл. 8.
Таблица 7
Результат 3-го шага
i\J |
В1 |
В2 |
В3 |
В4 |
В5 |
A1 |
0 |
1 |
2 |
0 |
0 |
А2 |
4 |
0 |
1 |
1 |
1 |
А3 |
2 |
0 |
1 |
2 |
2 |
А4 |
4 |
0 |
2 |
2 |
2 |
А5 |
3 |
0 |
0 |
1 |
2 |
Таблица 8
Результат 4-го шага
I\j |
B1 |
B2 |
B3 |
B4 |
B5 |
|
A1 |
0 |
2 |
2 |
0 |
0 |
|
A2 |
3 |
0 |
0 |
0 |
0 |
|
A3 |
1 |
0 |
0 |
1 |
1 |
! |
A4 |
3 |
0 |
1 |
1 |
1 |
!!! |
A5 |
3 |
1 |
0 |
1 |
2 |
!!! |
|
|
!! |
!! |
|
|
|
Используя нулевые клетки табл. 8, попытаемся найти допустимое решение, повторяя второй шаг рассмотренного выше алгоритма. В результате в допустимое решение могут войти только переменные х11, х42, х53 и х24. Так как не удается подобрать допустимое решение, то следует повторять третий, четвертый и второй шаги алгоритма до тех пор, пока не будет получено допустимое решение, соответствующее нулевым клеткам.
В решении, представленном табл. 8, на третьем шаге второй итерации отметим строку A3 затем столбцы В2 и В3 и потом строки A4, и A5. Далее выделим рамкой строки А1, А2 и столбцы В2, B3 и поместим результат в табл. 9. Элемент р=1 является наименьшим среди невыделенных элементов. Вычтем р из невыделенных элементов sij, прибавим р к элементам, стоящим на пересечении выделенных строк и столбцов, и запишем результат четвёртого шага в табл. 10.
Таблица 9
Результат 3-го шага
i\J |
B1 |
B2 |
В3 |
В4 |
B5 |
A1 |
0 |
2 |
2 |
0 |
0 |
A2 |
3 |
0 |
0 |
0 |
0 |
A3 |
1 |
0 |
0 |
1 |
1 |
A4 |
3 |
0 |
1 |
1 |
1 |
А5 |
3 |
1 |
0 |
1 |
2 |
Таблица 10
Оптимальное решение
i\J |
В1 |
В2 |
B3 |
B4 |
B5 |
A1 |
0 |
3 |
3 |
6 |
0 |
A2 |
3 |
1 |
1 |
0 |
0 |
A3 |
0 |
0 |
0 |
0 |
0 |
A4 |
2 |
0 |
1 |
0 |
0 |
А5 |
2 |
1 |
0 |
0 |
1 |
С нулевыми значениями {Sij} этого решения можно связать допустимое решение х25, х11, х42, х33 и х54, причем переменные указаны в порядке их определения. Суммарные затраты f при таких назначениях определяются исходными затратами:
ЗАДАЧА 2