Обобщённая задача о назначениях

Материал из testwiki
Версия от 15:19, 15 января 2019; imported>Alex NB IT (оформление)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

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

Специальные случаи

В случае, когда бюджеты исполнителей и все стоимости работ равны 1, задача превращается в задачу о максимальном паросочетании.

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

Если имеется всего один агент, задача сводится к задаче о ранце.

Определение

Имеется n работ x1,,xn и m исполнителей b1,,bm. Каждый исполнитель bi имеет бюджет wi. Для каждой пары исполнитель bi и работа xj задан доход pi,j и вес wi,j. Решением является подмножество работ U и распределение работ из U по исполнителям. Решение допустимо, если сумма затрат на назначенные работы исполнителя bi не превосходит бюджета wi. Доходом от решения является сумма всех доходов всех распределений работа-исполнитель.

Математически обобщённую задачу о назначениях можно сформулировать следующим образом:

maximize i=1mj=1npijxij.
subject to j=1nwijxijwii=1,,m;
i=1mxij1j=1,,n;
xij{0,1}i=1,,m,j=1,,n;

Обобщённая задача о назначениях является NP-трудной и даже APX-трудной.

Фляйшер, Гоманс, Мирокни и Свириденко предложили комбинаторный алгоритм локального поиска с аппроксимацией (2+ε) и алгоритм на основе линейного программирования с аппроксимацией (ee1+ε)[1].

Аппроксимация (ee1+ϵ) является лучшей известной аппроксимацией обобщенной задачи о назначениях.

Жадный аппроксимирующий алгоритм

Используя алгоритм α-аппроксимации задачи о назначениях, можно создать (α+1)-аппроксимацию для обобщенной задачи о назначениях на манер жадного алгоритма используя концепцию остатка дохода. Алгоритм итерационно создает предварительную последовательность, в которой на итерации j предполагается закрепить работы за исполнителем bj. Выбор для исполнителя bj может быть изменён в дальнейшем при закрепление работ за другими исполнителям. Остаток дохода работы xi для исполнителя bj равен pij, если xi не отдана другому исполнителю, и pijpik, если работа отдана исполнителю bk.

Формально:

Используем вектор T для предварительного выбора и в этом векторе

T[i]=j означает, что на работу xi предполагается назначить исполнителя bj,
T[i]=1 означает, что на работу xi никто не назначен.

Остаток дохода на итерации j обозначается через Pj, где

Pj[i]=pij, если работа xi не выбрана (т.е. T[i]=1)
Pj[i]=pijpik, если работу xi предполагается отдать исполнителю bk (т. е. T[i]=k).

Таким образом, алгоритм выглядит следующим образом:

Присваиваются начальные значения T[i]=1 для всех i=1n
Для всех j=1...m выполнить:
Используется алгоритм аппроксимации для получения распределения работ для исполнителя bj, используя функцию остатка дохода Pj. Обозначаются выбранные работы Sj.
Подправляется T, используя Sj, т. е. T[i]=j для всех iSj.
конец цикла

См. также

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Rq

  1. L. Fleischer, M. X. Goemans, V. S. Mirrokni, and M. Sviridenko. Tight approximation algorithms for maximum general assignment problems. In SODA'06: Proc