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

12 Окт в 08:19
3 +3
0
Ответы
1

Я дам короткую формальную схему редукции нескольких часто встречающихся формулировок «назначения задач сотрудникам с ограничениями времени», докажу корректность редукции когдаонакорректнакогда она корректнакогдаонакорректна и укажу сложность и практические ограничения.

1) Модельыыы и предпосылки

Пусть есть n задач J = {j1..jn} и m сотрудников I = {i1..im}.Для каждой задачи j задано требование по времени p_j > 0 вчасахиливусловныхединицахв часах или в условных единицахвчасахиливусловныхединицах и множество сотрудников Sjjj ⊆ I, которые могут выполнить задачу понавыкам,повремениит.п.по навыкам, по времени и т. п.понавыкам,повремениит.п.. Каждая задача должна быть назначена ровно одному сотруднику есливмоделидопускаетсядробноераспределение,см.нижеесли в модели допускается дробное распределение, см. нижеесливмоделидопускаетсядробноераспределение,см.ниже.Для каждого сотрудника i задан общий доступный «временной ресурс» T_i ≥ 0 количествочасов,котороеонможетпотратитьколичество часов, которое он может потратитьколичествочасов,котороеонможетпотратить.Два случая, для которых редукция к максимальному потоку даёт полиномиальное решение:
A. задачи одинаковой «весовой» длины напримервсеpj=1например все p_j = 1напримервсеpj =1 или задачи дискретны и считаются единицами; каждый сотрудник i может выполнять не более k_i задач ki—целоеk_i — целоеki целое, где k_i = ⌊T_i / p_unit⌋;
B. допускается дробное преэмптивноепреэмптивноепреэмптивное распределение задач: p_j можно разделить между несколькими сотрудниками тогдазадача—поставкаобъёмаpj,которуюможнораздатьтогда задача — поставка объёма p_j, которую можно раздатьтогдазадачапоставкаобъёмаpj ,которуюможнораздать.Важное замечание: если задачи indivisible и p_j различны, и каждая задача должна быть назначена полностью одному сотруднику бездроблениябез дроблениябездробления, то общая проблема является NP‑трудной умножение/упаковка:bin‑packing/partitionредуцируетсяумножение/упаковка: bin‑packing/partition редуцируетсяумножение/упаковка:binpacking/partitionредуцируется, и полиномиальной редукции к стандартному max‑flow без экспоненциального/псевдополиномиального роста графа в общем случае не существует еслитолькодополнительныеструктуры/оценкинеприменимыесли только дополнительные структуры/оценки не применимыеслитолькодополнительныеструктуры/оценкинеприменимы.

2) Редукция случайA:единичные/одинаковыезадачи,целочисленноеназначениеслучай A: единичные/одинаковые задачи, целочисленное назначениеслучайA:единичные/одинаковыезадачи,целочисленноеназначение Построим сеть G = V,EV,EV,E с истоком s и стоком t:

Вершины:
s истокистокисток, t стокстокстокодна вершина v_j для каждой задачи j nвершинn вершинnвершинодна вершина u_i для каждого сотрудника i mвершинm вершинmвершинРёбра и пропускные способности capcapcap:
(s -> v_j) с cap = 1 для всех задач j каждаязадача—единичная«единица»,которуюнужнодоставитькаждая задача — единичная «единица», которую нужно доставитькаждаязадачаединичная«единица»,которуюнужнодоставить(v_j -> u_i) с cap = 1 тогда и только тогда, когда i ∈ Sjjj т.е.сотрудникiможетвыполнитьзадачуjт.е. сотрудник i может выполнить задачу jт.е.сотрудникiможетвыполнитьзадачуj(u_i -> t) с cap = k_i, где k_i — максимальное число задач, которое может выполнить i целое,напримерki=⌊Ti/punit⌋целое, например k_i = ⌊T_i / p_unit⌋целое,напримерki =Ti /pu nit Запрос: существует ли поток величины n всезадачиназначенывсе задачи назначенывсезадачиназначены? Максимизируем поток от s до t.

Корректность слово—формальноеслово — формальноесловоформальное:

Если в сети существует поток f с величиной |f| = n, то для каждой задачи вершина v_j получает ровно 1 единицу потока от s (т.к. cap(s->v_j)=1), и этот поток должен уйти по какому‑то ребру (v_j->u_i) (поток не может идти s->v_j->t напрямую). Значит каждой задаче соответствует ровно один сотрудник i с f(v_j->u_i) = 1. Для каждого i суммарный поток из u_i в t не превосходит cap(u_i->t) = k_i, значит i не получает более k_i задач. Таким образом поток даёт корректное распределение задач.Обратно, любое корректное распределение задач каждаязадачаназначенаровноодномусотруднику,ниодинсотрудникнепревышаетkiзадачкаждая задача назначена ровно одному сотруднику, ни один сотрудник не превышает k_i задачкаждаязадачаназначенаровноодномусотруднику,ниодинсотрудникнепревышаетki задач даёт поток величины n: поставляем 1 по (s->v_j), 1 по соответствующему (v_j->u_i), и суммарно в (u_i->t) = число назначенных задач ≤ k_i. Следовательно максимум потока = максимум числа назначенных задач; «все задачи назначим» ↔ «максимальный поток = n».Интегральность: все capacities целые 0/1иkiцелые0/1 и k_i целые0/1иki целые ⇒ по теореме интегральности сетевого потока существует целочисленный максимум, т.е. все значения потоков будут целыми, и в частности ребра v_j->u_i будут 0/1, что даёт явное целочисленное назначение.

3) Редукция случайB:дробное/преэмптивноераспределениезадачслучай B: дробное/преэмптивное распределение задачслучайB:дробное/преэмптивноераспределениезадач Построим сеть:

Вершины: s, t, для каждой задачи j — вершина v_j, для каждого сотрудника i — вершина u_i.Рёбра:
(s -> v_j) с cap = p_j объёмвременизадачиобъём времени задачиобъёмвременизадачи(v_j -> u_i) с cap = p_j если i ∈ Sjjj или∞/pjдостаточноили ∞/p_j достаточноили∞/pj достаточно — допускаем дробление потока с v_j к любым допустимым сотрудникам(u_i -> t) с cap = T_i общийдоступныйресурссотрудникаобщий доступный ресурс сотрудникаобщийдоступныйресурссотрудникаТогда существует поток общей величины sum_j p_j вся«нагрузка»распределенався «нагрузка» распределенався«нагрузка»распределена тогда и только тогда, когда задачи можно распределить вдробномсмыслев дробном смыслевдробномсмысле так, чтобы суммарное время у каждого i ≤ T_i. Аналогично доказательство двунаправленное: поток → распределение долей p_j, распределение → поток. Здесь не требуется целочисленности — решается обычным max‑flow.

4) Сложность постройка+решениепостройка + решениепостройка+решение

Размер графа: V = n + m + 2; E = n (s->tasks) + |E_bip| (ребра task->employee) + m (employees->t), где |E_bip| = sum_j |Sjjj| — число допустимых пар j,ij,ij,i.Построение графа: OV+EV + EV+E — пройти по спискам задач и допустимых сотрудников.Решение max‑flow:
Если использован алгоритм Dinic: типичная практическая оценка OEsqrt(V)E sqrt(V)Esqrt(V) влитературедаётсянескольковариантовоценок;дляunit‑capacityграфовчастоO(min(V2/3,sqrt(E))<em>E)в литературе даётся несколько вариантов оценок; для unit‑capacity графов часто O(min(V^{2/3}, sqrt(E)) <em> E)влитературедаётсянескольковариантовоценок;дляunitcapacityграфовчастоO(min(V2/3,sqrt(E))<em>E). Для аккуратности можно указать: OE</em>sqrt(V)E </em> sqrt(V)E</em>sqrt(V) будет разумной оценкой для больших сетей.Для Push‑Relabel с оптимизациями в практических реализациях часто работает быстрее; теоретическая оценка OV2sqrt(E)V^2 sqrt(E)V2sqrt(E) — хуже в видеуле, но практические библиотеки HiPR/GoldbergHiPR / GoldbergHiPR/Goldberg очень эффективны.Итак общая асимптотика: O(n+m+∣Ebip∣)∗sqrt(n+m)(n + m + |E_bip|) * sqrt(n + m)(n+m+Eb ip)sqrt(n+m) в случае Dinic приблизительноприблизительноприблизительно.Память: OV+EV + EV+E для представления графа.

5) Ограничения практического применения когдаредукциянепригоднаилитяжёлаякогда редукция непригодна или тяжёлаякогдаредукциянепригоднаилитяжёлая

Плотные графы: |E_bip| может быть On<em>mn<em>mn<em>m. Если n и m порядка десятков тысяч, nm негодится — память и время взорвутся. Практически максимум поток на графе с миллионами рёбер ещё решается, но с сотнями миллионов рёбер — уже проблематично.NP‑трудность общего случая: если задачи indivisible и p_j разные, задача «распределить задачи так, чтобы для каждого i суммарное время ≤ T_i» аналогмногоконтейнернойупаковки/partitionаналог многоконтейнерной упаковки/partitionаналогмногоконтейнернойупаковки/partition в общем случае NP‑трудна. Редукция к max‑flow с полиномиальным ростом графа не даёт решения полного случая. Возможные обходы:
если p_j — маленькие целые числа, можно делать псевдополиномиальную редукцию: разбить каждый сотрудник i на T_i «слотов» илислотыпоединицевремениили слоты по единице времениилислотыпоединицевремени — даст граф с OsumTisum T_isumTi вершин; это может быть применимо, но рост по времени ипамятии памятиипамяти большой — псевдополиномиальный.использовать приближённые/эвристические алгоритмы, ILP/CP‑решатели, жадные эвристики или метаэвристики для больших инстанций.Дробление задач: часто в реальности задачи indivisible; если дробление недопустимо, поток решит только специальные случаи единичныезадачиит.п.единичные задачи и т. п.единичныезадачиит.п.. Если дробление допустимо параллельизация/передачакусочковработыпараллельизация/передача кусочков работыпараллельизация/передачакусочковработы — max‑flow подходит.Временные окна/слоты: если у задач есть временные окна определённыеинтервалывкалендареопределённые интервалы в календареопределённыеинтервалывкалендаре, то приходится расширять модель по 시간ным слотам, что увеличивает размер графа вертикальнаядекомпозицияповременнымшагамвертикальная декомпозиция по временным шагамвертикальнаядекомпозицияповременнымшагам — опять рост графа пропорционален сумме слотов.

6) Практические рекомендации

Для случаев «каждая задача равна одной единице работы» используйте простую редукцию п.2п.2п.2 и Dinic / Push‑Relabel — надёжно и быстро для умеренно больших графов домиллионоврёберприхорошейреализацииипамятидо миллионов рёбер при хорошей реализации и памятидомиллионоврёберприхорошейреализацииипамяти.Для дробного распределения используйте редукцию п.3 и решатель потока с вещественными или целыми капацитетами.Для вариаций с целью минимизировать суммарные затраты/стоимость назначений используйте Min‑Cost Max‑Flow (аналогичная редукция + стоимости на рёбрах task->employee).Если граф слишком плотный — сначала сократите: отсеките невозможные пары, предфильтруйте сотрудников по навыкам/пространству, используйте жадные алгоритмы или ILP с отсеиванием.При NP‑трудном общем случае применяйте аппроксимации/эвристики или псевдополиномиальную дискретизацию если p_j небольшие.

7) Короткая теорема корректности формально,дляслучаяAформально, для случая Aформально,дляслучаяA Теорема. Построенная сеть имеет максимальный поток равный n ⇔ существует назначение всех n задач сотрудникам с ограничениями k_i.
Доказательство. КраткоКраткоКратко См. доводы в п.2: поток→назначение каждойзадачесоответствуетровноодинсотрудниккаждой задаче соответствует ровно один сотрудниккаждойзадачесоответствуетровноодинсотрудник, назначение→построение потока направитьпосоответствующимрёбрамнаправить по соответствующим рёбрамнаправитьпосоответствующимрёбрам, интегральность гарантирована целыми capacities. □

Если нужно, могу:

привести псевдокод для реализации построениеграфа+вызовбиблиотекиmax‑flowпостроение графа + вызов библиотеки max‑flowпостроениеграфа+вызовбиблиотекиmaxflow;показать пример численного преобразования для конкретного входа;разобрать случай «задачи с временными окнами» и как их дискретизировать в слот‑граф соценкойростаразмерас оценкой роста размерасоценкойростаразмера.
12 Окт в 09:31
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир