Задача про призначення

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Задача про призначення є однією з базових задач комбінаторної оптимізації в галузі оптимізації або дослідження операцій в математиці. Вона полягає в знаходженні парування мінімальної (або максимальної) ваги між елементами двох скінчених множин. Вона може бути подана як знаходження парування у зваженому дводольному графі.

З іншого боку Задача про призначення належить до задач лінійного програмування. Вона є спеціальним випадком транспортної задачі, яка у свою чергу може бути представлена як Задача про потік мінімальної вартості[en].

Узагальнений опис задачі[ред.ред. код]

Задача про призначення може бути описана через різні прикладні ситуації. Наприклад, є ряд агентів і ряд завдань. Будь-який агент може бути призначений до виконання будь-якого завдання. Виконання агентом завдання пов'язане з витратами, які змінюються в залежності від того, який агент виконує завдання. Необхідно виконати всі завдання, призначивши для кожного завдання лише одного агента, таким чином, щоби загальні витрати були мінімальні.

Якщо кількість агентів і завдань однакові, а загальна вартість виконання всіх завдань дорівнює сумі витрат виконання окремих завдань, то задача називається лінійною задачею про призначення. Цей варіант задачі є базовим і найпростішим. Зазвичай, говорячи про задачу про призначення без додаткових вимог, мають на увазі лінійну задачу про призначення.

В інших варіантах задачі можуть бути додаткові умови, інші способи розрахунку загальних витрат, базові умови можуть бути дещо змінені. Наприклад, може бути неоднакова кількість агентів і завдань, нелінійність у визначенні загальних витрат тощо. В таких випадках кажуть про Узагальнену задачу про призначення.

Алгоритми[ред.ред. код]

Для розв'язання лінійної задачі про призначення можуть бути застосовані різні методи. Від загальних методів розв'язання задач лінійного програмування до спеціальних методів розв'язування задач на графах. Як правило, спеціальні методи, що розроблені саме для цієї задачі, є значно більш швидкими оскільки враховують і використовують особливості структури задачі. Так, наприклад, Угорський алгоритм є одним із перших алгоритмів, який був розроблений для вирішення лінійної задачі про призначення. Час розв'язання задачі пропорційний числу агентів.

Приклад[ред.ред. код]

Припустимо, що фірма таксі має три доступні машини (агенти) і замовлення від трьох клієнтів (завдання), які бажають поїхати якомога швидше. Фірма пишається тим, що якнайшвидше обслуговує своїх клієнтів, тому для кожного таксі "вартість" забирання конкретного клієнта встановлюється як час, що необхідний, щоб таксі було подано клієнту. Рішення цієї задачі про призначення – це таке парування таксі і клієнтів, щоби сумарний час подачі машин клієнтам був найменшим.

Тим не менш, завдання про призначення може бути гнучкішим, ніж здається на перший погляд. У наведеному вище прикладі, припустимо, що існує чотири доступні таксі, але як і раніше тільки три клієнти. Тоді четвертим завданням призначимо "нікуди не їхати» з вартістю 0 для кожного таксі. Така задача розв'язується так сама, як і попередня.

Подібні прийоми можуть бути відтворені для того, щоб дозволити використовувати більше завдань ніж агентів (наприклад, група клієнтів є більшою, ніж може поміститися в одному таксі), або максимізації прибутку, а не мінімізації витрат.

Математичне визначення[ред.ред. код]

Математичне визначення задачі про призначення виглядає наступним чином: Дано дві множини, A (agents) і T (tasks), рівного розміру, разом з ваговою функцією C (costs): A × TR. Знайти Бієкцію (взаємно-однозначну відповідність, парування) f : AT таку, що функція загальних витрат:

\sum_{a\in A}C(a,f(a))  : має мінімальне значення.

Зазвичай вагова функція C(a,t) задається як множина чисел C_{ij} для усіх пар (i,j), де i\in A, j\in T.

Задача записується як задача лінійного програмування

\sum_{i\in A}\sum_{j\in T}C_{ij}x_{ij}

з обмеженнями:

\sum_{j\in T}x_{ij}=1\text{  for all  }i\in A, \,
\sum_{i\in A}x_{ij}=1\text{  for all  }j\in T, \,
x_{ij}\ge 0\text{  for all pairs  }(i,j)\in A \text{x} T. \,

Змінна x_{ij} - приймає значення 1, якщо агент i виконує завдання j, і 0 у протилежному випадку. Мінімальне значення Цільової функції може досягатися при різних не завжди цілих значеннях змінних x_{ij}, але при цьому завжди існує інше оптимальне рішення задачі, де змінні приймають цілі значення. Це тому, об'єднана матриця обмежень задачі є повністю Унімодулярною. Перше обмеження вимагає, щоб кожен агент виконував рівно одне завдання, друге - щоб кожне завдання виконувалось тільки одним агентом.

Джерела[ред.ред. код]