În matematică aplicată , o problemă de atribuire generalizată este înțeleasă ca o problemă de optimizare combinatorie , care este o generalizare a problemei de atribuire , în care mulțimea de executanți are o dimensiune care nu este neapărat egală cu dimensiunea setului de locuri de muncă. În acest caz, executantul poate fi desemnat să execute orice lucrare (nu neapărat o singură lucrare, ca în problema de atribuire). Atunci când atribuiți un executant să execute lucrări, sunt stabilite două valori - costurile și veniturile. Fiecare interpret are un anumit buget, astfel încât suma tuturor costurilor nu trebuie să depășească acest buget. Este necesar să se găsească o astfel de încadrare a artiștilor executanți pentru a presta munca pentru a maximiza veniturile.
În cazul în care bugetele executanților și toate costurile muncii sunt egale cu 1, problema se transformă în problema de potrivire maximă .
Dacă prețurile și veniturile pentru toate sarcinile sunt egale, problema se reduce la un rucsac multiplicativ .
Dacă există un singur agent, problema se reduce la problema rucsacului .
Există n locuri de muncă și m performeri . Fiecare interpret are un buget . Pentru fiecare pereche de interpret și muncă, sunt date venitul și ponderea . Soluția este un subset de locuri de muncă U și o distribuție a locurilor de muncă din U între performeri. Decizia este acceptabilă dacă valoarea costurilor pentru munca atribuită interpretului nu depășește bugetul . Venitul din decizie este suma tuturor veniturilor tuturor repartizărilor de muncă-executor.
Din punct de vedere matematic, problema de atribuire generalizată poate fi formulată după cum urmează:
maximiza supus ; ; ;Problema generalizată de atribuire este NP-hard și chiar APX-hard .
Fleischer, Gomans, Mirokni și Sviridenko au propus un algoritm de căutare locală combinatorie cu aproximare și un algoritm bazat pe programare liniară cu aproximare [1] .
Aproximarea este cea mai cunoscută aproximare a problemei de atribuire generalizată.
Folosind problema de atribuire -algoritm de aproximare, se poate crea o ( ) -aproximare pentru problema de atribuire generalizată în maniera unui algoritm lacom folosind conceptul de venit rezidual. Algoritmul creează în mod iterativ o secvență preliminară în care se presupune că trebuie să atribuie lucru executantului la iterație . Alegerea interpretului poate fi modificată ulterior, atunci când atribuiți lucrări altor interpreți. Venitul rămas din muncă pentru executant este , dacă lucrarea nu este dată altui executant și - dacă lucrarea este dată executantului .
Oficial:
Folosiți vector pentru preselecție și în acest vector
înseamnă că trebuie să atribuie un executant lucrării , înseamnă că nimeni nu a fost repartizat la locul de muncă.Venitul rămas pe iterație este notat cu , unde
dacă nu este selectat niciun loc de muncă (adică ) , dacă lucrarea ar trebui să fie dată interpretului (adică ).Deci algoritmul arată astfel:
Valori inițiale atribuite pentru toți Pentru toată lumea , faceți: Un algoritm de aproximare este utilizat pentru a obține distribuția muncii pentru antreprenor folosind funcția venit rezidual . Sunt indicate lucrările selectate . Corectat folosind , adică pentru toți . sfârşitul ciclului