Главная
Новости
Строительство
Ремонт
Дизайн и интерьер




27.01.2022


23.01.2022


22.01.2022


22.01.2022


20.01.2022


19.01.2022





Яндекс.Метрика

Задача о назначениях

07.12.2021

Задача о назначениях — одна из фундаментальных задач комбинаторной оптимизации в области математической оптимизации или исследовании операций. Задача состоит в поиске минимальной суммы дуг во взвешенном двудольном графе.

В наиболее общей форме задача формулируется следующим образом:

Имеется некоторое число работ и некоторое число исполнителей. Любой исполнитель может быть назначен на выполнение любой (но только одной) работы, но с неодинаковыми затратами. Нужно распределить работы так, чтобы выполнить работы с минимальными затратами.

Если число работ и исполнителей совпадает, то задача называется линейной задачей о назначениях. Обычно, если говорят о задаче о назначениях без дополнительных условий, имеют в виду линейную задачу о назначениях.

Алгоритмы и обобщения

Венгерский алгоритм — один из многих алгоритмов, разработанный для решения линейной задачи о назначениях за полиномиальное время от числа работ.

Задача о назначениях является частным случаем транспортной задачи, которая является частным случаем задачи нахождения потока минимальной стоимости, а она, в свою очередь, является частным случаем задачи линейного программирования. Любую из этих задач можно решить симплекс-методом, но каждая специализация имеет свой более эффективный алгоритм, опирающийся на особенности структуры задачи.

Если целевая функция выражается через квадраты, говорят о квадратичной задаче о назначениях.

Пример

Предположим, что таксомоторная компания имеет три свободные машины (исполнители), и три заказчика (работы), желающих получить такси как можно быстрее. Фирма заботится о времени доставки такси к заказчику, так что для каждой машины стоимость определяется временем, с которым машина доберётся до места ожидания, определённого заказчиком. Решением задачи о назначениях будет распределение машин по заказчикам такое, что суммарная стоимость (суммарное время ожидания) минимальна.

Задачу о назначениях можно сделать более гибкой. В вышеприведенном примере могут оказаться не три, а четыре свободных такси, но заказчика по-прежнему три. Можно назначить четвёртого фиктивного заказчика с нулевой стоимостью, распределение же машины на фиктивного заказчика означает — «ничего не делай».

Аналогичный приём можно использовать в случае, когда число заказов может превышать число доступных машин, и машина может быть назначена на выполнение нескольких работ, а также когда работа может быть назначена нескольким исполнителям (например, если заказчик — группа, не помещающаяся в одно такси). Можно также поставить задачу увеличения дохода, а не минимизацию цены.

Формальное математическое определение

Формальная постановка задачи о назначениях:

Даны два множества A и T одного размера и задана функция стоимости C : A × TR. Необходимо найти биекцию f : AT такую, что целевая функция: ∑ a ∈ A C ( a , f ( a ) ) {displaystyle sum _{ain A}C(a,f(a))} минимальна.

Обычно функция стоимости задается как квадратная матрица C, состоящая из вещественных чисел так, что целевую функцию можно записать в виде:

∑ a ∈ A C a , f ( a ) {displaystyle sum _{ain A}C_{a,f(a)}}

Задача называется «линейной», поскольку и целевая функция, и ограничения содержат только линейные выражения.

Задачу можно представить как задачу линейного программирования c целевой функцией

∑ i ∈ A ∑ j ∈ T C ( i , j ) x i j {displaystyle sum _{iin A}sum _{jin T}C(i,j)x_{ij}}

и ограничениями

∑ j ∈ T x i j = 1 {displaystyle sum _{jin T}x_{ij}=1} для i ∈ A {displaystyle iin A} , ∑ i ∈ A x i j = 1 {displaystyle sum _{iin A}x_{ij}=1} для j ∈ T {displaystyle jin T} , x i j ≥ 0 {displaystyle x_{ij}geq 0} для i , j ∈ A , T {displaystyle i,jin A,T} .

Переменная x i j {displaystyle x_{ij}} представляет назначение исполнителя i {displaystyle i} на работу j {displaystyle j} , принимая значение 1 если исполнитель назначен на эту работу и 0 в противном случае. В этой формулировке решение может и не быть целым, но всегда существует оптимальное решение с целыми значениями. Этот факт следует из абсолютной унимодулярности матрицы. Первое ограничение требует, чтобы каждому исполнителю была назначена в точности одна задача, второе требует, чтобы для каждой задачи был назначен один исполнитель.