Sunteți pe pagina 1din 5

Probleme de drum hamiltonian

Numărul arcelor care compun drumul se numeşte lungimea drumului, care poate fi maxim
numărul vârfurilor -1.
Un drum elementar care trece prin toate vârfurile grafului se numeşte drum hamiltonian.
În practică apar probleme de tipul următor:
1) n – trenuri trebuie expediate dintr-o staţie într-o anumită ordine cu durate c ij de expediere
sau de trecere de la trenul A i la Aj. În ce ordine să se facă expedierea pentru a avea o
durată totală de expediere minimă.
2) problema voiajorului comercial. Să se găsească, dintre toate itinerariile unui voiajor, acel
itinerar care să treacă o singură dată prin fiecare oraş şi să aibă cost minim. Această
problemă are diverse aplicaţii în probleme de organizare, dispecerat, relee de televiziune;
3) în ce ordine să se succeadă fabricarea a n produse pe 2 maşini în aşa fel încât să se
minimizeze timpii morţi.
Problema poate fi formulată ca problemă de programare liniară în numere întregi. Una din
aceste formulări permite rezolvarea cu algoritmul lui Gomory.
În cazul în care graful este tare conex şi nu are prea multe vârfuri, Kaufmann a dat o metodă
simplă pentru determinarea drumurilor hamiltoniene (Dacă oricare ar fi două vârfuri x şi y ale
grafului, există un singur drum de la x la y sau de la y la x, atunci graful se zice tare conex) numită
metoda înmulţirii latine.
În cadrul acestei metode se operează cu produse matriceale de un tip special care oferă
posibilitatea enumerării succesive fără redundanţă, a tuturor drumurilor de lungime 1, 2, …, n-1.
Algoritmul de rezolvare are următorii paşi:
1) se asociază grafului o matrice în care pe rândul i coloana j se trece arcul (x i xj) dacă
există şi „0” dacă nu există. Fie M(1) această matrice (sau matricea drumurilor elementare
le lungime 1);
~
2) se notează cu M matricea M(1) în care fiecare arc (xi xj) se înlocuieşte cu extremitatea
finală (xj);
3) definim M  2   M 1  M ~ , ca o matrice ale cărei elemente se obţin după regula obişnuită
de înmulţirea matricelor iar operaţiile de „adunare”  şi „înmulţire”  între elemente
sunt definite astfel:
a)  x i x j   0  0, 0   x i x j   0, 0  0  0, 0  0  0
x x x daca k  j  i
b)  x x   x  0 i j k
i j k
daca k  j sau k  i

c)  x i x j   x k   x r x s   x p   x i x jx k ;  x r x s x p  pentru k ≠ i ≠ j şi p ≠ r ≠ s.
Matricea M(2) va conţine drumuri elementare de lungime doi. Continuând M  3  M  2   M ~
...
(n-1)
vom obţine la un moment dat, dacă graful are n vârfuri, o matrice M care să conţină drumurile
hamiltoniene de lungime (n-1). Un asemenea drum va conţine toate vârfurile (dacă el există).
Rezultă că la înmulţirea următoare obţinem M  n 1  M ~
 0 (matricea zero).
Dintre toate drumurile vom reţine pe cel de valoare minimă.
Dacă dorim să obţinem circuitele hamiltoniene, e suficient ca în matricea grafului pe linia s,
unde xs este extremitatea finală a drumului, să existe (xs xi), xi fiind extremitatea iniţială a drumului.
Adăugând la acest drum arcul (xs xi) se obţine circuitul hamiltonian. Apoi dintre toate circuitele
reţinem pe acelea care au valoarea minimă.

APLICAŢIE

1
x1
7
5 2
x1 x2 x3 x4
x1 0 7 6 0 6 5
5 x2 x4
x  0 3 7 
M 2 7
x3 5 4 0 6 3 4 6
  6
x4 0 2 6 0
x3

 0 x1x 2 x1x 3 0   0 x2 x3 0
x x 0 x 2 x 3 x 2 x 4  ~  x1 0
 x 3 x 4 
M 1   2 1 ; M
 x 3 x1 x 3x 2 0 x 3x 4   x1 x 2 0 x4 
   
 0 x 4x 2 x 4x3 0   0 x2 x3 0 

 x1x 2 x 4 
 0 x1x 3x 2 x1x 2 x 3
x1x 3x 4 

 x 2 x1x 3 
 2  1 ~  2
 x 2 x 3x1 0
x 2x 4x3
x 2 x 3x 4 
M  M M  M   
x x x x 3x1x 2
0 x 3x 2 x 4 
 3 2 1 x 3x 4 x 2 
x x x 
 4 2 1 x 4 x 3x 2 x 4 x 2 x 3 0 
 x 4 x 3x1 

 x1x 2 x 4 
 0 x1x 3x 2 x1x 2 x 3
x1x 3x 4 

 x 2 x1x 3   0 x 2 x3 0 
 3  2 ~  3
 x 2 x 3x1 0
x 2x 4x3
x 2 x 3x 4  
x 0 x x 
 
1 3 4
M  M M  M  
x x x x 3x1x 2  x x 0 x 4
0 x 3x 2 x 4   1 2 
 3 2 1 x 3x 4 x 2  0 x x 0
x x x   2 3
 4 2 1 x 4 x 3x 2 x 4 x 2 x 3 0 
 x 4 x 3x1 

2
 x1x 3x 2 x 4 
 0 x1x 3x 4 x 2 x1x 2 x 4 x 3 
 x1x 2 x 3x 4 
x x x x 0 0 x 2 x1x 3x 4 
 M  3   2 4 3 1
x x x x 0 0 x 3x1x 2 x 4 
 3 4 2 1 
x x x x
 4 3 2 1 x x xx x x xx 
0
x 4 x 2 x 3x1 4 3 1 2 4 2 1 3 

Graful conţine 12 drumuri hamiltoniene.


Lungimea drumurilor:
1) x1 6 x3 6 x4 2 x2  14 este circuit x1 - x3 - x4 - x2 - x1  14 + 5 = 19
2) x1 7
x2 7
x4 6
x3  20 este circuit x1 - x4 - x3 - x2 - x1  20 + 5 = 25
3) x1 6
x3 4
x2 7
x4  17 nu este circuit
4) x1 7
x2 3
x3 6
x4  16 nu este circuit
5) x2 7
x4 6
x3 5
x1  18 este circuit x2 - x4 - x3 - x1 - x2  18 + 7 = 25
6) x2 5
x1 6
x3 6
x4  17 este circuit x2 – x1 - x3 - x4 - x2  17 + 2 = 19
7) x3 6
x4 2
x2 5
x1  13 este circuit x3 - x4 - x2 - x1 - x3  13 + 6 = 19
8) x3 5
x1 7
x2 7
x4  19 este circuit x3 - x1 - x2 - x4 - x3  19 + 6 = 25
9) x4 6
x3 4
x2 5
x1  15 nu este circuit
10) x4 2
x2 3
x3 5
x1  16 nu este circuit
11) x4 6
x3 5
x1 7
x2  18 este circuit x4 - x3 - x1 - x2 - x4  18 + 7 = 25
12) x4 2
x2 5
x1 6
x3  13 este circuit x4 - x2 - x1 - x3 - x4  13 + 6 = 19
Lungimea minimă a drumului este 10, x4x2x3x1.
Sunt 8 circuite; lungimea minimă a circuitului este 19 şi sunt 4 astfel de circuite.

Drumurile hamiltoniene (de lungime „3”) sunt date de M (3). Circuitele hamiltoniene sunt:
(x1x3x4x2x1)(x1x2x4x3x1)(x4x3x1x2x4) şi celelalte echivalente cu acestea (care se obţin din ele prin
permutări circulare). Primul, are valoarea egală cu (19) şi este minim ca şi celelalte ce se obţin din el
prin permutări circulare. (adică x1x3x4x2x1→ x3x4x2x1x3→ x4x2x1x3x4→ ş.a.m.d.)
În cazul în care avem vârfuri mai multe şi ne interesează numai drumurile hamiltoniene (de
lungime (n-1)), atunci se poate înmulţi M(2) cu M ~ 2 , care se obţine din M(2) excluzând extremitatea

iniţială a fiecărui drum (xi xj xk) din M(2). Se calculează M  4   M  2   M


~ 2 şi se repetă procedeul.


Dacă n = 9 atunci M  9   M  4   M
~4
M
~

Nu are sens să căutăm toate drumurile hamiltoniene şi dintre ele să alegem pe cel de cost
minim, deoarece pentru 8 produse avem 8! = 40320 de drumuri (graful fiind simetric). Se simte din
nevoia unui algoritm care să micşoreze acest număr, pas cu pas, până se obţine drumul optim sau
circuitul hamiltonian optim. Acesta este algoritmul lui Little.
Concluzii:
1. Se poate utiliza foarte bine în cazul unui nod sau secţii de circulaţie cu trafic intens, când
trenurile care trebuie ordonanţate sunt toate de aceeaşi categorie.

3
2. Se poate folosi staţiile de formare a trenurilor când capacitatea staţiei nu este corelată cu
capacitatea secţiei (secţia are capacitatea mai mică decât staţia) iar prin acest algoritm se
diminuează timpul de ocupare a distanţei de circulaţie sau sectorului de bloc.
3. Prin reducerea duratei de ocupare a nodului se asigură o creştere a regul. şi o fluidizare a
circulaţiei.
4. Se pretează la o programare relativ simplă pe calculator.

Dezavantaje:
1. În cazul existenţei mai multor categorii de trenuri eficacitatea modelului scade deoarece
ordonanţarea se face după criteriul importanţei în circulaţie.
2. Trebuie cunoscute şi respectate riguros constantele proprii ale sistemului (duratele cij).

Aplicaţie – Metoda înmulţirii latine


Pentru graful din figura următoare să se afle câte drumuri hamiltoniene admite şi care este
drumul hamiltonian de lungime minimă.

x1 2
6
7 x2
 0 x1x 2 x1x 3 0 x1x 5  4
5
 0 0 x 2x3 0 x 2 x 5  3

 1 
M  0 0 0 x 3x 4 0  x5
  3
 0 0 x 4x3 0 x 4x5  x3
2 1
 x 5 x1 0 0 x5x 4 0 
8
x44

 0 x2 x3 0 x5 
0 0 x3 0 x 5 
~ 
M0 0 0 x4 0
 
0 0 x3 0 x5 
 x1 0 0 x4 0 

 x1x 3x 4 
 0 0 x1x 2 x 3 x1x 2 x 5 
 x1x 5 x 4 
 x 2 x 3x 4 
 1 ~  2  2
 x 2 x 5 x1 0 0
x 2x5x 4
0 
M M  M  M   
 0 0 0 0 x 3x 4 x 5 
 x 4 x 5 x1 0 0 0 0 
 x 5 x1x 3 
 0 x 5 x1x 2 0 0 
 x5x 4x 3 

4
M 4  M  2  M  2
~

 0 0 x1x 2 x 5 x 3 0 x1x 2 x 3x 4 x 5 
x x x x x 0 0 x 2 x 5 x1x 3x 4 0 
 2 3 4 5 1 
M 4   0 x 3x 4 x 5 x1x 2 0 0 0 
 
 0 0 x 4 x 5 x1x 2 x 3 0 0 
 0 0 0 x 5 x1x 2 x 3x 4 0 
Întrucât graful are 5 vârfuri şi lungimea drumurilor hamiltoniene este n-1 = 4, rezultă că
matricea M(4) conţine toate drumurile hamiltoniene ale grafului considerat. Se constată că graful
conţine 7 drumuri hamiltoniene.
Lungimea celor 7 drumuri hamiltoniene este:

1) x1 - x2 - x5 - x4 – x3 nu poate fi circuit hamiltonian pentru că nu există arcul x3x1.


Lungimea = 2 + 5 + 3 + 8 = 18

2) x1 - x2 - x3 - x4 – x5 poate fi circuit hamiltonian pentru că există arcul x5x1.


Lungimea = 2 + 3 + 1 + 2 = 8 este minim

3) x2 - x3 - x4 - x5 – x1 poate fi circuit hamiltonian


Lungimea = 3 + 1 + 2 + 6 = 12

4) x2 - x5 - x1 - x3 – x4 nu poate fi circuit hamiltonian


Lungimea = 5 + 6 + 7 + 1 = 19

5) x3 - x4 - x5 - x1 – x2 poate fi circuit hamiltonian


Lungimea = 1 + 2 + 6 + 2 = 11

6) x4 - x5 - x1 - x2 – x3 poate fi circuit hamiltonian


Lungimea = 2 + 6 + 2 + 3 = 13

7) x5 - x1 - x2 - x3 – x4 poate fi circuit hamiltonian


Lungimea = 6 + 2 + 3 + 1 = 12

Drumul hamiltonian minim este x1x2x3x4x5 cu lungimea de 8. Iar circuite hamiltoniene sunt 5
şi tot aşa se poate determina şi pentru acestea valoarea minimă.

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