Sunteți pe pagina 1din 12

Cercetări Operaționale, anul III

Note pentru Seminarul 9 Prof.dr. Vasile Teodor NICA

TEMA: Problema afectării

A. Enunț. Variante

I) Un număr de lucrări (proiecte, operații, sarcini de serviciu) 𝐿 , 𝐿 , … , 𝐿 sunt propuse spre


executare agenților (persoane, întreprinderi, instituții specializate ) 𝐴 , 𝐴 , … , 𝐴 . Fiecare agent
este capabil să execute una sau mai multe dintre lucrările propuse.

Problemă Care este numărul maxim de lucrări ce pot fi atribuite agenților astfel încât:
− 𝑜𝑟𝑖𝑐𝑒 𝑙𝑢𝑐𝑟𝑎𝑟𝑒 𝑠ă 𝑓𝑖𝑒 𝑎𝑡𝑟𝑖𝑏𝑢𝑖𝑡ă 𝒄𝒆𝒍 𝒎𝒖𝒍𝒕 𝑢𝑛𝑢𝑖 𝑎𝑔𝑒𝑛𝑡;
(*)
− 𝑜𝑟𝑖𝑐𝑒 𝑎𝑔𝑒𝑛𝑡 𝑠ă 𝑝𝑟𝑖𝑚𝑒𝑎𝑠𝑐ă 𝒄𝒆𝒍 𝒎𝒖𝒍𝒕 𝑜 𝑙𝑢𝑐𝑟𝑎𝑟𝑒.
Această problemă se va numi problema de afectare simplă (abreviat PAS)

II) Observăm că în cadrul PAS, dacă mai mulți agenți pot executa o aceeași lucrare, nu se face
nici o referire asupra modului în care este executată lucrarea : mai bine sau mai puțin bine, mai
repede sau mai încet, mai scump sau mai ieftin.Să presupunem că este posibilă evaluarea
modului în care o lucrare Li este executată de un agent Aj printr-o valoare numerică aij . Aceste
valori se vor numi eficacități de execuție și pot fi, după caz, note, timpi sau costuri.Pentru
simplitate vom presupune că m = n și ca urmare o lucrare va fi repartizată unui singur agent iar
un agent va primi o singură lucrare.

Problemă Să se repartizeze lucrările pe agenți cu respectarea condițiilor (*) astfel încât suma
eficacităților de execuție să fie, după caz :
- maximă (dacă, de exemplu, eficacitățile sunt note)
sau
- minimă (dacă eficacitățile sunt timpi de execuție sau costuri)
Aceasta se va numi problema generală de afectare (abreviat PA)

Observăm că PAS este un caz particular al PA în care :


1 𝑑𝑎𝑐ă 𝑎𝑔𝑒𝑛𝑡𝑢𝑙 𝐴 𝑝𝑜𝑎𝑡𝑒 𝑒𝑥𝑒𝑐𝑢𝑡𝑎 𝑙𝑢𝑐𝑟𝑎𝑟𝑒𝑎 𝐿
𝑎 =
0 î𝑛 𝑐𝑎𝑧 𝑐𝑜𝑛𝑡𝑟𝑎𝑟

Modelul matematic al problemei generale de afectare PA


Introducem variabilele bivalente:
1 𝑑𝑎𝑐ă 𝑎𝑔𝑒𝑛𝑡𝑢𝑙 𝐴 𝑝𝑜𝑎𝑡𝑒 𝑒𝑥𝑒𝑐𝑢𝑡𝑎 𝑙𝑢𝑐𝑟𝑎𝑟𝑒𝑎 𝐿
𝑥 =
0 î𝑛 𝑐𝑎𝑧 𝑐𝑜𝑛𝑡𝑟𝑎𝑟
Rezultă programul bivalent:

⎧ 𝑥 = 1 𝑖 = 1, … , 𝑛 ⟸ 𝑜𝑟𝑖𝑐𝑒 𝑙𝑢𝑐𝑟𝑎𝑟𝑒 𝑒𝑠𝑡𝑒 𝑎𝑡𝑟𝑖𝑏𝑢𝑖𝑡ă 𝑢𝑛𝑢𝑖 𝑠𝑖𝑛𝑔𝑢𝑟 𝑎𝑔𝑒𝑛𝑡;





⎪ 𝑥 = 1 𝑗 = 1, … , 𝑛 ⟸ 𝑜𝑟𝑖𝑐𝑒 𝑎𝑔𝑒𝑛𝑡 𝑝𝑟𝑖𝑚𝑒ș𝑡𝑒 𝑜 𝑠𝑖𝑛𝑔𝑢𝑟ă 𝑙𝑢𝑐𝑟𝑎𝑟𝑒;
(𝑃𝐴)

⎪ (min)𝑠𝑎𝑢(max)𝑓 = 𝑠𝑢𝑚𝑎 𝑒𝑓𝑖𝑐𝑎𝑐𝑖𝑡ăț𝑖𝑙𝑜𝑟 𝑑𝑒 𝑒𝑥𝑒𝑐𝑢ț𝑖𝑒 𝑠ă
𝑎 𝑥 ⟸
⎪ 𝑓𝑖𝑒 𝑚𝑖𝑛𝑖𝑚ă 𝑠𝑎𝑢 𝑚𝑎𝑥𝑖𝑚ă, 𝑑𝑢𝑝ă 𝑐𝑎𝑧.

⎪ 𝑥 ∈ {0,1}

III) Există situații în care maximizarea sau minimizarea sumei eficacităților de execuție nu
conduc la o soluție acceptabilă. Este posibil ca în cadrul unei eficacități totale optime, o lucrare
să fie atât de prost atribuită încât să compromită ansamblul tuturor lucrărilor!
Să considerăm și cazul unor lucrări ce trebuie executate simultan. În această situație, durata
executării întregului lot de lucrări este dată de durata individuală cea mai mare. În consecință,
atribuirea prin care lucrările sunt terminate cel mai repede este atribuirea care minimizează
maximul timpilor individuali de execuție.
Avem astfel următoarea :

Problemă Să se repartizeze lucrările pe agenți astfel încât :


 Să se minimizeze maximul eficacităților individuale de execuție (problema minimax) ;
sau, după caz,
 Să se maximizeze minimul eficacităților individuale de execuție (problema maximin).
Aceasta se va numi problema de afectare cu loc îngust (abreviat PAI).
Important : PAS este importantă atât în sine dar mai cu seamă pentru faptul că apare ca
subproblemă în rezolvarea celorlalte variante PA și PAI.

B. O formalizare a problemei de afectare simplă

PAS se reprezintă sugestiv printr-un tablou T cu :


m rânduri corespunzătoare lucrărilor 𝐿 , 𝐿 , … , 𝐿 ;
n coloane corespunzătoare agenților 𝐴 , 𝐴 , … , 𝐴 .
Tabloul are 𝑚 × 𝑛 celule. Celula situată în rândul Li și coloana Aj se va nota cu sigla (Li,Aj).
Celula (Li,Aj) se va numi admisibilă dacă lucrarea Li poate fi executată de către agentul Aj. În caz
contrar vom spune că celula (Li,Aj) este neadmisibilă și o vom marca în tabloul T cu simbolul X.
În continuare vom folosi termenul de linie pentru a desemna fie un rând fie o coloană ; tabloul
T are deci m + n linii.

Exemplul 1 (vizualizarea unei PAS) O agenție guvernamentală a anunțat șapte proiecte de


cercetare. Un număr egal de agenți (institute de A1 A2 A3 A 4 A5 A6 A7
cercetare, universități) sunt interesați în preluarea L1 X X X X X
acestor proiecte. În tabelul 1 un X în celula (Li,Aj) L X X X
2
arată că agentul Aj nu este specializat în domeniul L X X X X
3
proiectului Li și ca urmare Li nu va putea fi atribuit L X X X X X
4
lui Aj. Câte dintre proiectele anunțate pot fi
L5 X X X X
atribuite și cum ?
L6 X X X X X
L7 X X X X X
Tabelul 1

Se constată că atribuirea unui număr de lucrări unor agenți – cu respectarea condițiilor (*) – se
poate vizualiza în tabloul T printr-o mulțime C de celule admisibile cu proprietatea :

Oricare două celule diferite din C nu se află în aceeași linie (rând sau coloană) (**)

O mulțime C de celule admisibile din tabloul T cu proprietatea (**) se va numi în continuare


mulțime de celule admisibile independente (abreviat CAI).
Punerea în evidență a mulțimii C se va face prin înscrierea simbolului 1 (unu) în celulele din C.
Exemplul 2 În tabelul 2 este vizualizată atribuirea a cinci proiecte din cele șapte :
Proiectul L1 este atribuit agentului A4 A1 A2 A3 A4 A5 A6 A7
L1 X X 1 X X X
Proiectul L2 este atribuit agentului A6 L2 X X X 1
Proiectul L3 este atribuit agentului A3 L3 X 1 X X X
L4 X X X X X
Proiectul L5 este atribuit agentului A7
L5 X X X X 1
Proiectul L6 este atribuit agentului A2 L6 X 1 X X X X
Proiectele L4 și L7 nu mai pot fi atribuite. L7 X X X X X
Tabelul 2

În mod evident, numărul celulelor admisibile independente nu poate depăși nici numărul m de
lucrări nici numărul n de agenți:
|C| ≤ 𝑚𝑖𝑛{𝑚, 𝑛}
Considerațiile precedente furnizează următoarea traducere pur combinatorială a problemei de
afectare simplă:

În tabloul T să se determine o mulțime maximală C * de celule admisibile independente.

C. Algoritm de rezolvare a problemei de afectare simplă

În notațiile secțiunii B vom spune că o coloană Aj este admisibilă pentru rândul Li dacă celula
(Li,Aj) este admisibilă.

Imput : Un tablou T cu m rânduri și n coloane reprezentând datele unei PAS.


Output : o mulțime maximală de celule admisibile independente reprezentând soluția optimă
a problemei.

Start : Inițializăm mulțimea curentă C de CAI. Mulțimea C poate fi dată sau se construiește după
următoarea regulă :

(R) În fiecare rând, începând cu L1 se plasează un 1-ar în prima coloană admisibilă a rândului,
coloană în care nu apare déjà un 1-ar (dacă o asemenea coloană nu există se trece la examinarea
rândului următor).
Pasul 1 Dacă |C| = 𝑚𝑖𝑛{𝑚, 𝑛} Stop : mulțimea curentă de CAI este maximală deoarece:
 Fie toate lucrările au fost repartizate, dacă m ≤ n ;
 Fie toți agenții au primit câte o lucrare dacă m > n.
În caz contrar – deci când avem și rânduri și coloane fără 1 – marcăm cu eticheta * toate
rândurile fără 1.

Pasul 2 : Se examinează – într-o ordine oarecare - toate rândurile marcate (cu * sau altă etichetă)
în căutarea unuia care are măcar o coloană admisibilă și nemarcată. Dacă un asemenea rând nu
există Stop : mulțimea curentă C de CAI este maximală.
În caz contrar, fie Li un rând marcat care are cel puțin o coloană admisibilă și nemarcată. Se
examinează pe rând aceste coloane – în caz că sunt mai multe. Fie Aj coloana ce urmează a fi
examinată. În primul rând ea se va marca cu eticheta [𝐿 ]. Mai departe sunt posibile două situații :
 Coloana Aj nu are 1 : se trece imediat la pasul 3 fără a mai examina și celelale coloane
admisibile și nemarcate ale rândului Li;
 Coloana Aj are un 1 (unic !): rândul în care se află acest 1 se marchează cu eticheta 𝐴
după care se trece la examinarea altei coloane admisibile și nemarcate a rândului Li (dacă mai
există…)
La terminarea acestei operații se reia pasul 2 pe alt rând marcat.

Notă : Eichetele rândurilor se trec în dreapta tabloului T. Etichetele coloanelor se trec sub
tablou. Se recomandă ca etichetele să fie consemnate și separat sub forma unui arbore.

Pasul 3 (A fost marcată o coloană fără 1) Se efectuează următoarele operații :


- Prima operație (adăugarea unui 1-ar): Fie Aj coloana fără 1; ea are o etichetă [𝐿 ].Plasăm
un 1 în celula admisibilă (Li,Aj). Noul 1-ar va fi deosebit de 1-arii vechi prin notația :
1
- A doua operație (ștergerea unui 1-ar) : examinăm rândul Li .Acesta este un rând marcat.
Sunt două posibilități:

 Marca rândului Li are forma [𝐴 ]; în urma operației precedente în rândul Li sunt doi 1 -ari !
Ștergem 1 -arul din coloana Ak : 1 .Acum coloana Ak nu are 1! Reluăm prima operație pe
coloana Ak.
 Eticheta rândului Li este *. Stop : rândul Li , care nu avea 1, acum are unul ! S-a obținut o
mulțime nouă C’ de CAI care are o celulă în plus față de vechea mulțime C. Se trece la :
Pasul 4 Ștergem toate etichetele, actualizăm mulțimea curentă de CAI :C ←C’ și revenim la
pasul 1 în cadrul unei noi iterații.

Notă : o iterație a algoritmului se compune din două etape :


În etapa I se marchează rândurile și coloanele tabloului T în care este înscrisă mulțimea curentă
C de CAI. În principiu :
 Dintr-un rând marcat se poate eticheta o coloană nemarcată (sau mai multe…)
 Dintr-o coloană marcată se poate eticheta un rând nemarcat (cel mult…)
Marcarea se termină într-un număr finit de pași. Două situații sunt posibile :
 Nu s-a putut marca o coloană fără 1; în acest caz, mulțimea curentă de CAI este maximală
și algoritmul se oprește.
 A fost marcată o coloană fără 1 ; se trece la :
Etapa II în care prin adăugarea și ștergerea unor 1 -ari numărul CAI crește cu o celulă.

Avertisment cititorilor studioși. Siglele :

1 și 1

care evidențiază 1 -arii noi respectiv 1 -arii șterși vor fi folosite când se lucrează pe hârtie cu
pix, creion și eventual gumă!
În redactarea pe calculator un 1 -ar nou se va deosebi de cei vechi prin sigla 1nou iar un 1 -ar șters
va fi evidențiat prin sigla 1șters.

Exemplul 3 Algoritmul descris va fi aplicat A1 A2 A3 A4 A5 A6 A7


problemei din exemplul 1 pe mulțimea L1 X X 1 X X X [A4]
inițială de CAI dată în tabelul 2. În tabelul L2 X X X 1
2 reluat această mulțime este formată din 1- L3 1nou X 1șters X X X [A3]
arii de culoare roșie ! L4 X X 1nou X X X *
L5 X X X X 1
L6 X 1 X X X X
L7 X X X X X *
[L3] [L4] [L4]
Tabelul 2 reluat
Iterația 1
Etapa I : Etichetarea rândurilor și a coloanelor tabelului 2 reluat

Stop : a fost marcată


coloana A1 fără 1 !

Atenție: se mai puteau face


Start și alte marcaje dar nu mai
marcare contează !

Etapa II : Adăugare și ștergere de 1 -ari

În coloana A3 adăugăm În rândul L3 ștergem 1 În coloana A3 adăugăm


un 1 în rândul L4 din coloana A3 un 1 în rândul L3

Stop : Rândul L4 nu avea 1 . Acum are!

A1 A2 A3 A4 A5 A6 A7
S-au adăugat doi 1-ari și a fost șters unul ; L1 X X 1 X X X [A4]
noua mulțime de CAI, vizualizată în tabelul L2 X X X 1
3, arată că se pot atribui 6 din cele 7 L3 1 X X X X
proiecte. L4 X X 1 X X X [A3]
L5 X X X X 1
L6 X 1 X X X X
L7 X X X X X *
[L7] [L7]
Tabelul 3
Iterația 2

Etapa I : Etichetarea rândurilor și a coloanelor tabelului 3

Start Nu se mai pot face alte


marcare marcaje și nu a fost marcată
o coloană fără 1

Stop : Mulțimea curentă de CAI este maximală și evidențiază atribuirile :


𝐿 →𝐴 ; 𝐿 →𝐴 ; 𝐿 →𝐴 ; 𝐿 →𝐴 ; 𝐿 →𝐴 ; 𝐿 →𝐴
Proiectul L7 nu poate fi atribuit și agentul A5 nu a primit nici o lucrare.

Observație importantă : În tabelul 3 este dată o mulțime maximală de celule admisibile


independente împreună cu etichetele rândurilor și ale coloanelor ce probează maximalitatea.
Rândurile nemarcate L2 , L3 , L5 , L6 și coloanele marcate A3 , A4 acoperă toate celulele
admisibile ale tabloului original 1 și constituie o mulțime minimală de linii cu această
proprietate, grație următoarei teoreme (Menger) :
Într-un tablou ale cărui celule au fost
împărțite în două grupuri disjuncte – A1 A2 A3 A4 A5 A6 A7
admisibile și neadmisibile – numărul minim L1 X X X X X
de linii (rânduri și/sau coloane) care L2 X X X
acoperă toate celulele admisibile este egal L3 X X X X
cu numărul maxim de celule admisibile L4 X X X X X
independente. L5 X X X X
(vezi tabelul 4) L6 X X X X X
L7 X X X X X

Tabelul 4
A1 A2 A3 A4 A5 A6 A7
Notă: dacă mulțimea inițială de CAI ar fi fost L1 X X 1 X X X
construită dupa regula R s-ar fi obținut direct o L2 1 X X X
altă soluție optimă indicată în tabelul 5. L3 X X 1 X X
L4 X X 1 X X X
L5 X 1 X X X
L6 X X X X 1 X
L7 X X X X X
Tabelul 5

D. Algoritm de rezolvare a problemei generale de afectare (PA)

Algoritmul ce va fi descris în continuare rezolvă PA în care se cere minimizarea sumei


eficacităților individuale de execuție, denumite în continuare costuri.
Algoritmul este datorat lui Kuhn (1955), inspirat de o lucrare mai veche a lui Egervary (1931)
și din acest motiv este numit în literatura de specialitate algoritmul ungar.

Imput : O problemă generală de afectare cu m lucrări și n ≥ m agenți, cu costurile :


𝑐 𝑖 = 1, … , 𝑚 ; 𝑗 = 1, … , 𝑛
Output : O repartizare a lucrărior pe agenți care minimizează suma costurilor din atribuire.

Start. Se determină matricea costurilor reduse 𝑐̅ astfel:

 în fiecare rând i al matricii costurilor 𝑐 se determină cel mai mic cost:

𝑢 = 𝑚𝑖𝑛 𝑐 , 𝑗 = 1, … , 𝑛

 ui se scade din costurile rândului i ; se obține matricea 𝑐 − 𝑢 ;


 în fiecare coloană a matricii 𝑐 − 𝑢 se determină cel mai mic element :

𝑣 = 𝑚𝑖𝑛 𝑐 − 𝑢 , 𝑖 = 1, … , 𝑚

 vj se scade din elementele coloanei j a matricii 𝑐 − 𝑢 . Se obține matricea dorită :

𝑐̅ = 𝑐 −𝑢 −𝑣
Observație : Prin construcție costurile reduse 𝑐̅ = 𝑐 − 𝑢 − 𝑣 sunt nenegative. În fiecare
rând și în fiecare coloană a matricii 𝑐̅ se găsește cel puțin un zero !

Pasul 1 Se rezolvă o PAS în care atribuirile permise 𝐿 → 𝐴 corespund costurilor reduse nule.
Două rezultate sunt posibile:
I) Toate lucrările au fost repartizate. Aceasta va fi și soluția care minimizează suma
costurilor individuale. Stop
II) Nu s-a reușit repartizarea tuturor lucrărilor. Se trece la:

Pasul 2 (modificarea matricii costurilor reduse curente) Faptul că nu s-a reușit atribuirea tuturor
lucrărilor a rezultat din aplicarea procedurii de marcare din algoritmul de rezolvare a PAS.
Ca urmare:
 în matricea costurilor reduse curente 𝑐̅ se taie cu o linie punctată fiecare rând nemarcat
și fiecare coloană marcată.

Notă: Teoria ne asigură că numărul acestor linii este egal cu numărul de lucrări atribuite și că ele
acoperă (taie) toate costurile reduse nule.

 Se determină minimul θ al costurilor reduse netăiate. Cu siguranță θ > 0.


 Costurile reduse curente se modifică astfel :
- Se scade θ din costurile reduse netăiate ;
- Se adaugă θ la costurile reduse tăiate de două ori.
Se revine la pasul 1 în cadrul unei noi iterații.

Exemplul 4 Antrenorul unei echipe de înot trebuie să Stil Andrei Barbu Costin Dan
stabilească reprezentanții la cele patru stiluri pentru Spate 38 33 34 37
proba de ștafetă 4 × 100 m. Timpii medii (în Bras 43 33 42 36
secunde) ai celor patru membri ai echipei sunt dați în Fluture 33 28 39 31
tabelul alăturat. Antrenorul crede că repartizarea ar Liber 29 26 30 28
trebui făcută astfel încât suma timpilor individuali să
fie minimă.
Soluție:
Start Determinarea matricii costurior reduse inițiale:
𝑐 ui 𝑐 −𝑢 𝑐̅
38 33 34 37 33 5 0 1 4 2 0 0 2
43 33 42 36 33 10 0 9 3 7 0 8 1
33 28 39 31 28 5 0 11 3 2 0 10 1
29 26 30 28 26 3 0 4 2 0 0 3 0
vj 3 0 1 2

Iterația 1
Se rezolvă o PAS în care atribuirile permise corespund costurilor reduse nule :

A1 A2 A3 A4 A1 A2 A3 A4
L1 X 1șters 1nou X [A2] L1 X 1 X
L2 X 1nou X X * L2 X 1 X X [A2]
L3 X X X * L3 X X X *
L4 1 X L4 1 X
[L2] [L1] [L3]

Numărul maxim de atribuiri este 3 < 4. În matricea 𝑐̅ se taie rândurile nemarcate L1 și L4 și


coloana marcată A2.
Minimul costurilor reduse netăiate : θ = 1.
Scădem θ = 1din costurile reduse netăiate și adăugăm θ = 1 la costurile reduse tăiate de două
ori. Se obține matricea costurilor reduse actualizate:
2 1 0 2
Iterația 2 6 0 7 0
1 0 9 0
Se rezolvă o nouă PAS ale cărei atribuiri permise corespund costurilor reduse 0 1 3 0
actualizate :
A1 A2 A3 A4 Deoarece toate lucrările au fost repartizate s-a obținut soluția
L1 X X 1 X optimă a problemei date:
L2 X 1 X Spate Bras Fluture Liber
L3 X X 1 ↓ ↓ ↓ ↓
L4 1 X X Costin Barbu Dan Andrei
Timpi : 34 33 31 29

Total = 127 secunde


Foarte important: O problemă generală de afectare în care se cere maximizarea sumei
eficacităților de execuție se reduce la o problem de minimizare prin transformarea
𝑐 =𝑀−𝑎
unde 𝑀 = max 𝑎 este cea mai mare eficacitate individuală de execuție din problema de
,
maximizare.

S-ar putea să vă placă și