Узагальнена задача про призначення
У прикладній математиці під узагальненою задачею про призначення розуміють задачу комбінаторної оптимізації, що є узагальненням задачі про призначення, в якій множина виконавців має розмір, не обов'язково рівний розміру множини робіт. При цьому виконавця можна призначити для виконання будь-яких робіт (не обов'язково однієї роботи, як у задачі про призначення). При призначенні виконавця для виконання роботи задається дві величини — ціна і дохід. Кожен виконавець має певний бюджет, так що сума всіх витрат не повинна перевищувати цього бюджету. Потрібно знайти таке призначення виконавців для виконання робіт, щоб максимізувати прибуток.
У разі, коли бюджети виконавців і всі вартості робіт дорівнюють 1, задача перетворюється на задачу про максимальне парування.
Якщо ціни і доходи для всіх призначень виконавців на роботи рівні, завдання зводиться до мультиплікативного рюкзака.
Якщо є всього один агент, задача зводиться до задачі про рюкзак.
Є n робіт і m виконавців . Кожен виконавець має бюджет . Для кожної пари виконавець і робота задано дохід і вагу . Розв'язком є підмножина робіт U і розподіл робіт з U за виконавцями. Розв'язок допустимий, якщо сума витрат на призначені роботи виконавця не перевершує бюджету . Доходом від розв'язку є сума всіх доходів усіх розподілів робота-виконавець.
Математично узагальнену задачу про призначення можна сформулювати так:
- максимізувати
- при ;
- ;
- ;
Узагальнена задача про призначення є NP-складною і навіть APX-складною.
Фляйшер, Гоманс, Мірокні і Свириденко запропонували комбінаторний алгоритм локального пошуку з апроксимацією та алгоритм на основі лінійного програмування з апроксимацією [1].
Апроксимація є кращою відомою апроксимацією узагальненої задачі про призначення.
Використовуючи алгоритм -апроксимації задачі про призначення, можна створити ()-апроксимацію для узагальненої задачі про призначення на зразок жадібного алгоритму, використовуючи концепцію залишку доходу. Алгоритм ітераційно створює попередню послідовність, в якій на ітерації передбачається закріпити роботи за виконавцем . Вибір для виконавця може змінитися в подальшому при закріпленні робіт за іншими виконавцями. Залишок доходу роботи для виконавця дорівнює , якщо не віддано іншому виконавцю, і — , якщо роботу віддано виконавцю .
Формально: Використаємо вектор для попереднього вибору і в цьому векторі
- означає, що на роботу передбачається призначити виконавця ,
- означає, що на роботу нікого не призначено.
Залишок доходу на ітерації позначається через , де
- , якщо роботу не обрано (тобто )
- , якщо роботу передбачається віддати виконавцю (тобто ).
Отже, алгоритм виглядає так:
- Присвоюються початкові значення для всіх
- Для всіх виконати:
- Використовується алгоритм апроксимації для отримання розподілу робіт для виконавця , використовуючи функцію залишку доходу . Позначаються вибрані роботи .
- Підправляється , використовуючи , тобто для всіх .
- кінець циклу
- ↑ L. Fleischer, M. X. Goemans, V. S. Mirrokni, and M. Sviridenko. Tight approximation algorithms for maximum general assignment problems. In SODA'06: Proc
- Reuven Cohen, Liran Katzir, Danny and Raz, «An Efficient Approximation for the Generalized Assignment Problem», Information Processing Letters, Vol. 100, Issue 4, pp. 162-166, November 2006.
- Lisa Fleischer, Michel X. Goemans, Vahab S. Mirrokni, and Maxim Sviridenko, «Tight Approximation Algorithms for Maximum General Assignment Problems», SODA 2006, pp. 611-620.
- Hans Kellerer, Ulrich Pferschy, David Pisinger, Knapsack Problems , 2005. Springer Verlag ISBN 3-540-40286-1