В прикладной математике под обобщённой задачей о назначениях понимается задача комбинаторной оптимизации, являющаяся обобщением задачи о назначениях, в которой множество исполнителей имеет размер, не обязательно равный размеру множества работ. При этом исполнитель может быть назначен для выполнения любых работ (не обязательно одной работы, как в задаче о назначениях). При назначении исполнителя для выполнения работы задается две величины — затраты и доход. Каждый исполнитель имеет определённый бюджет, так что сумма всех затрат не должна превышать этот бюджет. Требуется найти такое назначение исполнителей для выполнения работ, чтобы максимизировать доход.
В случае, когда бюджеты исполнителей и все стоимости работ равны 1, задача превращается в задачу о максимальном паросочетании.
Если цены и доходы для всех назначений исполнителей на работы равны, задача сводится к мультипликативному ранцу.
Если имеется всего один агент, задача сводится к задаче о ранце.
Имеется n работ x 1 , … , x n {\displaystyle x_{1},\dots ,x_{n}} и m исполнителей b 1 , … , b m {\displaystyle b_{1},\dots ,b_{m}} . Каждый исполнитель b i {\displaystyle b_{i}} имеет бюджет w i {\displaystyle w_{i}} . Для каждой пары исполнитель b i {\displaystyle b_{i}} и работа x j {\displaystyle x_{j}} задан доход p i , j {\displaystyle p_{i,j}} и вес w i , j {\displaystyle w_{i,j}} . Решением является подмножество работ U и распределение работ из U по исполнителям. Решение допустимо, если сумма затрат на назначенные работы исполнителя b i {\displaystyle b_{i}} не превосходит бюджета w i {\displaystyle w_{i}} . Доходом от решения является сумма всех доходов всех распределений работа-исполнитель.
Математически обобщённую задачу о назначениях можно сформулировать следующим образом:
Обобщённая задача о назначениях является NP-трудной и даже APX-трудной.
Фляйшер, Гоманс, Мирокни и Свириденко предложили комбинаторный алгоритм локального поиска с аппроксимацией ( 2 + ε ) {\displaystyle (2+\varepsilon )} и алгоритм на основе линейного программирования с аппроксимацией ( e e − 1 + ε ) {\displaystyle ({\frac {e}{e-1}}+\varepsilon )} [1].
Аппроксимация ( e e − 1 + ϵ ) {\displaystyle ({\frac {e}{e-1}}+\epsilon )} является лучшей известной аппроксимацией обобщенной задачи о назначениях.
Используя алгоритм α {\displaystyle \alpha } -аппроксимации задачи о назначениях, можно создать ( α + 1 {\displaystyle \alpha +1} )-аппроксимацию для обобщенной задачи о назначениях на манер жадного алгоритма используя концепцию остатка дохода. Алгоритм итерационно создает предварительную последовательность, в которой на итерации j {\displaystyle j} предполагается закрепить работы за исполнителем b j {\displaystyle b_{j}} . Выбор для исполнителя b j {\displaystyle b_{j}} может быть изменён в дальнейшем при закрепление работ за другими исполнителям. Остаток дохода работы x i {\displaystyle x_{i}} для исполнителя b j {\displaystyle b_{j}} равен p i j {\displaystyle p_{ij}} , если x i {\displaystyle x_{i}} не отдана другому исполнителю, и p i j {\displaystyle p_{ij}} – p i k {\displaystyle p_{ik}} , если работа отдана исполнителю b k {\displaystyle b_{k}} .
Формально:
Используем вектор T {\displaystyle T} для предварительного выбора и в этом векторе
Остаток дохода на итерации j {\displaystyle j} обозначается через P j {\displaystyle P_{j}} , где
Таким образом, алгоритм выглядит следующим образом: