Sunteți pe pagina 1din 6

ALGORITMUL UNGAR (KUHN)

Problemele de repartiţie sunt probleme în care se urmăreşte cuplarea a p subiecţi cu q


subiecţi, iar rezolvarea unei probleme de repartiţie constă în determinarea cuplajului maxim care
se face cu ajutorul algoritmului ungar. Acesta cuprinde 6 etape:
1) Se formează matricea C pătratică de ordinul p dacă p > q şi de ordinul q dacă
p< q.
2) Obţinerea de zerouri. Se scade minorantul fiecărei linii din toate elementele liniei
respective obţinând astfel cel puţin câte un „0” pe fiecare linie a matricei C. Dacă în urma acestei
operaţii există coloane care nu conţin „0”, se scade minorantul fiecărei coloane în cauză din toate
elementele coloanei respective. Se obţine astfel cel puţin câte un „0” pe fiecare linie şi coloană a
matricei C.
3) În matricea C1 obţinută din matricea C după parcurgerea etapei a doua se caută un
cuplaj maxim prin operaţia de încadrare şi barare de zerouri astfel:
- se încadrează un „0” situat pe linia cu cele mai puţine zerouri şi se barează (taie)
toate celelalte zerouri aşezate pe linia şi coloana zeroului încadrat;
- se repetă această operaţie până când toate zerourile matricei C1 au fost încadrate
sau barate.
Dacă se obţine câte un „0” încadrat pe fiecare linie şi coloană, s-a obţinut cuplajul
maxim. În caz contrar se trece la etapa următoare.
4) Căutarea unui cuplaj maxim printr-o marcare a liniilor şi coloanelor astfel:
- se marchează liniile care nu conţin nici un „0” încadrat;
- se marchează coloanele care conţin zerouri tăiate pe liniile deja marcate;
- se marchează liniile care conţin un „0” încadrat pe coloanele deja marcate;
- se repetă aceste operaţii până când nu mai este posibil să se obţină alte linii sau
coloane marcate.
5) În matricea C1 se taie toate liniile nemarcate şi coloanele marcate. Minorantul
elementelor rămase netăiate se adaugă elementelor dublu tăiate, se scade din elementele netăiate,
lăsând neschimbate elementele simplu tăiate. Se obţine o nouă matrice C2.
6) Pe matricea C2 se repetă procedeul de încadrare şi tăiere a zerourilor. Se procedează
în continuare aşa cum s-a arătat mai sus, până când se obţine câte un „0” încadrat pe fiecare linie
şi coloană, deci se obţine cuplajul maxim. Soluţia optimă poate să nu fie unică.

1
Aplicaţie 1. Se consideră 4 beneficiari care urmează să se aprovizioneze cu marfă de la 7
centre de distribuţie. Distanţele de transport (în km) sunt date în tabloul următor. Să se determine
repartiţia optimă a beneficiarilor pe centre de distribuţie căreia îi corespunde o distanţă totală de
transport minimă cu condiţia ca fiecare beneficiar să aprovizioneze cel puţin de la un centru şi cel
mult de la două.

Centre
Beneficiari У1 У2 Уз У4 У5 У6 У7
X1 3 5 2 7 4 6 6
X2 4 6 2 6 5 7 8
X3 4 7 3 8 5 8 7
X4 5 8 3 8 5 7 5

Rezolvare:

Se formează o matrice pătratică adăugând 3 beneficiari fictivi (x5, x6, x7).

Centre
Minorantul
Beneficiari У1 У2 Уз У4 У5 У6 У7
X1 3 5 7 4 2
2 6 6
X2 4 5 7 2
6 2 6 8
3
X3 4 7 3 8 5 8 7
3
X4 5 8 3 8 5 7 5
0
X5 0 0 0 0 0 0 0
X6 0
0 0 0 0 0 0 0
0
X7 0 0 0 0 0 0 0

Se scade pe linie din fiecare element al liniei şi se obţine matricea Ci.

Centre
Beneficiari У1 У2 Уз У4 У5 У6 У7
X1 1 3 0 5 2 4 4
X2 2 4 0 4 3 5 6
X3 1 4 0 5 2 5 4
X4 2 5 0 5 2 4 2
X5 0 0 0 0 0 0 0
X6 0 0 0 0 0 0 0
X7 0 0 0 0 0 0 0

Există pe fiecare linie şi coloană cel puţin câte un „0”, aşa că se poate trece la
încadrarea şi tăierea zerourilor.

2
Centre
Beneficiari Yi У2 Уз У4 У5 У6 У7
Xl 1 3 0 5 2 4 4

X2 2 4 0 4 3 5 6

X3 1 4 0 5 2 5 4

X4 2 5 0 5 2 4 2

X5 0 0 0 0 0 0
0
X6 0 0 0 0 0 0 0

X7 0 0 0 0 0 0
0

Pentru că pe liniile 2, 3, 4 şi pe coloanele 5, 6, 7 nu se găseşte nici un „0” încadrat, se


continuă algoritmul cu marcarea liniilor şi coloanelor.

Minorantul elementelor rămase netăiate este 1. El se adaugă elementelor dublu tăiate, se


scade din elementele netăiate, lăsând neschimbate elementele simplu tăiate.

3
s s
Centre
Beneficiari У1 У2 Уз У4 У5 У6 У7
X1 0 2 >l 4 1 3 3 s

X2 3 () 3 2 4 5 s

X3 )l 3 f 4 1 4 3 s

X4 4 >l 4 1 3 1 s

X5 )X n 0 0 __ 0 __ 0

X6 'lX 0 __ П 0 __ 0 __

X7 'lX 0 0 n 0 0
0

Minorantul elementelor rămase netăiate este 1. El se adaugă elementelor dublu tăiate, se


scade din elementele netăiate, lăsând neschimbate elementele simplu tăiate.

Centre
Beneficiari У1 У2 Уз У4 У5 У6 У7
Xl 1 0 3 0 2 2
0
X2 1 2 2 1 3 4
0
X3 0 2 0 3 0 3 2

X4 1 3 0 3 0 2
0
X5 1 0 2 0 0 0 0

X6 1 0 2 0 0 0
0
X7 1 0 2 0 0 0
0

În matricea de mai sus pe fiecare linie şi pe fiecare coloană există câte un „0” încadrat,
deci cuplajul este maxim. Soluţia optimă găsită este:
xi □ yi
X2 □
У3 X3
□ У 5
X4 □
У7 x5
□ y2
X6 □ У
4 X7 □
У6

De la centrele y2, y4 şi У6 se aprovizionează beneficiari „fictivi” (x5, X6, X7). De la aceste


centre va trebui să se aprovizioneze beneficiari „reali” (x1, X2, X3, X4). Vom forma o matrice
pătratică, introducând un depozit fictiv.

4
Centre
Beneficiari У2 У4 У6 У8
X1 5 7 6 0
X2 6 6 7 0
X3 7 8 8 0
X4 8 8 7 0

Minorantul fiecărei linii este 0. Pe fiecare linie se găseşte câte un „0”, însă pe primele 3
coloane nu se găseşte nici un „0”. Minorantul acestor coloane este, în ordine: 5, 6, 6. Acesta se
scade din coloana pe care se află.

Centre
Beneficiari У2 У4 У6 У8
X1 0 1 0 0
X2 1 0 1 0
X3 2 2 2 0
X4 3 2 1 0

În matricea de mai sus avem pe fiecare linie şi coloană cel puţin un „0”. Se trece la
încadrarea şi bararea zerourilor.

Centre
Beneficiari У2 У4 У6 У8
X1 0 1 0 0

X2 1 0 1 0

X3 2 2 2 0

X4 3 2 1 0

Linia a IV-a şi coloana a III-a nu conţin nici un „0” încadrat, se trece aşadar la marcarea
liniilor şi coloanelor.

S
Centre
Beneficiari У2 У4 У6 У8
X1 \
A
0 0 %
X2 \
A
T 0 1
X3 2 2 2 0 S
S
X4 3 2 1 > Î

Minorantul elementelor rămase netăiate este 1. El se adaugă elementelor dublu tăiate, se


scade din elementele netăiate, lăsând neschimbate elementele simplu tăiate.

5
Centre
Beneficiari У2 У4 У6 У8
Xl 0 1 0 1

X2 1 01 1 1

X3 1 1 1 0
X4 2 1 0
0

Fiecare linie şi coloană conţine câte un zero încadrat, deci soluţia găsită este optimă
(avem cuplaj maxim):
X1 □
У2 X2
□ У 4
X3 □ У
8 X4 □
У6

Ţinândyicont şi de soluţia determinată anterior, soluţia problemei este:


xi
У2
x1 y3
y4
x
1 y5
x1 y6
y7

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