
- •4. Задача о назначениях
- •4.1. Общие сведения
- •4.2. Венгерский метод. Минимизация
- •4.2.2. Венгерский метод. Минимизация. Алгоритм решения.
- •4.2.3. Пример решения задачи о назначении венгерским методом.
- •4.3. Венгерский метод. Максимизация
- •4.3.1. Постановка задачи
- •4.3.2. Алгоритм венгерского метода №1
- •4.3.2.1. Пример решения задачи о назначении венгерским методом.
- •4.3.3. Алгоритм венгерского метода №2
- •4.3.4. Пример решения задачи о назначении венгерскими методами №1 и №2
- •4.4. Метод Мака
- •4.4.1. Алгоритм метода Мака
- •4.4.2. Пример решения задачи о назначении методом Мака.
- •Оглавление
4.3.3. Алгоритм венгерского метода №2
Первый этап:
1. В каждой строке таблицы найти наименьший элемент и вычесть его из всех элементов данной строки.
2. Повторить ту же самую процедуру для столбцов.
Теперь в каждой строке и в каждом столбце таблицы есть по крайней мере один нулевой элемент. Представленная в полученной с помощью описанного выше приема "приведенной" транспортной таблице задача о назначениях эквивалентна исходной задаче, и оптимальное решение для обеих задач будет одним и тем же. Сущность Венгерского метода заключается в продолжении процесса приведения матрицы до тех пор, пока все подлежащие распределению единицы не попадут в клетки с нулевой стоимостью. Это означает, что итоговое значение приведенной целевой функции будет равно нулю. Так как существует ограничение на неотрицательность переменных, нулевое значение целевой функции является оптимальным.
Второй этап:
Если некоторое решение является допустимым, то каждой строке и каждому столбцу соответствует только один элемент. Если процесс распределения элементов осуществляется только в клетки с нулевой стоимостью, он приведет к получению минимального значения целевой функции.
1. Найти строку, содержащую только одно нулевое значение стоимости, и в клетку, соответствующую данному значению, поместить один элемент. Если такие строки отсутствуют, допустимо начать с любого нулевого значения стоимости
2. Зачеркнуть оставшиеся нулевые значения данного столбца.
3. Пункты 1 и 2 повторять до тех пор, пока продолжение описанной процедуры окажется невозможным.
Если на данном этапе окажется, что есть несколько нулей, которым не соответствуют назначения и которые являются незачеркнутыми, то необходимо:
4. Найти столбец, содержащий только одно нулевое значение, и в соответствующую клетку поместить один элемент.
5. Зачеркнуть оставшиеся нули в данной строке.
6. Повторять пункты 4 и 5 до тех пор, пока дальнейшая их реализация окажется невозможной.
Если окажется, что таблица содержит неучтенные нули, повторить операции 1-6. Если решение является допустимым, т.е. все элементы распределены в клетки, которым соответствует нулевая стоимость, то полученное решение одновременно является оптимальным. Если решение является недопустимым, осуществляется переход к этапу 3.
Третий этап:
1. Провести минимальное число прямых через строки и столбцы матрицы (но не по диагоналям) таким образом, чтобы они проходили через все нули, содержащиеся в таблице.
2. Найти наименьший среди элементов, через которые не проходит ни одна из проведенных прямых.
3. Вычесть его из всех элементов, через которые не проходят прямые.
4. Прибавить найденный элемент ко всем элементам таблицы, которые лежат на пересечении проведенных ранее прямых.
5. Все элементы матрицы, через которые проходит только одна прямая, оставить без изменения.
В результате применения данной процедуры в таблице появляется по крайней мере один новый ноль. Необходимо возвратиться ко второму этапу и повторять алгоритм до тех пор, пока не будет получено оптимальное решение.