Sunteți pe pagina 1din 64

Cercetari operationale

O.M. Gurzau

1Programare liniara

1.1 Algoritmul Simplex


(1947, G. Dantzig)
Problema:
Program liniar sub forma canonica:
Sa se afle maximul functiei f si valorile x1, ..., xn pentru care e atins maximul:
n
X
f (x1, ...xn) =
cixi + cn+1
i=1

cu conditiile:

(1.1.1)

n
X
i=1

ajixi bj , j = 1, m.

(1.1.2)
xi 0, i = 1, n.
n cele ce urmeaza conditiile (1.1.1) le vom rescrie sub forma:
n
X
(1.1.3)
yj = bj +
(aji) (xi) 0, j = 1, m.
i=1

- 2-

Solutia (x1 , ..., xn) se numeste solutia optima (program optim) daca:
f (x1, ..., xn) f (x1, ...xn) , (x1, ...xn) care verifica ineg.(1.1.1),(1.1.2).

1.2 Interpretare geometrica pentru doua variabile

Exemplul 2.1 Sa se afle minimul, respectiv maximul functiei f (x, y) = 3x + 4y cu


restrictiile:

x + 3y 3

x y 2
(1.2.1)
2x + y 4

x 0, y 0
Pentru rezolvare "se deseneaza" zona din plan care corespunde la inegalitatile
(1.2.1) si se determina dreapta paralela cu 3x + 4y = 0 cea mai departata, respectiv cea mai apropiata de origine care intersecteaza zona:
- 3-

2=

3x

+4

y-4

=0

x+3

y-3=
0

2
1

-2

-1

C
3x

+4

y-3

8/3

=0

B
1

-4=
+y

-1

2x

-3

x-y
+

Adunnd:

xy+2 = 0
2x + y 4 = 0
3x 2 = 0 : x = 2/3
y = x + 2 = 8/3

Exemplul 2.2 Sa se afle minimul, respectiv maximul functiei f (x, y) = 3x + 6y cu


restrictiile:

x + 2y 1

2x + y 4
(1.2.2)
x y 1

x 4y 13, 4x + y 23
- 4-

Pentru rezolvare se deseneaza zona din plan care corespunde la inegalitatile (1.2.2)
si se determina dreapta paralela cu 3x + 6y = 0 care intersecteaza axa Oy n cel mai
apropiat (departat) de origine si intersecteaza zona:
10

1=

+
x-y

-1

15

6y=

-3x+

3=0

1
x-4y+

x+

2y+

1=

4x-y+

-4=
+y

2x

23=0

-5

-10

1.2.1 Algoritmul simplex general


Algoritmul va consta din 2 faze:
1. Se determina o "solutie admisibila", adica (x1, ...xn) care verifica ineg. date.
2. Se "imbunatateste" solutia astfel gasita.
Pasul de baza este "pas Gauss-Jordan modificat".
La problema de optimizare liniara:

- 5-

Sa se afle maximul functiei f si valorile x1, ..., xn pentru care e atins maximul:
n
X
f (x1, ...xn) =
cixi + cn+1
i=1

cu conditiile:
(1.2.3)

n
X
i=1

(1.2.4)
atasam tabelul simplex:

ajixi bj , j = 1, m.
xi 0, i = 1, n.

x1 x2 xn 1
y1 = a11 a12 a1n b1
y2 = a21 a22 a2n b2
(1.2.5)
..
..
..
..
..
...
ym = am1 am2 amn bm
f = c1 c2 cn cn+1
Schimbam n acest tabel (x1) cu y1 :
ec 1:
n
X
y1 =
(a1i) xi + b1
i=1

a11 6= 0
- 6-

x1 =

(1.2.6)

y1 +

Linia 2 din tabelul modificat:

Pn

i=2 (a1i ) (xi )

1 a12
a11 a11

+ b1

a11
...

b1
a11

nlocuind x1 n expresiile y2, ..., ym avem:

y2 =

n
X

a2i (xi) + b2 =

i=1

...

Pn

X
n
y1 + i=2 (a1i) (xi) + b1
= a21
a2i (xi) + b2 =
+
a11
i=2
n
X
a21
a21b1 + a11b2
a21a1i + a2ia11
= (y1) +
(xi) +
=
a11
a11
a11
i=2

n
X
a21
a21
a21
= (y1) +
a1i (xi) + b2
b1
a2i
a11
a11
a11
i=2

- 7-

ym =

n
X

ami (xi) + bm =

i=1

X
n
y1 + ni=2 (a1i) (xi) + b1
= am1
ami (xi) + bm =
+
a11
i=2
n
X
am1
am1b1 + a11bm
am1a1i + amia11
=
(y1) +
(xi) +
a11
a11
a11
i=2
ak1
Obs. La linia k + 1 adun linia 2 nmultita cu .
a11
Linia 2 devine linia 2 mpartita la a11
Coloana 2 devine coloana 2 mpartita cu a11.
y1
x2

xn
1
a1n
b1
x1 = a111
....

a11
a11
a21
a21
a21
y2 = a11 a22 a11 a12 a2n a11 a1n b2 aa2111 b1
..
..
..
..
..
...
am1
am1
am1
ym = aam1
a

a
b

m2
12
mn
1n
m
a11
a11
a11 b1
11
f = ac111 c2 ac111 a12 cn ac111 a1n cn+1 ac111 b1

- 8-

Procednd la fel cu x2, x3, ..., xn si y2, ..., yn se ajunge la tabelul:


y1 y2 yn
1
x1 =
c11
c12 c1n
d1
x2 =
c21
c22 c2n
d2
..
..
..
..
..
...
xn = cn1
cn2 cnn
dn
(1.2.7)
yn+1 = cn+1,1 cn+1,2 cn+1,n dn+1
..
..
..
..
..
...
ym = cm1 cm2 cmn dm
f=
q1
q2 qn
Q
Acest tabel corespunde la urmatoarea problema de optimizare:
n
X
(1.2.8)
max f (y) =
qi (yi) + Q
i=1

cu conditiile:
(1.2.9)

yi =

n
X
j=1

cij (yj ) + di 0, i = n + 1, m

yi 0, i = 1, n
iar legatura cu variabilele initiale este data de:
n
X
xi =
cij (yj ) + di, i = 1, n
j=1

- 9-

Exemplul 2.1 Sa se elimine necunoscutele x1, x2 pentru problema:


max f (x1, x2) = 3x1 + 6x2
x1 + 2x2 + 1 0
2x1 + x2 4 0
x1 x2 + 1 0
x1 4x2 + 13 0
4x1 + x2 + 23 0.

Tabelul simplex corespunzator:

x1 x2 1
pivot

y1 =
y2 =
y3 =
y4 =
y5 =
f=

1 2 1
2 1 4
1 1
1
1 4 13
4 1 23
3 6 0
- 10-

x2
1
2
1
x1 =
=
2
1
1 = 1
pivot

2
2
2
y2 = 1 = 2 1 + 1 (2) = 3 4 + 1 1 = 6
y3 = 1
1 + 1
1 + 1
1 = 1
1 (2) = 3
1 1 = 0
1
1
y4 = 1
=
1
4
+

13
+

(2)
=
6
1
1
1 1 = 12

4
4
4
(2)
=
9
y5 = 1
= 4 1 + 1
23
+

1 1 = 27

3
3
3
(2) = 12 0 + 1
1=3
f = 1
= 3 6 + 1
y
y2
1
1

1
2
2
x1 = 1
= 1 + 23 (2) : 13
3
1 = 2(1/3) : 3
2 pivot
2
2
x2 =
1 = 2/3 : 3
1+ 1 (2) = 3/3/3 : 13
2
1
y3 = 1
=
1
+
(1)
(2)
:
1
1
+

6
1
1 (2) = 3 (1/3) : 1

1
y4 = 1
=
1
+
(2)
(2)
:
3
4
+

24
1
1 (2) = 6 (1/3) : 2

4
4
(2) = 9 (1/3) : 3 9
y5 = 1
= 4 + (3) (2) : 2 1 + 1

3
3
(2) = 12 (1/3) : 4 21
f = 1
= 3 + (4) (2) : 5 6 + 1
y1
1
1 = 1

- 11-

x1 =
x2 =
y3 =
y4 =
y5 =
f=

y1 y2 1
1
2

3
3
3
23 13 2 f = (5) (y1) + 4 (y2) 21
1 1 6
x1 = 13 (y1) 23 (y2) + 3
3 2 24 x2 = 23 (y1) + 13 (y2) 2
2 3
9
5 4 21

Definitia 2.1 {x1, x2, ..., xn} se numeste solutie bazica a problemei (1.2.8)-(1.2.9)
daca este solutie pentru sistemul de inegalitati (1.2.9) (solutie admisibila) si n din
expresiile {y1, y2, . . . , ym} sunt nule.
Definitia 2.2 Daca {y1, y2, . . . , ym} corespund la o solutie bazica si exista cel putin
n + 1 expresii nule, atunci solutia bazica se numeste degenerata, si nedegenerata n
caz contrar.
Importanta solutiilor bazice este data de urmatoarea teorema:
Teorema 2.1 Problema de programare liniara (1.2.8)-(1.2.9) are solutie optima daca
si numai daca are solutie optima bazica.
- 12-

(1.2.10)

y1 y2
yn+1 = cn+1,1 cn+1,2
..
..
..
ym = cm1 cm2
f=
q1
q2

yn
1
cn+1,n dn+1
..
..
...
cmn dm
qn
Q

Lema 2.1 Daca n tabelul (1.2.10) di 0, i = n + 1, m atunci o solutie bazica este


data de:
(1.2.11)
yi = 0, i = 1, n
yi = di, i = n + 1, m.
Demonstratie: Din tabelul (1.2.10) rezulta ca daca yi = 0, i = 1, n atunci yi =
di, i = n + 1, m si conform ipotezei di 0, i = n + 1, m rezulta ca (vezi definitia 2.1
) {y1, y2, . . . , ym} este solutie bazica.
Lema 2.2 Daca n tabelul (1.2.10) exista dr < 0 (n + 1 r m) si cri 0, i = 1, n
atunci nu exista {y1, y2, . . . , ym} care sa verifice inegalitatile (1.2.9).
Demonstratie: Presupunem ca exista {y1, y2, . . . , ym} care verifica (1.2.9). Atunci
n
X
yi 0, i = 1, n si din yr =
crj (yj ) + dr rezulta yr < 0, contradictie cu yr 0.
j=1

- 13-

Lema 2.3 Daca n tabelul (1.2.10) exista dr < 0 (n+1 r m) si exista 1 s n


asfel nct crs < 0 atunci efectund un pas Gauss Jordan modificat cu pivotul ci0s ales
dupa regula:

di0
di
(1.2.12)
0<
= min
>0
ci0s n+1im cis
(adica n tabelul (1.2.10) se schimba ys cu yi0 ) avem (notnd elementele noului tabel
cu accent) pentru r 6= i0 d0r > dr iar pentru i0 = r , yr este variabila bazica, deci
yr = 0 > dr .
Demonstratie: Conform ipotezei n coloana s exista cel putin un indice i astfel
nct cdisi > 0. Alegem i0 conform regulii (1.2.12). Daca i0 6= r atunci, conform GaussJordan :
di
d0r = dr 0 crs > dr .
ci0s
Teorema 2.2 Pentru orice problema de programare liniara dupa un numar finit de
pasi se ajunge la o solutie admisibila bazica sau se ajunge la concluzia ca problema
nu are solutie.
Demonstratie: Rezulta din cele trei leme precedente.
Teorema precedenta rezolva prima faza.
Pentru optimizare plecam tot de la tabelul (1.2.10) n care presupunem ca ultima
coloana are doar numere pozitive (adica de la o solutie bazica).
- 14-

Lema 2.4 Daca n (1.2.10) qi 0, i = 1, n atunci solutia optima este yi = 0, i = 1, n.


Pn
Demonstratie: Avem f = k=1 qk yk + Q Q pentru yk 0, k = 1, n,
egalitatea avnd loc doar pentru yk = 0, k = 1, n.
Lema 2.5 Daca exista qs < 0 , 1 s n si crs 0, n + 1 r m atunci
sup f (x1, ..., xn) = .
Demonstratie: Alegem ys = t > 0, yk = 0, k 6= s, k = 1, n avem yi =
cist + di 0, i = n + 1, m, t > 0. Dar f = qst + Q cnd t .
Lema 2.6 Daca exista qs < 0 , 1 s n si exista cis > 0, n + 1 i m atunci
alegnd un element pivot din coloana s dupa regula (1.2.12) se obtine efectund un
pas G-J modificat un nou tabel simplex (notnd elementele noului tabel cu accent) cu
Q0 > Q.
d

Demonstratie: Alegnd elementul pivot ca n enunt avem Q0 = cii0s qs + Q > Q.


0
Din cele trei leme rezulta:
Teorema 2.3 Oricare ar fi problema de progamare liniara cu solutii admisibile, dupa
un numar finit de pasi G-J modificati se obtine sau solutia optima sau concluzia ca
maximul este infinit.
- 15-

y3 =
Exemplul 2.2 Continuare la exemplul 2.1. y4 =
y5 =
f=
6

y3
pivot

y2

y1 y2 1
1 1 6
3 2 24 min{6/1, 24/3} =
2 3
9
5 4 21

y1 =
1/1/1
1/1
6/1
y4 =
3/1
2 + (3/1) (1) = 1
24 + (3/1) 6 = 6
y5 = (2) /1 = 2 3 + ( (2) /1) (1) = 1 9 + ( (2) /1) 6 = 21
f = (5) /1 = 5 4 + ( (5) /1) (1) = 1 21 + (5) /1 6 = 9
f = (5) (y1) + 4 (y2) 21
x1 = 13 (y1) 23 (y2) + 3
x2 = 23 (y1) + 13 (y2) 2
q1 = 5 < 0
d1
6 d2
24
=
;
=
c11
1 c21
3 aleg i0 = 1 : pivot:c11
- 16-

y3 y2 1
y3
y4
1
y1 = 1 1 6 y1 = 1 + 1 (3) = 2 1 6 + 1 6 = 12
pivot

pivot

y4 = 3 1 6 y2 =
3
1
6
y5 = 2
1 21 y5 = 2 + (1) (3) = 5 1 21 1 6 = 15
f = 5 1 9 f = 5 + 1 (3) = 2
1 9 + 1 6 = 15
fmax = 15
x1 = 13 (y1) 23 (y2) + 3 = 13 (12) 23 (6) + 3 = 3
x2 = 23 (y1) + 13 (y2) 2 = 23 (12) + 13 (6) 2 = 4
Remarca 2.1 La pas G-J modificat cu pivot crs se fac urmatoarele modificari: elementele din capul de tabel de pe coloana s si linia r se schimba intre ele, cu schimbare
de semn. (adica ys, yr yr , ys. elementele de pe coloana s se nlocuiesc cu
ele/pivot si cu semn schimbat. Elementele de pe linia pivot se mpart cu pivotul, iar
n locul pivotului se pune c1rs . Celelalte elemente din noul tabel se obtin din adunarea
la vechiul element a elementului de pe coloana corespunzatoare si linia pivotului din
vechiul tabel * elementul de pe linia lui si coloana pivotului din noul tabel.
Exemplu:
Problema e echivalenta cu:

max {x1 + x2 + x3}


- 17-

- 18-

cu conditiile:

12x1 28x2 7x3 84


8x1 5x2 10x3 40
20x1 7x2 6x3 42
xi 0, i = 1, 3.
Tabelul simplex corespunzator este:
x1 x2 x3 1
y1 12 28 7 84
y2 8 5 10 40
y3 20 7 6 42
f 1 1 1 0
max {12/84, 28/84, 7/84, 8/40, 5/40, 10/40, 20/42, 7/42, 6/42} = 7/84
: 10
21 deci pivotul e :
x1 x2 x3 1
y1 12 28 7 84
y2 8 5 10 40
pivot

y3 20 7 6 42
f 1 1 1 0
aplicnd pas G-J cu acest pivot: La pas G-J modificat cu pivot crs se fac urmatoarele
modificari: elementele din capul de tabel de pe coloana s si linia r se schimba intre
ele, cu schimbare de semn. (adica ys, yr yr , ys. elementele de pe coloana s
- 19-

se nlocuiesc cu ele/pivot si cu semn schimbat. Elementele de pe linia pivot se mpart


cu pivotul, iar n locul pivotului se pune c1rs . Celelalte elemente din noul tabel se obtin
din adunarea la vechiul element a elementului de pe coloana corespunzatoare si linia
pivotului din vechiul tabel * elementul de pe linia lui si coloana pivotului din noul
tabel.
x1
x2
y1
1
pivot

12/7
28/7
8 + (12) (10/7) 5 + (28) (10/7)
y2
= 64
= 35
7
20 + (12) (6/7) 7 + (28) (6/7)
y3
= 68
= 17
7
1 + (12) (1/7) 1 + (28) (1/7)
f
= 57
=3
Am ajuns la tabelul simplex:
x1 x2 y1
1
x3

84/7
40 + (84) (10/7)
10/7
= 80
42 + (84) (6/7)
6/7
= 30
0 + (84) (1/7)
1/7
= 12
1/7

pivot

x3 12/7 28/7
35
y2 64
7
17
y3 68
7
3
f 57

1/7
10/7
6/7
1/7

- 20-

84/7
80
30
12

Deoarece coloana lui 1 este formata din numere pozitive o solutie bazica va fi:
x1 = x2 = 0, y1 = 0
12x1 28x2 7x3 = 84, x3 = 12
n coloana coeficientilor lui f avem un coeficient negativ 17 . Deoarece toti coeficientii
de pe coloana lui sunt negativi, rezulta ca max {x1 + x2 + x3} este +.
Altfel:
x1 x2 x3 1
y1 = 12 28 7 84
40 84 42
y2 = 8 5 10 40 min 5 , 28 , 7 = 3 deci pivotul este (28)
y3 = 20 7 6 42
f 1 = 1 1 1 0
x1
y1 x3
1
12
3
1
1
84
x2 =
=
3
28 7
28
4
28 =

5
41
5
35
5
=

y2 = 8 + (12) 28

40
+
(84)
7
28
4
28 = 25

7
7
17
7
=
17
y3 = 20 + (12) 28

42
+
(84)
28
4
28 = 21

1
1
1
= 47 28
=3
f 1 = 1 + (12) 28
34
0 + (84) 28

- 21-

x1 y1 x3

x2 = 37
y2 = 41
7

1
28
5
28
pivot
7
28
1
28

1
4
35
4

1
3
n
o
25 min 25 , 21 = 84 deci pivotul e 7
5
7
28
28

28

17
4 21
34 3
x1
y3
x3
1
1
1 20
1
3
1
6
28
x2 = 7 + (17) 7 = 7 7 = 7 7
3 + (21) 7 = 6
28
5
5 44 28
5
41
5
40
y2 = 7 + (17) 7 = 7
= 7 7 25 + (21) 7 = 10
7

y3 = 17
f 1 = 47

28

(17) / (7/28) = 68 28
17
71 = 4

1
1
28
f 1 = 47 + (17) 17 = 13
7 7 = 7 7
y1 =

x1 y3 x3
1
6
x2 = 20

7
7
7
y2 = 44
7
y1 = 68
13
f1
7

1
6

28

pivot
57

40
7 10
4 17 84
17 17 33
7

- 22-

(21) / (7/28) = 84
1 33
3 + (12) 7 = 7

x1
y2
x3
1
44
8
1
1
x2 = 20
+
(1/5)
=

/
(5/7)
=

2
6 + (10) (1/5) = 8
7
7
5
7
5
pivot

5
5
44
5
44
7
5
y3 =
1/ 7 : 5
8
10/ 7 = 14
7/
7 =

44
164
28
28
=
y1 = 68 + 7 28
4/
(5/7)
=

49
84
+
(10)

5
5
5
5 = 140

13
44
33
1
47
15 = 35 17 / (5/7) = 15 1
f1
7 + 7
7 + (10) 5 = 7
x1 y2 x3 1
x2 = 85 15 2
8
7
y3 = 44

8 14
5
5
28
y1 = 164

49 140
5
5
3
47
f1
15 1
5
7
solutie bazica: x1 = 0, x2 = 8, x3 = 0, y1 = 140, y2 = 0, y3 = 14.
7
pivotul: min {28/68, 10/ (20/7) , 10/ (44/7)} = 17
deci e 68
x2
y3 x3
1
1
x1 =
1/68 = 68
4 17
28

5
3
1
5
150
=
y2 = 20
10 + 28 119
7 /68 = 119
119
7
17
126
44
11
41
51
11
y1 = 7 /68 = 119 119 7 10 + 28 119 = 17
13
4
17
13
55
=

f 1 = 13
/68
=
4
+
28
7
476
119
28
476
17
Exemplul 2.3

- 23-

- 24-

x1 x2 x3

pivot

y1 = 2
y2 = 2
f 1 = 1
x1
x2 = 2
x3 = 0
f1 = 3
x1
x2 = 2

1
1
2

2 8
5 12 y2 =
3 0 f 1 =
y1
1 + (1) (2/3) = 53
1/ (3) = 13
2 + (1) (1/3) = 73
y1 y2 1
53 23 16
3
pivot
1
3
73

0
13 43
1
44
3
3
3
x1 y
1

53 / 13 = 5
x2 = 2

x3 =
f1 =

x3 =
f1 =

0
3

x1 y1 x3 1
x2 = 2 1 2
8

7
3

pivot
1
1/
3

: 3
/ 13 = 7

pivot

0
3

1 3
2 1
y2
2/ (3) = 23
1
1
=

3
3
1/ (3) = 13

y2

2
1
+
5

3
3 = 1
13 /(1/3)
= 1

1
1
3 + 7 3 = 2
- 25-

4
16
1
8 + (4) (2/3) = 16
3
4
4/ (3) = 3
16 + (4) (1/3) = 44
3

1
16
3 + 5 4/3 = 12
4
3/

(1/3) = 4
44
3 + 7 4/3 = 24

1.3 Problema de transport


Se dau m centre de productie si n centre de desfacere. Se noteaza cu cij costul transportului unei unitati de produs de la c.p. i la c. d. j , cu xij cantitatea de produs
transportata de la c.p. i la c. d. j , cu ai cantitatea produsa la c.p. i, cu bj cantitatea
necesara la c.d. j. Se cere sa se determine xij astfel nct costul total al transportului
sa fie minim.

(1.3.1)

min

j=n
i=m
X

cij xij = f (X)

i=1
j=1

cu conditiile:
(1.3.2)

Pn
xij = ai, i = 1, m
Pj=1
m
, j = 1, n
i=1 xij = bj
Pi=m,j=n
Pm
Pn
xij
i=1 ai =
j=1 bj
i,j=1
xij 0

Exemplul 3.1
Exemplul 3.2
Exemplul 3.3

- 26-

- 27-

Remarca 3.1 Conditiile (1.3.2) sunt un sistem de n+m1 ecuatii cu nm necunoscute,


care are o infinitate de solutii.
Primul pas va consta n determinarea unei solutii de pornire.
Definitia 3.1 O solutie a (1.3.2) se numeste solutie bazica daca are cel mult n + m 1
variabile nenule; nedegenerata daca are exact n + m 1 variabile nenule, degenerata
n caz contrar.
1.3.1 Metoda coltului de N-V.
(de aflare a unei solutii bazice)

x11 ...
x11 ... x1n
... . . .
.
X = ... . . ... ; X =
xm1 ...
xm1 ... xmn
b1 ...
x11 = min{a1, b1}. La ex. 1 x11 = 100.
- 28-

x1n
...
xmn
bn

a1
...

am
0

Daca x11 = a1 atunci x1j = 0, j = 2, n. b1 := b1 a1. "Tai" linia 1 din X .


Daca x11 = b1 atunci xi1 = 0, i = 2, m.a1 := a1 b1. Tai coloana 1 din X .
Continuam pna eliminam toate liniile si coloanele lui X.
Pe ex.1: x11 = 100, x12 = x13 =
x14 = 0. b1 := 125 100 = 25.
x21 x22 x23 x24 180
X = x31 x32 x33 x34 220
25 135 105 135 500
x21 =
25, x31 = 0, 180 := 180
25
x22 x23 x24 155
X = x32 x33 x34 220
135 105 135 500
135, x32 = 0; 155
x22 =
:= 155 135 = 20
x23 x24 20
X = x33 x34 220
105 135 500
x23 =20; x24 = 0; 105:= 105 20 = 85.
x33 x34 220
X=
x33 = 85; x34 = 135
85 135 500
2 100 0 3
0
4 25 0 1 135
1
0 0 4
0
0 125 0 0 135

0
0
0
0

4
0
2 20
3 85
0 105

0
0
0
0

- 29-

1
0 0
5
0 0
4 135 0
0 135 0

0 100
0 180
0 220
0 1270

0
0
0
0

Cost:
100 2 + 25 4 + 135 1 + 20 2 + 85 3 + 135 4 = 1270
Obs. O alta metoda este metoda costului minim: se alege cantitatea maxima n
celula cu cost minim, si apoi se taie linia sau coloana respectiva.

1.4 Optimizarea solutiei bazice


1.4.1 Metoda potentialelor
Definitia 4.1 Avnd o solutie bazica X se numeste lant de celule un sir de celule cu
proprietatile ca nu exista 3 celule pe aceeasi linie sau coloana si 2 celule succesive
sunt n aceeasi linie sau coloana si celulele au valori nenule.
Exemplul 4.1 x11, x21, x22.
Definitia 4.2 Se numeste ciclu un lant la care indicele de linie sau de coloana de la
primul el. si ultimul coincid.
Exemplul 4.2 x11, x21, x22, x12
- 30-

Definitia 4.3 O solutie bazica se numeste aciclica daca nu exista un ciclu cu el. nenule.
Ideea : Solutia optima se cauta printre sol. bazice aciclice.
Definitia 4.4 Solutia bazica X se numeste sol. potentiala daca exista numerele ui, vj
astfel nct:
ui + vj cij

egalitatea avnd loc pentru indicii i, j pentru care xij > 0. i = 1, m, j = 1, n


Teorema 4.1 Solutia bazica X este sol. optima daca si numai daca este potentiala.
Demonstratie: dem. ca dacaP
X este potentiala atunci X este sol. optima. Fie
n
x0ij = ai, i = 1, m
j=1
Pm 0
, j = 1, n
?
Pi=m,j=n
i=1 xij = bj
0

0
P
P
P
X o solutie a sistemului
m
n
i=m,j=n
i=1,j=1 cij xij
a
=
b
x
ij
i=1 i
j=1 j
i,j=1

x0ij 0

Pi=m,j=n
i=1,j=1 cij xij
Pi=m,j=n
Pi=m,j=n
Pi=m,j=n
Pi=m,j=n
0
0
0
0
c
x

(u
+
v
)
x
=
u
x
+
v
x
ij
i
j
i
j
ij
ij
ij
i=1,j=1
i=1,j=1
i=1,j=1
i=1,j=1
P ij P
P
Pm
P
P
n
n
m
m
n
0
0
= i=1 ui
x
v
x
=
u
a
+
+
j
i
i
j=1 ij
j=1
i=1 ij
i=1
j=1 vj bj =
Pm
Pn
Pm
Pn
Pi=m,j=n
!
= i=1 ui j=1 xij + j=1 vj i=1 xij = i=1,j=1 (ui + vj ) xij =
- 31-

Pi=m,j=n
i=1,j=1

(cij ) xij = f (X) .

Fie X o sol. bazica. Determinam ui si vj din:


ui + vj = cij
pentru i, j pentru care xij > 0.(n + m 1 ec., n + m nec..u1 = 0.) calculam
ij = cij + ui + vj
daca ij < 0 atunci sol. X este optima. Daca exista i, j astfel inct ij > 0 atunci X
nu e optima. aleg i0j0 :
max ij = i0j0
Se formeaza un ciclu pornind de la i0j0 si elem. nenule din X. Se numeroteaza el.
ciclului pornind de la xi0j0 n sens trig. Se alege cel mai mic element cu numar par
xi0j 0 = e. Se construieste o noua solutie bazica scaznd din elementele cu numar par
pe e si adunnd pe e la cele cu nr. impar. Rezulta o noua sol. bazica X.
Exemplul 4.3

O sol. bazica x11 = 100, x21 = 25, x22 = 135, x23 = 20; x33 = 85; x34 = 135
- 32-

u1 + v1 = 2, u1 = 0
u2 + v1 = 4
u2 + v2 = 1
u2 + v3 = 2
u3 + v3 = 3
u3 + v4 = 4
v1 = 2, u2 = 2, v2 = 1, v3 = 0, u3 = 3, v4 = 1.

12 = 3 + 0 1 = 4; 13 = 4 + 0 + 0 = 4; 14 = 1 + 0 + 1 = 0; 24 =
5 + 2 + 1 = 2; 31 = 1 + 3 + 2 = 4?;
32 = 4 + 3 1 = 2.
= 31, e = 25
i0 j0

100 0 0 0
X= 254 135 203 0
1
2
0
85
135
0

100 0 0 0
X = 0 135 45 0
25 0 60 135
- 33-

2 100 0 3
0 4 4
0 4 1
0
0 0 100
4 25 0 1 135
0 2 20
0 5
0 2 0 180
1
0 4 4
0 2 3 85
0 4 135
0 0 220
0 125 2 0 135 1 0 105
0 0 135
1 0 1270

2 100 0 3
0
4 25 0 1 135
1
0 0 4
0
0 125 0 0 135
2 100 0 3
0
4
0 0 1 135
1 25 0 4
0
0 125 0 0 135

0
0
0
0
0
0
0
0

4
0
2 20
3 85
0 105

0
0
0
0

4
0
2 45
3 60
0 105

0
0
0
0

1
0 0
5
0 0
4 135 0
0 135 0
1
0 0
5
0 0
4 135 0
0 135 0

0 100
0 180
0 220
0 1270
0 100
0 180
0 220
0 1170

0
2
3
0

0
0
0
0
0
0
0
0

v1 = 0, u1 + v1 = 2
u2 + v2 = 1; u2 + v3 = 2
u3 + v1 = 1; u3 + v3 = 3; u3 + v4 = 4
2 100
0 3
0
0 4
0
4
0 4 1 135
0 2 45
1 25
0 4
0 2 3 60
0 125
2 0 135
3 0 105

- 34-

0
0
0
4

1
0
4 0 100
0
5
0 2 0 180 2
4 135
0 0 220 1
0 135
5 0 1170
0

2 100 0 3
0
4
0 0 1 135
1 25 0 4
0
0 125 0 0 135

0
0
0
0

4
0
2 45
3 60
0 105

0
0
0
0

0 100
0 180
0 220
0 1170

0
0
0
0

2
0 0
4
0 0
1 125 0
0 125 0

3
0 0 4
0
1 135 0 2 45
4
0 0 3 60
0 135 0 0 105

1 100 0 0 100
5
0 0 0 180
4 35 0 0 220
0 135 0 0 770

0
0
0
0

2
0 4
4
0 4
1 125
0
0 125 2

3
0 4 4
0 4 1 100
0 0 100
1 135
0 2 45
0 5
0 2 0 180
4
0 2 3 60
0 4 35
0 0 220
0 135 1 0 105
0 0 135
1 0 770

0
2
3
0

- 35-

0
0
0
0

1
0 0
5
0 0
4 135 0
0 135 0

2Grafe
2.1 Grafe neorientate
Definitia 1.1 Se numeste graf neorientat un cuplu G = (V, E) unde V este o multime
finita de vrfuri, iar E o multime de perechi neordonate de el. din V numite muchii.
Remarca 1.1 Vom nota vrfurile cu vi sau cu i, iar muchiile cu ej sau cu (vi, vj ) sau
(i, j) .
Exemplul 1.1 Reteaua de drumuri dintr-o tara, vrfurile sunt localitatile, iar muchiile
sunt drumurile ntre localitati.
Definitia 1.2 Daca G = (V, E) este un graf atunci nr. el. lui V se numeste ordinul
grafului, iar nr. el. lui E dimensiunea grafului G.
Definitia 1.3 O muchie (i, i) se numeste bucla.
Definitia 1.4 2 muchii sunt adiacente daca au un vrf comun.
- 36-

Definitia 1.5 O muchie este incidenta cu un vrf daca vrful face parte din perechea
care def. muchia.
Definitia 1.6 2 vrfuri sunt adiacente daca exista o muchie formata din perechea celor
2 vrfuri.
2.1.1 Modalitati de reprezentare a unui graf
1. Metoda grafica: vrfurile sunt puncte, iar muchiile sunt arce de curba care unesc
cele 2 vrfuri.
2. Matricea de adiacenta : daca G = (V, E) este un graf de ordin n se ataseaza o
matrice n n, numita matrice de adiacenta , definita de:
A = [aij ] ,i,j=1,n

1, daca exista muchie de la vi la vj , i 6= j


0, daca nu exista muchie de la vi la vj
aij =

2, daca exista bucla (vi, vi) , i = j


3. Matricea de incidenta : daca G = (V, E) este un graf de ordin n si de dimensiune
m, se ataseaza o matrice n m, numita matrice de incidenta , definita de:
aij = 1 daca muchia ej este incidenta cu vrful vi,
aij = 0 in caz contrar.
4. Lista vecinilor: pentru fiecare vrf vi se genereaza o lista care contine vrfurile care
- 37-

mpreuna cu vi formeaza o muchie din E.

Exemplul 1.2
5

V = {1, 2, 3, 4, 5}, E = {(1, 2) , (2, 3) , (3, 4) , (2, 4) , (3, 5) , (5, 1) , (3, 3)} Matricea
de adiacenta :

0 1 0 0 1
1 0 1 1 0

A=0 1 2 1 1

0 1 1 0 0
1 0 1 0 0
- 38-

Matricea de incidenta

1
0

A=
0
0
0

0
1
1
0
0

0
0
1
1
0

0
1
0
1
0

0
0
1
0
1

1
0
0
0
1

0
0

0
0

Definitia 1.7 Un graf se numeste simplu daca n-are bucle.


Definitia 1.8 Se numeste lant ntr-un graf o succcesiune de muchii adiacente. Numarul
muchiilor din lant se numeste lungimea lantului.
Teorema 1.1 Daca A este matricea de adiacenta a unui graf simplu atunci daca elementul de pe linia i si coloana j din Ap are valorea p atunci exista un lant de la vrful
vi la vrful vj de lungime p.
Definitia 1.9 Se numeste gradul unui vrf numarul muchiilor incidente cu vrful respectiv.
Exemplul 1.3 grad(3) = 5.

- 39-

Teorema 1.2 Daca dimensiunea grafului este m atunci suma gradelor vrfurilor este
2m.
Demonstratie: Fiecare muchie contribuie cu 2 la gradele vrfurilor.
Definitia 1.10 Se numeste ciclu ntr-un graf un lant la care ultimul vrf coincide cu
primul.(!!).
Definitia 1.11 Se numeste lant (ciclu) simplu un lant (ciclu) care nu contine de doua
ori aceeasi muchie.
Definitia 1.12 Se numeste lant (ciclu) eulerian un lant (ciclu) simplu care contine
toate muchiile.
Definitia 1.13 Se numeste lant (ciclu) hamiltonian un lant (ciclu) care contine toate
vrfurile o singura data.
Exemplul 1.4 Este posibil ca un grup de 11 persoane fiecare sa strnga mna la exact
5 persoane?NU: suma gradelor este 55.
- 40-

Exemplul 1.5 Problema podurilor din Knigsberg: sa se gaseasca un traseu care sa


permita trecerea o singura data pe fiecare pod si sa se ajunga la punctul de plecare.

Atasam un "graf" Vrfuri: 1, (sud), 2(est), 3(nord), 4(insula) ; Muchii (1, 2) , (1, 4) , (1, 4), (2,
(2, 3), (3, 4), (3, 4).Gradele vrfurilor: 3, 3, 3, 5.
Teorema 1.3 Intr-un graf exista un ciclu eulerian daca si numai daca toate gradele
vrfurilor sunt pare.
Teorema 1.4 Intr-un graf exista un lant eulerian daca si numai daca toate gradele
vrfurilor sunt pare cu exceptia a exact doua.
- 41-

Exemplul 1.6 Exista un graf simplu cu 13 vrfuri, 31 muchii, 4 vrfuri de grad 1 si 7


vrfuri de grad 4? Total grade vrfuri:231 = 62.T otal grade 2 vrfuri: 62428 =
30. Grad minim la un vrf e 15 > 12. NU.
Exemplul 1.7 Sa se construiasca un graf cu 5 vrfuri, cu gradele vrfurilor: 2, 3, 5, 2, 2.
5

2.2 Algoritmi
2.2.1 Definitii si notatii
Definitia 2.1 G = (V, E) graf, se numeste subgraf al lui G graful G1 = (V1, E1) cu
- 42-

V1 V, E1 E.
Definitia 2.2 Graful G = (V, E) se numeste conex daca ntre oricare doua vrfuri
exista un lant.
Definitia 2.3 Un subgraf al unui graf se numeste arbore daca este simplu, conex si
fara cicluri.
Definitia 2.4 Se numeste arbore de acoperire a unui graf conex un arbore care
contine toate vrfurile.
Teorema 2.1 Daca T este este arbore de acoperire pentru graful G de ordin n atunci
T este un subgraf conex, simplu, fara cicluri si de dimensiune n 1 si reciproc.
Definitia 2.5 Se numeste frunza ntr-un arbore un vrf de grad 1.
Definitia 2.6 Daca G1 este subgraf al grafului G se numeste muchie frontiera o
muchie din G care are un vrf n V1 si unul n V \V1.
- 43-

2.2.2 Algoritmi de generare arbore de acoperire


2.2.1 Cautare n adncime
Ideea: se eticheteaza vrfurile cu eticheta notata df _num
ar si se pleaca de la ultimul
vrf etichetat.
notatii: cu T se noteaza arborele, cu FT multimea muchiilor frontiera ale lui T .
Date de intrare n algoritm: un graf G conex si un vrf r.
Date de ie
sire din algoritm: un arbore de acoperire T si o etichetare
data de df _num
ar.
Ini
tializ
ari: T = ({r}, ), df _num
ar(r) := [0], i := 1 (i este un contor
de numarare).
Pasul de baz
a al algoritmului: ct timp T nu e arbore de acoperire
( i < n ):
1. Se determina FT ;
ar(x) maxim;
2. Se alege muchia frontiera l = {x, y} care are un vrf x cu df _num
3. Se adauga la T vrful y si muchia l ;
ar(y) := [i]; i := i + 1.
4. df _num
5. daca i < n se trece la 1.
2.2.2 Cautare n latime
Idee: se eticheteaza vrfurile cu eticheta notata et si se pleaca de la vrful cu eticheta
- 44-

cea mai mica posibila.


notatii: cu T se noteaza arborele, cu FT multimea muchiilor frontiera ale lui T .
Date de intrare n algoritm: un graf G conex si un vrf r.
Date de ie
sire din algoritm: un arbore de acoperire T si o etichetare
data de et.
Ini
tializ
ari: T = ({r}, ), et(r) := [0], i := 1 (i este un contor de
numarare).
Pasul de baz
a al algoritmului: ct timp T nu arbore de acoperire:
1. Se actualizeaza FT ;
2. Se alege muchia frontiera l = {x, y} care are un vrf x cu et(x) minim;
3. Se adauga la T vrful y si muchia l ;
4. et(y) := [i]; i := i + 1
Exemplu: Sa se determine un arbore de acoperire utiliznd cei doi algoritmi, pentru urmatorul graf:

- 45-

2;

Rezolvare: T = {{a} , } ; df _num


ar(a) := [0], i := 1
FT = {[ab] , [af ]} ;aleg l = [ab] , T = {{a, b} , {[ab]}} ; df _numar(b) := 1; i =

FT = {[af ] , [bf ] , [bg] , [bc]} aleg l = [bc] , T = {{a, b, c} , {[ab] , [bc]}} ; df _numar(c) :=
2; i = 3;
FT = {[af ] , [bf ] , [bg] , [cd] , [ce] , [cg]} ; aleg l = [cd]
T = {{a, b, c, d} , {[ab] , [bc] , [cd]}} ; df _numar(d) := 3; i = 4
FT = {[af ] , [bf ] , [bg] , [ce] , [cg] , [de]} ; aleg l = [de]
T = {{a, b, c, d, e} , {[ab] , [bc] , [cd] , [de]}} ; df _numar(e) := 4; i = 5
FT = {[af ] , [bf ] , [bg] , [cg] , [eg] , [ef ]} ; aleg l = [ef ]
T = {{a, b, c, d, e, f } , {[ab] , [bc] , [cd] , [de] , [ef ]}} ; df _numar(f ) := 5; i = 6
FT = {[bg] , [cg] , [eg] , [f g]} ; aleg l = [f g]
T = {{a, b, c, d, e, f, g} , {[ab] , [bc] , [cd] , [de] , [ef ] , [f g]}} ; df _numar(g) :=
- 46-

6; i = 7 > 6 gata.
Am obtinut:

b(1)
a(0)

c(2)

g(6)
f(5)

d(3)

e(4)

Cautare n latime:
T = {{a} , } ; et(a) := [0], i := 1
FT = {[ab] , [af ]} ;aleg l = [ab] , T = {{a, b} , {[ab]}} ;
et(b) := 1; i = 2;
FT = {[af ] , [bf ] , [bg] , [bc]} ; aleg l = [af ]; T = {{a, b, f } , {[ab] , [af ]}} ;
et(f ) := 2; i = 3;
FT = {[bc] , [bg] , [f g] , [f e]} ; aleg: l = [bc] ; T = {{a, b, f, c} , {[ab] , [af ] , [bc]}} ;
et(c) := 3; i = 4;
FT = {[bg] , [f g] , [f e] , [cd] , [ce] , [cg]} ; aleg l = [bg]
T = {{a, b, f, c, g} , {[ab] , [af ] , [bc] , [bg]}} ;
et(g) := 4; i = 5;
FT = {[f e] , [ce] , [cd] , [ge]} ; aleg l = [f e]
T = {{a, b, f, c, g, e} , {[ab] , [af ] , [bc] , [bg] , [f e]}} ;
- 47-

et(e) := 5; i = 6;
FT = {[ed] , [cd]} ; aleg: l = [cd]
T = {{a, b, f, c, g, e, d} , {[ab] , [af ] , [bc] , [bg] , [f e] , [cd]}} ;
et(d) := 6; i = 7 > 6; gata:

b(1)
a(0)

c(3)

g(4)
f(2)

d(6)

e(5)

2.2.3 Algoritmi de generare arbore de lungime minima n grafe ponderate


Definitia 2.7 Se numeste graf ponderat un graf G = (V, E) , pentru care s-a definit o
functie (pondere) : E R+, care ataseaza fiecarei muchii e E ponderea (e) .
2.3.1 Algoritmul lui Prim
Date de intrare n algoritm: un graf G conex cu ponderi si un vrf r.
Date de ie
sire din algoritm: un arbore de acoperire T de cea mai
mica pondere si o etichetare a vrfurilor data de et.
Ini
tializ
ari: T = ({r}, ), et(r) := [0], i := 1 (i este un contor de
numarare).
- 48-

Pasul de baz
a al algoritmului: ct timp T nu e arbore de acoperire:
1. Se actualizeaza FT ;
2. Se alege muchia frontiera l = {x, y} cu ponderea cea mai mica (x T );
3. Se adauga la T vrful y si muchia l ;
4. et(y) := [i]; i := i + 1.
Teorema 2.2 Arborele aflat cu algoritmul lui Prim este arbore de acoperire de pondere (lungime) minima.
Exemple: Sa se afle prin algoritmul de mai sus arbori de pondere minima n grafele
de mai jos:

Rezolvare: T = {{a}, } ; et (a) = 0; i = 1;


FT = {[ab] , [ae] , [ad] , [ac]} aleg: l = [ad]
- 49-

T = {{a, d}, [ad]} , et (d) = 1 (i) , i = 2;


FT = {[ab] , [ae] , [ac] , [dc] , [de] , [db]} ; aleg: l = [db] ;
T = {{a, d, b}, {[ad] , [db]} , et (b) = 2 (i) , i = 3;
FT = {[ae] 4, [ac] 6, [bc] 6, [cd] 7, [de] 5} ; aleg: l = [ae] ;
T = {{a, d, b, e}, {[ad] , [db] , [ae]} , et (e) = 3 (i) , i = 4;
FT = {[ac] 6, [dc] 7, [bc] 6, } ; aleg l = [ac]
T = {{a, d, b, e, c}, {[ad] , [db] , [ae] , [ac]} , et (c) = 4 (i) , i = 5 gata:
a(0)
6
4 1
e(3)

b(2)

2
c(4)
d(1)

Pentru graful din dreapta:

T = {{b}, } ; et (b) = 0; i = 1;

- 50-

FT = {[ba] 7, [be] 8, [bd] 9, [bc] 6} aleg: l = [bc]


T = {{b, c}, [bc]} ; et (c) = 1; i = 2;
FT = {[ba] 7, [be] 8, [bd] 9, [ca] 5, [ce] 6, [cd] 7} aleg: l = [ca]
T = {{b, c, a}, {[bc] , [ca]}} ; et (a) = 2; i = 3;
FT = {[be] 8, [bd] 9, [ce] 6, [cd] 7, [ae] 9, [ad] 7} aleg: l = [ce]
T = {{b, c, a, e}, {[bc] , [ca] , [ce]}} ; et (e) = 3; i = 4;
FT = {[bd] 9, [cd] 7, [ad] 7, [ed] 9} aleg: l = [cd]
T = {{b, c, a, e, d}, {[bc] , [ca] , [ce] , [cd]}} ; et (d) = 4; i = 5 : gata. Desen:
LPSD.
2.3.2 Algoritmul lui Dijsktra
notatii: L (i, j) cel mai scurt lant ntre nodurile i si j; distanta ntre nodurile i si j :
d (i, j) = suma ponderilor muchiilor din L (i, j) .
Date de intrare n algoritm: un graf G conex cu ponderi p si un vrf
r.
Date de ie
sire din algoritm: un arbore de acoperire T si distantele
d (r, x) .
Ini
tializ
ari: T = ({r}, ), et(r) = 0; d(r) := 0, i := 1 (i este un contor
de numarare).
Pasul de baz
a al algoritmului: ct timp T nu e arbore de acoperire:
1. Se actualizeaza FT ;
- 51-

2. Se alege muchia frontiera l = {x, y} cu proprietatea (x T ) ca d (r, x) + p (l) e


minima;Criteriu suplimentar: daca 2 muchii realizeaza minimul, se alege cea care
are vrful din T cu eticheta cea mai mica.
3. Se adauga la T vrful y si muchia l ;
4. et(y) := [i]; i := i + 1, d (r, i) = d (r, x) + p (l)
Exemple: Sa se afle cu algoritmul lui Dijsktra arborele T in grafele de mai jos,
pornind de la nodurile a, respectiv b:

Rezolvare T = {{a} , } , d (a, a) = 0, et (a) = 0, i = 1


FT = {[ab] , [ae] , [ad] , [ac]} aleg: l = [ad]
T = {{a, d}, [ad]} , et (d) = 1 (i) , i = 2; d (a, d) = 1 = 0 + lung (ad)
FT = {[ab] , [ae] , [ac] , [dc] , [de] , [db]} ;
d(a, a) + lung (ab) = 3
d(a, a) + lung (ae) = 4
d(a, a) + lung (ac) = 6
d(a, d) + lung (dc) = 8
- 52-

d(a, d) + lung (de) = 6


d(a, d) + lung (db) = 7
aleg: l = [ab] ;
T = {{a, d, b}, {[ad] , [ab]} , et (b) = 2 (i) , i = 3; d (a, 2 (b)) = 3
FT = {[ac] , [ae] , [bc] , [de] , [dc]}
d(a, a) + lung (ac) = 6
d(a, a) + lung (ae) = 4
d(a, 2 (b)) + lung (bc) = 9
d(a, 1 (d)) + lung (de) = 6
d(a, 1 (d)) + lung (dc) = 8
aleg l = [ae]
T = {{a, d, b, e} , {[ad] , [ab] , [ae]}} , et (e) = 3, i = 4;
d (a, 3 (e)) = 4;
FT = {[ac] , [bc] , [dc]}
d(a, a) + lung (ac) = 6
d(a, 2 (b)) + lung (bc) = 9
d(a, 1 (d)) + lung (dc) = 8
aleg l = [ac]
T = {{a, d, b, e, c} , {[ad] , [ab] , [ae] , [ac]}} , et (c) = 4; d (a, 4 (e)) = 6 gata:
- 53-

a(0) 3
6
4 1
e(3)

b(2)
c(4)
d(1)

Rezolvare T = {{b} , } , d (b, b) = 0, et (b) = 0, i = 1


FT = {[ab] , [bd] , [bc]}
d (b, b) + lung ([ab]) = 3
d (b, b) + lung ([bd]) = 2
d (b, b) + lung ([bc]) = 6
aleg l = [bd] , T = {{b, d} , {[bd]}} , et (d) = 1; i = 2; d (b, d) = 2
FT = {[ab] , [bc], [da] , [dc] , [de]}
d (b, b) + lung ([ab]) = 3
- 54-

d (b, b) + lung ([bc]) = 6


d (b, d) + lung ([ad]) = 3
d (b, d) + lung ([cd]) = 9
d (b, d) + lung ([ed]) = 7
Criteriu suplimentar: daca 2 muchii realizeaza minimul, se alege cea care are
vrful din T cu eticheta cea mai mica.
l = [ab] , T = {{b, d, a} , {[bd] , [ab]}} , et (a) = 2; i = 3; d (b, a) = 3
FT = {[bc], [dc] , [de] , [ae] , [ac]}
d (b, b) + lung ([bc]) = 6
d (b, d) + lung ([dc]) = 9
d (b, d) + lung ([de]) = 7
d (b, a) + lung ([ae]) = 3 + 4 = 7
d (b, a) + lung ([ac]) = 3 + 6 = 9
l = [bc] , T = {{b, d, a, c} , {[bd] , [ab] , [bc]}} , et (c) = 3; i = 4; d (b, c) = 6
FT = {[ae] , [de]}
d (b, a) + lung ([ae]) = 3 + 4 = 7
d (b, d) + lung ([de]) = 2 + 5 = 7
l = [de] , T = {{b, d, a, c, e} , {[bd] , [ab] , [bc] , [de]}} , et (e) = 4; d (b, e) = 7

- 55-

2.3 Problema comis-voiajorului (sales-man)


Fie un graf G = (V, E) complet, cu ponderi. Problema comis-voiajorului este sa se
afle un ciclu Hamiltonian de lungime minima, (ciclu Hamiltonian=ciclu care contine
toate vrfurile, fiecare o singura data). Avem (n 1)! cicluri Hamiltoniene, dar 10! =
3628 800. 32! = 2. 631 3 1035.
Daca graful nu e complet, exista un ciclu Hamiltonian?

Teorema 3.1 Daca graful are n vrfuri si pentru orice 2 vrfuri suma gradelor e mai
mare sau egala cu n, atunci exista un ciclu Hamiltonian.
Un algoritm euristic care obtine o aproximare a sol. problemei comis-voiajorului
se bazeaza pe algoritmul lui Prim.
La primul pas se obtine un arbore de acoperire al grafului cu algoritmul lui Prim.
Apoi se renumeroteaza vrfurile folosind cautarea n adncime si se uneste ultimul vrf
renumerotat cu primul, obtinnd un ciclu Hamiltonian. n acest ciclu se testeaza pentru
ce indici i, j are loc inegalitatea:
si se nlocuieste lantul rosu cu cel negru din figura de mai jos:
- 56-

Exemple:

Pasul1. Gasim arborele de acoperire de lung. minima cu Prim:


T = {1} ;
FT = {[1, 2], [1, 3], [1, 4]} aleg [1, 2] ;
T = {{1, 2} , {[1, 2]}} ;lung(T ) = 45
FT = {[1, 3] , [1, 4], [2, 3], [2, 4]} ; aleg [2, 4]
T = {{1, 2, 4} , [1, 2] , [2, 4]} ; lung(T ) = 45 + 35 = 80
FT = {[1, 3] , [2, 3], [4, 3]} aleg [2, 3]
T = {{1, 2, 4, 3} , {[1, 2] , [2, 4] , [2, 3]}} lung(T ) = 80 + 55 = 135.
- 57-

5
45
55

35

Renumerotnd nodurile obtinem ciclul:


1

45

105

35

85

55
4

cu lungimea: 45 + 35 + 105 + 85 = 270.i+1<j i = 1, j = 3


p (v1v3) + p (v2v4) = 65 + 55 = 120 <?p (v1v2) + p (v3v4) = 45 + 85
Noul ciclu: (v1, v3, v4, v2, v1) lungimea : 65 + 85 + 55 + 45 = 250.
Sa se afle circuitul turistic cel mai ieftin care trece prin fiecare localitate o singura
data stiind costurile:
- 58-

- 59-

Graful aferent:
8
3
P
9

15 11 15
0
81
1
S
19 8
27
20

Pasul 1 Arborele de acop. T


T = {{P }}
FT = {[P L] , [P M] , [P R] , [P S] , [P B]} Aleg [P L]
T = {{P, L} , {[P L]}} , lung(T ) = 3
FT = {[P M] , [P R] , [P S] , [P B] , [LM] , [LR] , [LS] , [LB]} Aleg: [P B]
T = {{P, L, B} , {[P L] , [P B]}} , lung(T ) = 3 + 7 = 10
FT = {[P M] , [P R] , [P S] , [LM] , [LR] , [LS] , [BM] , [BR] , [BS]}
Aleg: [P S]
T = {{P, L, B, S} , {[P L] , [P B] , [P S]}} , lung(T ) = 10 + 8 = 18
- 60-

FT = {[P M] , [P R] , [LM] , [LR] , [BM] , [BR] , [SM] , [SR]}


Aleg: [P R]
T = {{P, L, B, S, R} , {[P L] , [P B] , [P S] , [P R]}} , lung(T ) = 18 + 9 = 27
FT = {[P M] , [LM] , [BM] , [SM] , [RM]}
Aleg: [BM]
T = {{P, L, B, S, R, M} , {[P L] , [P B] , [P S] , [P R] , [BM]}}
lung(T ) = 27 + 11 = 38.
Arborele obtinut:
3
11

Renumerotare cu cautare n adncime:


2

1
3
0

11

5
S

Deci ciclul Hamiltonian va fi {P, L, B, M, R, S, P }


- 61-

7
Lungimea: 3 + 8 + 11 + 20 + 13 + 8 = 63
Scurtare: i = 0, j = 2 : p ([P B]) + p ([LM]) = 7 + 18 = 25 <?
p ([P L]) + p ([BM]) = 3 + 11 = 14
i = 0, j = 3 : p ([P M]) + p ([LR]) = 19 + 12 = 27 <?
p ([P L]) + p[MR]) = 3 + 20 = 23
i = 0, j = 4 : p ([P R]) + p ([LS]) = 9 + 15 = 24 <?
p ([P L]) + p ([RS]) = 3 + 13 = 16
i = 1, j = 3 : p ([LM]) + p ([BR]) = 18 + 10 <?
p ([LB]) + p ([MR]) = 8 + 20
i = 1, j = 4 : p ([LR])+p ([BS]) = 12+15 = 27 <?p ([LB])+p ([RS]) = 8+13
i = 2, j = 4 : p ([BR]) + p ([MS]) = 10 + 27

- 62-

Oxford

24

183

61

189

York

220

271
74
37

154

Hull

225

280

231

305

Bristol

84

Exeter

169

- 63-

Leeds

T = {{Oxf ord, Bristol}, 74}


T = {{Oxf ord, Bristol, Exeter} {74, 84}}
T = {{Oxf ord, Bristol, Exeter, Y ork, Leeds, Hull} {74, 84, 183, 24, 61}}
Graful lui T:
???
CircuituL : Oxford,Bristol,Exeter,York,Leeds,Hull,Oxford
lungimea: 74+84+280+24+61+189= 712.
DE verificat

- 64-