
- •Практическая работа №2 графический метод решения задач линейного программирования.
- •Практическая работа №3 решение математических задач симплексным методом.
- •Практическая работа №4 решение математических задач симплексным методом с искусственным базисом.
- •Практическая работа №5 решение двойственной задачи.
- •Практическая работа №6 построение опорных планов 6-ю методами.
- •Практическая работа №7 проверка опорного плана на оптимальность методом потенциалов.
- •Практическая работа №8 проверка оптимального плана методом дифференциальных рент.
- •Практическая работа №9 решение задач о кратчайших расстояниях.
- •Практическая работа №10 сетевое планирование и управление.
- •Практическая работа №11
- •Практическая работа №12 решение задач оптимальной загрузки оборудования.
- •Практическая работа №13 задача оптимального раскроя.
- •Практическая работа №14 решение задач оптимальной очередности обработки деталей.
- •Практическая работа №15 решение задач выбора венгерским методом.
Практическая работа №15 решение задач выбора венгерским методом.
Алгоритм венгерского метода
Алгоритм состоит из предварительного этапа и не более чем n-2 итераций, каждая итерация – это эквивалентное преобразование матрицы для получения независимых нулей. Каждая итерация увеличивает число независимых нулей на 1.
Задача считается решенной, когда количество независимых нулей станет = n. А оптимальный план указывает позицию независимых нулей в последней матрице.
Предварительный этап.
В каждом столбце последовательно ищем максимальный элемент и из него вычитаем элементы данного столбца. В результате образуется матрица с неотрицательными элементами, в каждом столбце которой имеется хотя бы один ноль.
Берем последовательно каждую строку, ищем в ней минимальный элемент и вычитаем этот элемент из каждого элемента данной строки. В результате получаем в каждой строке хотя бы один ноль.
В первом столбце, первый ноль отмечаем звездочкой (0*), затем просматриваем следующие столбцы, и если в нем есть ноль, расположенный в строке, где нет 0*, то отмечаем его звездочкой. В результате 0* по построению являются независимыми.
Итерация.
Предположим, что К-я итерация закончена. Если в матрице n независимых нулей (т.е. 0*), то задача решена, в противном случае переходим к следующей итерации (К+1).
Каждая итерация начинается первым и заканчивается вторым этапом, а между ними может быть сколько угодно третьих этапов.
Перед итерацией обозначаем плюсом (+) выделенные столбцы, где есть 0*.
Этапы:
Просматриваем невыделенные столбцы, и если среди них нет нулевых элементов, то переходим к третьему этапу. Если же невыделенный ноль есть, то возможны два случая:
- Строка с невыделенным нулем не содержит 0*
- Строка с невыделенным нулем содержит 0*.
Здесь невыделенный ноль отмечают штрихом, выделяют строку плюсом (справа), затем уничтожают знак плюс над тем столбцом, на пересечении которого находится 0*, просматриваем этот столбец, отыскиваем в нем невыделенный ноль, отмечаем его 0', выделяем строку плюсом и т.д. В результате процесс заканчивается одним из следующих случаев:
Все нули выделены, т.е. находятся в выделенных строках и столбцах, тогда переходим к третьему этапу.
Имеется невыделенный ноль в строке где нет 0*, тогда переходим ко второму этапу, отметив последним по порядку 0'.
Строим следующую цепочку из элементов по следующему правилу: от ' к * по столбцу, а от * к ' по строке. Всегда цепочка начинается и заканчивается штрихом.
Заменяем ' на *, а * уничтожаем. Рисуем следующую матрицу и переходим к первому этапу.
К этому этапу переходят после первого, если все нули матрицы выделены, т.е. находятся на выделенных строках или столбцах. Тогда среди невыделенных элементов матрицы выбирают минимальный, обозначают его h (элемент > 0). Вычитаем h из всех элементов в невыделенных строках и прибавляем ко всем элементам в выделенных столбцах. Получаем новую матрицу и переходим к первому этапу.