Класична постановка задачі:
1. У конструкторському бюро потрібно розробити проект машини, що складається із n вузлів. До їхньої розробки можна залучити n конструкторів. Відомий час, що витрачається кожним конструктором на розробку будь-якого вузла. Потрібно визначити, хто і який вузол машини повинен проектувати, щоб сумарний час проектування всієї машини був мінімальним.
2. У розподільній системі опрацювання даних у деякий момент часу є n ресурсів готових до виконання завдань. У систему надходить n завдань. Відома якість виконання завдань кожним ресурсом. Потрібно визначити кожному ресурсу своє завдання таким чином, щоб якість виконання всіх завдань була найкращою.
Математична модель має вигляд:
Функція цілі min (max)
Система граничних умов:
3. ,
1 якщо i - й ресурс призначений на виконання j - й роботи; 0 - інакше.
Для розв`язку задачі про призначення застосовується угорський метод, що грунтується на двох теоремах.
Теорема 1: Якщо xij=Xij мінімізує по всіх xij, таких, що xij³0 і , те xij=Xij мінімізує також функціонал , де при всіх i і j = 1,…,n...
Теорема 2 (Фробеніуса): Мінімальне число ліній, що покривають усі нулі матриці, дорівнює максимальному числу незалежних нулів у ній.
Незалежним нулем будемо називати єдиний вибраний нуль у рядку та стовпці, на перетині яких він знаходиться. Якщо крім вибраного незалежного нуля в рядку або стовпці присутні ще нулі, то їх далі необхідно вважати залежними. Фактично незалежний нуль на місці (i, j) є призначенням і –го завдання на виконання j -м ресурсом.
Наведений метод розв`язку зводиться до перетворень рядків і стовпців за допомогою деяких констант доти, поки достатнє число коефіцієнтів Cij не обернеться в нуль, що дасть шуканий результат.
Задача 3. Необхідно вирішити задачу про призначення 4 завдань на виконання 4 ресурсам, якщо задана матриця витрат часу на виконання кожного завдання кожним ресурсом: .
1. Приведемо матрицю до такого вигляду, щоб у кожному стовпці й кожному рядку знаходився хоча б один нуль. Для цього знайдемо в кожному рядку матриці мінімальний елемент і віднімемо його з усіх елементів відповідного рядка. Аналогічні перетворення виконаємо також з елементами стовпців.
2. Якщо після першого кроку можливий вибір чотирьох незалежних нулів, тоді можна стверджувати, що задача вирішена. Незалежні нулі для зручності будемо позначати (*). При розставленні позначок найкраще вибирати рядок або стовпець, що містять найменшу кількість нулів. У цьому рядку (стовпці) вибираємо нуль, позначаємо його і викреслюємо інші нулі в рядку або стовпці, на перетинанні яких знаходиться вибраний (або незалежний) нуль. Позначки ставимо доти, поки в матриці існують вільні (непозначені або невикреслені) нулі.
У розглянутому прикладі не вдалося відразу ж одержати оптимальне рішення, отже, переходимо на виконання третього кроку.
3. Проведемо мінімальне число горизонтальних і вертикальних ліній, що перетинають, принаймні, один раз усі нулі. Для задач невеликої розмірності візуально легко нанести шукані лінії, для більш складних зручно використати наступний алгоритм:
1. Позначаємо всі рядки, що не містять незалежних нулів.
2. Позначаємо всі стовпці, що містять нуль хоча б в одному позначеному рядку.
3. Позначаємо всі рядки, що містять незалежні нулі в позначених стовпцях.
Кроки 2 і 3 виконуємо доти, поки можливо ставити позначки. Далі викреслюємо непозначені рядки і позначені стовпці.
Якщо виявилося, що кількість ліній дорівнює n,тоді необхідно повернутися на попередній крок (позначки нулів) і знову вибрати незалежні нулі. Такий варіант можливий, якщо при проставленні позначок 2 або більше нулів у рядку мали «однакове право» бути незалежними.
4. Серед елементів, через які не пройшла жодна з ліній, вибираємо найменший. Віднімаємо це число зі всіх елементів, через які не пройшла жодна лінія, і додаємо його до всіх елементів, через які проведені дві лінії.
Повертаємося на крок вибору незалежних нулів. У розглянутому прикладі одержуємо відразу два оптимальних рішення:
1-е завдання ® 1-й ресурс
2-е завдання ® 2-й ресурс (або на 4-й ресурс)
3-е завдання ® 3-й ресурс
4-е завдання ® 4-й ресурс (або на 2-й ресурс)
У результаті такого призначення система виконає всі завдання за 17 умовних одиниць часу.
У тому випадку, якщо необхідно вирішити задачу отримання максимального значення функції цілі, можна скористатися наступною формулою переходу, що справедлива для будь-якої задачі лінійного і нелінійного програмування: min (L) = - max(-L) (тобто елементи матриці С домножити на (-1)).