Documente Academic
Documente Profesional
Documente Cultură
UT1 2020 Final
UT1 2020 Final
BAZELE CERCETĂRILOR
OPERAȚIONALE
Titular disciplină:
Lect. Univ. dr. Ramona-Mihaela PĂUN
CUPRINS:
Precizări privind alcătuirea manualului de studiu individual
Principalele elementele constitutive, care apar în alcătuirea acestui manualul de studiu individual, corespunzătoare
unei unități de studiu proiectată/dezvoltată sunt următoarele:
1. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Mitruț, D., Cercetări Operaționale. Optimizări în
rețele. Teorie și aplicații economice, Editura MATRIX ROM, București, 2002
2. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Cercetări Operaționale cu aplicații în economie.
Teoria grafurilor și Analiza drumului critic, Editura MATRIX ROM, București, 1996
3. Nica, V., Cercetări operaționale I, Note de curs pentru învățământul la distanță, Editura ASE,
București, 2012;
4. Nica, V., Ciobanu, Gh., Mustaţă Floare, Mărăcine Virginia, “Cercetări operaţionale I - Programare
liniară, Probleme de optimizare în reţele de transport şi distribuţie, Teoria jocurilor strategice”,
Editura MATRIX ROM, Bucureşti 1998
5. http://www.asecib.ase.ro/cursurionline.htm, cursurile numărul: 1- Bazele Cercetării Operaționale; ID
Cercetări Operaționale I și ID Cercetări Operaționale II; 9- Cercetări Operaționale I; 13- Culegere de
probleme de Bazele Cercetării Operaționale- an II zi și distanță, București, Romania.
0 INTRODUCERE
Eventuale modificări
(corecţii) în model
Figura 1.1
Cercetarea Operațională face parte din științele matematice dar datorită accentului pus pe
interacțiunea om-tehnologie și caracterului său aplicativ, se suprapune și cu alte discipline, în special
ingineria industrială și managementul operațiunilor. CO este strâns legată de știința calculatoarelor
deoarece modelarea unor procese economice reale conduce în general la obținerea unor modele matematice
de dimensiuni mari și complexitate ridicată ce necesită utilizarea unor sisteme de calcul performante și a
unor programe specializate (vezi SAS/OR, NCSS, Gurobi, Lindo, COIN-OR, etc.)
Din multitudinea de tematici ce intră în sfera disciplinei Cercetări Operaționale, în acest curs vom
aborda următoarele:
1. Introducere în analiza și optimizarea rețelelor, în cadrul căreia vom prezenta conceptele
generale utilizate în teoria grafurilor dar și modalități de a identifica arbori de valoare optimă
(cu aplicații în trasarea reţelelor de comunicaţii şi, în general, a reţelelor de distribuţie- de exemplu
pentru identificarea celei mai ieftine posibilități de a conecta toate gospodăriile dintr-o comună la
viitoarea rețea de gaze) și drumuri de valoare minimă în rețele de transport (utilizate de exemplu
pentru identificarea drumului cel mai scurt de la o anumită locație la alta într-o aplicație de
navigație);
2. Managementul proiectelor complexe unde vom arăta cum putem reprezenta proiectele cu ajutorul
grafurilor iar în urma efectuării analizei drumului critic vom determina durata minimă de
finalizare a unui proiect, drumul critic și activitățile critice, vom desena graficul Gantt (un
instrument foarte util atât în etapa de planificare cât și în cea de monitorizare a unui proiect) și vom
evalua impactul unor modificări ale momentelor de începere ale activităților, respectiv ale duratei
activităților asupra duratei minime de realizare a proiectului. Un alt aspect considerat aici se referă
la soluționarea cu ajutorul unei euristici a situațiilor în care este necesară reprogramarea
activităților datorită faptului că, în anumite momente de timp, resursele disponibile sunt în cantități
insuficiente în raport cu necesarul.
3. Flux maxim în rețele de transport și distribuție se referă la identificarea unui flux maxim (ce
poate fi cantitatea maximă de materie primă, produse finite, energie, informație) care poate fi
deplasat de la anumite surse către anumite destinații printr-o rețea ale cărei rute sunt capacitate și
în ce măsură reţeaua de transport este capabilă să permită acoperirea integrală a cererilor în punctele
de destinaţie, notată cu Q (ex. rețeaua publică de aprovizionare cu apă caldă dintr-o anumită zonă
a unui oraș). Pentru aceasta, se va rezolva problema determinării volumului maxim Q* de unităţi
de flux ce pot fi deplasate de la surse la destinaţii. Dacă Q* < Q vor exista destinaţii a căror cerere
este acoperită doar în parte şi atunci se ridică problema măririi capacităţii de transfer a reţelei.
4. Optimizarea proceselor economice utilizând programarea liniară. Programarea liniară
reprezintă o clasă specială de probleme de optimizare a căror modele sunt alcătuite dintr-o serie de
restricții liniare și o funcție obiectiv, de asemenea liniară. Un exemplu clasic de problemă de
programare liniară este problema firmei. Problema constă în determinarea cantităților optime ce
trebuie produse din fiecare bun astfel încât să se maximizeze profitul firmei, ținând cont de
cantitățile disponibile din fiecare tip de resursă.
5. Probleme de optimizare în rețele de transport și distribuție. În acest caz se pune problema
deplasării unor cantități de bun omogen de la anumite surse la anumite destinații astfel încât
costul de transport să fie minim. Vom considera și situația în care anumite rute folosite inițial
pentru transportul mărfurilor sunt acum blocate și vom identifica noi rute de transport astfel încât
costul deplasării să rămână cât mai mic cu putință.
Competențe conferite
1. Cunoaștere și înțelegere ( cunoașterea și înțelegerea adecvată a noțiunilor specifice disciplinei)
P Cunoașterea și înțelegerea noțiunilor, conceptelor, teoriilor și principiilor cu care
operează cercetările operaționale;
P Folosirea corectă a termenilor de specialitate;
P Construirea unor modele economico-matematice adecvate ce descriu procese economice
reale;
P Cunoașterea și aplicarea corectă a tehnicilor și algoritmilor de rezolvare a modelelor
economico-matematice specifice cercetărilor operaționale;
P Utilizarea adecvată a produselor software specializate pentru soluționarea problemelor
specifice.
Temele de control
Temele de control vor fi date conform Calendarului Disciplinei și acestea vor avea următoarele subiecte:
1. Determinarea unor arbori maximali de cost minim în context economic;
2. Modelarea și rezolvarea unor probleme de drum optim în rețele de transport;
3. Managementul proiectelor complexe;
4. Găsirea fluxului optim într-o rețea de transport;
5. Rezolvarea unor probleme de programare liniară;
6. Determinarea unor planuri optime de transport pentru probleme clasice de transport.
Bibliografie obligatorie:
1. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Mitruț, D., Cercetări Operaționale. Optimizări în
rețele. Teorie și aplicații economice, Editura MATRIX ROM, București, 2002
2. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Cercetări Operaționale cu aplicații în economie.
Teoria grafurilor și Analiza drumului critic, Editura MATRIX ROM, București, 1996
3. Nica, V., Cercetări operaționale I, Note de curs pentru învățământul la distanță, Editura ASE,
București, 2012;
4. Nica, V., Ciobanu, Gh, Mustață, Fl., Mărăcine V., Cercetări Operaționale- Programare liniară,
Probleme de optimizare în rețele de transport și distribuție, Teoria jocurilor strategice, cap. 1 și 2,
Editura MATRIX ROM, București 1998, http://asecib.ase.ro/cursurionline.htm
5. http://www.asecib.ase.ro/cursurionline.htm, cursurile numărul: 1- Bazele Cercetării Operaționale; 1-
ID Cercetări operaționale I și II; 13- Culegere de probleme de Bazele Cercetării Operaționale- an II zi
și distanță, București, Romania.
6. White, J., White, L., A review of the recent contribution of systems thinking tooperational
research and management science, European Journal of Operational Research, Volume 207, Issue
3, Pages 1147-1161, 2010, on-line:
http://www.sciencedirect.com/science/article/pii/S0377221709009473
Bibliografie suplimentară:
7. Bazaraa, M. S., & Jarvis, J. J. Linear programming and Network flows. John Wiley and Sons, Inc.
1997;
8. Cominetti, R., Facchinei, F., Lassere, J.B., Modern Optimization Modelling Technoques, Advanced
Courses in Mathematics- CRM, Barcelone, Barcelona, 2013, Spania;
9. Cooke, S., Slack, N., Making Management Decision, Prentice Hall International UK Ltd., 1991;
10. Dantzig, G. B., & Thapa, M. N. Linear programming. 1: Introduction. Springer-Verlag.1997;
11. Hillier, F. S., Lieberman, G. I., Introduction to Operations Research, ediţia a 8-a, McGraw Hill
Publishing Co., New York, 2005;
12. Lapin, L., Quantitative Methods for Business Decisions - with Cases, Harcourt Brace Jovanovich
Publishers and its subsidiary, Academic Press, 1991;
13. Lockzer, K., Gordon, J., Project Management and Project Network Techniques, Pitman Publishing,
1996;
14. Lucey, T., Quantitative Techniques, DP Publisher, 1992 ;
15. Luenberger, D. G., & Ye, Y. Linear and Nonlinear Programming (Third ed.). Springer Science, 2008;
16. Oliveira, C.A., Pardalos, P.M., Mathematical Aspects of Network Optimization, Springer
Optimization and its Applications, vol. 53, 2011;
17. Taha, H. A. Operations research. An introduction (Eight edition ed.). Pearson Prentice Hall, 2008;
18. Vanderbei, R. J. Linear programming. Foundations and Extentions (Third ed.). Springer Science,
2008.
19. Vanhoucke, M., Project Management with Dynamic Scheduling. Baseline Scheduling, Risk Analysis
and Project Control, Springer, 2012;
20. Zelinka, I., Snasel, V., Abraham, A. (editori), Handbook of Optimization. From classical to modern
Approach, Intelligent Systems Reference Library, vol. 38, 2012.
Metoda de evaluare:
Nota finală la disciplina Bazele Cercetărilor Operaționale se obține prin însumarea punctajului la cele două
evaluări, E1 și E2, ambele obligatorii, constând în:
• E1- Evaluarea pe parcursul semestrului- are alocate 30% din cele 10 puncte ale notei finale și constă
din rezolvarea temelor de control. Prezentarea temelor de control este condiție obligatorie pentru
participarea la evaluarea E2 din sesiunea de examene;
• E2- Evaluarea prin teză scrisă în sesiunea de examene- are alocate 70% din cele 10 puncte ale notei
finale. Absența de la susținerea acestei teze scrise echivalează cu nepromovarea examenului.
1 UNITATEA DE STUDIU 1. INTRODUCERE ÎN OPTIMIZAREA REȚELELOR
Într-o mare varietate de contexte se pune problema deplasării unei cantităţi Q ce poate fi materie, energie,
informaţie, etc. din unele locuri numite surse în alte locuri numite destinaţii, această deplasare realizându-se pe
anumite rute de legătură. Unităţile indivizibile ale cantităţii Q care se deplasează de-a lungul rutelor se vor numi
unităţi de flux.
Pentru Cercetarea Operaţională, problema enunţată va prezenta interes numai dacă respectă următoarele
ipoteze:
a) cel puţin o sursă poate aproviziona mai multe destinaţii şi cel puţin o destinaţie poate primi unităţi de flux
de la mai multe surse.
Rutele de legătură pot avea şi alte puncte comune în afara surselor şi destinaţiilor, numite puncte intermediare
sau de tranzit. Nu sunt excluse legăturile directe între surse sau între destinaţii. În principiu, orice rută poate fi parcursă
în ambele sensuri, dar pot exista şi rute cu sens unic.
Ipoteza a) va fi întotdeauna presupusă în timp ce ipotezele b) şi c) pot fiinţa separat sau simultan.
1) În prezenţa ipotezei c) şi absenţa condiţiei b) se pune problema deplasării cantităţii de flux Q de la surse la
destinaţii la un cost total minim. Dacă sursele sunt în legătură directă cu destinaţiile obţinem problema clasică de
transport, care va face obiectul capitolului 5 al cursului. Cazul general, în care exisă şi puncte intermediare, este
cunoscut sub numele de problema transferului şi el nu face obiectul cursului de faţă. În cazul particular al unei singure
surse s, al unei singure destinaţii t şi a unei singure unităţi de flux se obţine problema drumului de cost minim de la s
la t, problemă de care ne vom ocupa în secţiunea 1.2.4 a acestui capitol.
2) În prezenţa ipotezei b) şi absenţa ipotezei c) se pune problema dacă reţeaua, ale cărei rute sunt capacitate,
este capabilă să permită acoperirea integrală a cererilor în punctele de destinaţie. Pentru aceasta, se va rezolva
problema determinării volumului maxim Q* de unităţi de flux ce pot fi deplasate de la surse la destinaţii. Dacă Q* <
Q vor exista destinaţii a căror cerere este acoperită doar în parte şi atunci se ridică problema măririi capacităţii de
transfer a reţelei. Am descris succint problema fluxului maxim, problemă ce va fi abordată în cadrul capitolului 3.
3) În prezenţa simultană a ipotezelor b) şi c) se pune problema satisfacerii cererilor în punctele de destinaţie
la un cost de transport minim. Ca şi în cazul precedent vom avea în vedere o problemă modificată: vom determina mai
întâi cantitatea maximă de flux ce poate fi deplasată de la surse la destinaţii şi apoi modul de organizare al deplasării
astfel încât costul operaţiei să fie minim. Aceasta este problema fluxului (maxim) de cost minim, problemă abordată,
de asemenea, în cadrul cursului de Cercetări Operaţionale din anul 2.
În secţiunile următoare vom trata două probleme de optimizare în reţele de transport: problema determinării
unui arbore maximal (de acoperire) de valoare (cost) optimă şi problema drumului de valoare minim de la s la t .
1.2.2. Concepte utilizate în teoria grafurilor
În secţiunea 1.3.1 am vizualizat elementele unei reţele de transport printr-un desen compus din puncte şi arce
care unesc unele din aceste puncte (vezi figura 1.1). Un asemenea desen constituie forma uzuală de prezentare a unui
concept deosebit de important, atât în sine cât şi pentru studiul unei impresionante varietăţi de probleme din cele mai
diverse domenii, domeniul economic fiind prioritar.
Am socotit deci necesar să includem aici câteva elemente privitoare la conceptul de graf, căci despre el este
vorba. Aceste elemente vor fi foarte utile pentru înţelegerea consideraţiilor teoretice dezvoltate în legătură cu
rezolvarea problemei de transport şi de asemenea constituie cadrul natural de abordare şi a celorlalte probleme amintite
în clasificarea dată în secţiunea precedentă.
Un graf este un cuplu G = (V, E) format dintr-o mulţime nevidă V, ale cărei elemente se numesc vârfuri sau
noduri şi o mulţime E de elemente, zise muchii, cu proprietatea că fiecărei muchii e Î E îi sunt asociate două noduri
x, y Î V, nu neapărat distincte, numite extremităţile muchiei e. Un subgraf al grafului G = (V, E) este un graf G’ =
(V’, E’) în care V’ Í V, E’ Í E şi orice muchie eÎ E’ are aceleaşi extremităţi atât în G‘ cât şi în G.
După cum se vede, definiţia generală nu exclude existenţa muchiilor cu o singură extremitate (aceste muchii
se numesc bucle), nici existenţa mai multor muchii cu aceleaşi extremităţi (figura 1.2.a)
x u
t
z v
a) b)
Figura 1.2.
Graful G se va numi simplu dacă nu are bucle şi oricare două noduri sunt extremităţi pentru cel mult o muchie. Vom
spune că G este finit dacă vârfurile şi muchiile sale sunt în număr finit.
În continuare, vom avea în vedere în exclusivitate grafuri finite şi simple aşa cum este cel reprezentat grafic
în figura 1.2.b).
Fie e = {x, y} o muchie a grafului G = (V, E); extremităţile sale pot fi ordonate în două moduri: (x, y) şi (y, x).
Cele două perechi se numesc rute orientate sau arce generate de muchia subiacentă e; spunem că arcul (x, y) are
extremitatea iniţială x şi extremitatea finală y şi că (y, x) este arcul opus lui (x, y). A orienta muchia {x, y} înseamnă
a alege unul din arcele (x, y) sau (y, x); dacă a fost ales arcul (x, y) vom spune că (x, y) este un arc permis şi că arcul
(y, x) este blocat. Dacă o asemenea alegere nu a fost făcută vom spune că muchia {x, y} este neorientată. În acest caz,
convenim ca ambele arce (x, y) şi (y, x), generate de muchia {x, y}, să fie considerate permise. În fine, a da o
orientare în graful G înseamnă a orienta unele din muchiile sale; orientarea poate fi totală sau parţială după cum toate
muchiile grafului au fost orientate sau numai o parte din ele. Este clar că în acelaşi graf G pot fi date mai multe
orientări; dacă G are m muchii, atunci există 2m orientări totale diferite ale acestuia!
Un graf orientat (parţial orientat, neorientat) este un graf în care s-a dat o orientare totală (o orientare parţială,
respectiv nu s-a dat nici o orientare); de exemplu, graful din figura 1.1.a) este (total) orientat iar cel din figura 1.1.b)
numai parţial. Graful din figura 1.2.b) este neorientat.
În unele situaţii este util să se pună în evidenţă arcele permise ale unui graf (parţial) orientat; realizarea grafică,
intuitivă a acestei operaţii este făcută în figura 1.3.
x y x y
Þ
z t z t
Figura 1.3.
Se constată uşor că dacă G este (total) neorientat, numărul arcelor permise este de două ori mai mare decât numărul
muchiilor din G.
În continuare vom introduce o serie de noţiuni frecvent utilizate în teoria grafurilor. Vom considera un graf
(finit, simplu) G = (V,E), în care (eventual) s-a dat o orientare pe unele din muchii (posibil pe toate).
Un lanţ în graful G este o succesiune de noduri l = (x0, x1, ... , xp-1, xp) cu proprietatea că {x0, x1}, {x1, x2}, ...,
{xp-1, xp } sunt muchii în G. Vom spune că x0 şi xp sunt extremităţile lanţului l şi că l “trece” prin nodurile intermediare
x1, ... , xp-1. Un lanţ poate fi:
o Elementar - un lanț care conţine doar noduri distincte.
o Neelementar - un lanț care nu conţine doar noduri distincte.
o Simplu - un lanț care conţine doar muchii distincte.
o Compus - un lanț care nu conţine doar muchii distincte.
Prin definiţie lungimea lanţului l este dată de numărul muchiilor componente. Astfel, lanţurile de lungime
unu se identifică cu muchiile grafului G; un lanţ de lungime doi este constituit din două muchii adiacente (au o
extremitate în comun).
Un ciclu este un lanţ ale cărui extremităţi coincid.
În figura 1.2.b) l = (x, y, t, u, v) este un lanț elementar, simplu, de lungime 4; l‘ = (x, z, y, t, z, v) este lanț neelementar,
simplu de lungime 5; l'' = (y, t, z, t, u) este neelementar compus iar µ = (x, y, t, u, x) este ciclu elementar de lungime
4.
Un drum în graful G este o succesiune de noduri d = (x0, x1, ... , xp -1, xp) cu proprietatea că (x0, x1), (x1, x2), ...,
(xp -1, xp) sunt arce permise. Nodul x0 este extremitatea iniţială a drumului d iar xp extremitatea finală. Un circuit este
un drum ale cărui extremităţi coincid. Este clar că orice drum este un lanţ, reciproca nefiind adevărată întotdeauna. În
figura 1.3, d = (z, t, x) este un drum de lungime 2 iar µ = (x, y, t, x) este un circuit de lungime 3; în acelaşi graf, l =
(z, x, y) este un lanţ care nu este un drum deoarece arcul (z, x) este blocat.
Graful G = (V,E) se zice conex dacă oricare două noduri Graful G G2
ale sale sunt extremităţile unui lanţ. Dacă G nu este conex,
există partiţiile V = V1ÈV2È .... ÈVs şi E=
G3
E1ÈE2È....ÈEs astfel încât G1 = (V1,E1) , G2 = (V2,E2) , ..., Gs = G1
(Vs,Es) sunt grafuri conexe. Subgrafurile G1, G2,...., Gs se
numesc componentele conexe ale grafului G. Graful din figura
1.3 este conex (ca şi cele din figurile anterioare); graful din
figura 1.4 are trei componente conexe.
Figura 1.4.
Graful G = (V,E) se numeşte bipartit dacă mulţimea nodurilor sale poate fi descompusă în două submulţimi
nevide şi disjuncte S şi T, astfel încât orice muchie din G are o extremitate în S şi cealaltă în T.
Este clar că graful asociat unei probleme clasice de transport este bipartit (figura 1.1.a), nodurile care
reprezintă furnizorii formând mulţimea S iar nodurile corespunzătoare consumatorilor alcătuind mulţimea T.
Adiacenţă şi incidenţă. Fie G = (V, E) un graf şi xi, xj Î V. Nodurile xi şi xj sunt noduri adiacente dacă
există o muchie e = [xi, xj] care le uneşte. Dacă e = [xi, xj], muchia e şi nodul xi sau muchia e şi nodul xj sunt
incidente. Două muchii e1 şi e2 ale grafului sunt muchii adiacente dacă sunt incidente în acelaşi nod (au o extremitate
în comun).
Gradul unui nod x Î V, notat cu d(x) reprezintă numărul de muchii din graful G incidente cu nodul x (care
au o extremitate în x). Un nod izolat are gradul 0. Dacă ½V½ = n şi ½E½ = m atunci pentru orice (m, n) – graf (un
n
graf cu n noduri şi m muchii) se verifică relaţia: å d (xi ) = 2 × m . Această relaţie rezultă din faptul că fiecare muchie
i =1
este incidentă în două noduri.
Un lanţ elementar care trece prin toate nodurile unui graf este un lanţ hamiltonian. Un lanţ hamiltonian ale
cărui extremităţi coincid se numeşte ciclu hamiltonian.
Un lanţ simplu care parcurge odată şi numai o dată toate muchiile grafului este un lanţ eulerian. Un lanţ
eulerian ale cărui extremităţi coincid se numeşte ciclu eulerian.
Conceptele anterioare se aplică şi în cazul grafurilor în care s-a dat o orientare a muchiilor, ele generând
noţiunile de drum/circuit hamiltonian, respectiv drum/circuit eulerian.
Fie G = (V, E) un graf neorientat, cu mulţimea nodurilor V = {x1, x2,…, xn}. Notăm cu E(x) mulţimea
muchiilor incidente într-un nod x, cu numărul elementelor ½E(x)½. Un nod se numeşte suspendat (sau nod frunză)
dacă există o singură muchie incidentă în x (altfel spus |E(x)| = 1). Un nod x este izolat dacă nu există nici o muchie
incidentă în x ( |E(x)| = 0 ).
Un arbore este un graf neorientat, conex şi fără cicluri (figura 1.6.).
Propoziţia 1.11 Un arbore H = (V, E), ½V½ = n, ½E½ = m are următoarele proprietăţi echivalente:
1) H este conex şi fără cicluri;
2) H este fără cicluri şi are n – 1 muchii;
3) H este conex şi are n – 1 muchii;
4) H este fără cicluri şi dacă se unesc printr-o muchie două noduri neadiacente, se creează un ciclu şi
numai unul (figura 1.7);
5) H este conex şi dacă i se suprimă o muchie se creează două componente conexe (orice muchie din H
este o punte între două noduri), graful se disconectează (figura 1.8);
6) Orice pereche de noduri este legată printr-un lanţ şi numai unul.
*
adaugă ®
* Þ *
**
** **
Figura 1.6.
Figura 1.7
scoate ®
Þ
Figura 1.8
0 1 Pentru demonstrațiile teoremelor, lemelor ș i propozițiilor acestui capitol a se vedea: Ciobanu Gh., Nica V.,
Mustaţă Floare, Mă ră cine Virginia, Mitruţ D., “Cercetări Operaţionale. Optimizări în reţele. Teorie şi
aplicaţii economice”, Editura MatrixRom, Bucureşti, 2002
Un arbore H într-un graf G este un subgraf care - de sine stătător - este un arbore. H se zice maximal dacă
conţine toate nodurile grafului G (figura 1.9).
Figura 1.9.
Fie G = (V, E) un graf neorientat. Un arbore H = (V, Y) se spune că este un arbore care acoperă graful G
dacă Y Í E. Dacă ïVï = n şi ïYï = n – 1 arborele de acoperire este numit maximal.
Teorema 1.1 Într-un graf G = (V, E) există un graf parţial H care este un arbore de acoperire dacă şi numai
dacă G este conex.
Să considerăm un graf G = (V, E) conex. O muchie e Î E este valorizată dacă i se asociază o valoare
nenegativă v(e) ³ 0. Aceste valori pot reprezenta costuri, lungimi, profituri ale legăturilor definite prin muchiile
grafului. Un graf G este valorizat dacă toate muchiile sale sunt valorizate. Graful G fiind un graf conex, conform
teoremei 1.1, conţine un arbore de acoperire H = (V, Y), Y Í E, ca un graf parţial al său.
Valoarea unui arbore H = (V, Y) conţinut în graful G = (V, E), Y Í E este, prin definiţie, suma valorilor
muchiilor sale:
v(H) = å v(e) .
eÎY
(1.1)
Problema extremală pe care dorim să o rezolvăm este problema arborelui de valoare minimă: să se
determine un arbore de acoperire maximal H* = (V, Y*) conţinut într-un graf G = (V, E), Y* Í E de valoare
minimă:
v(H*) = min v(H) (1.2)
H
În activitatea economică, de multe ori apare problema determinării unor arbori de valoare optimă (minimă
sau maximă), întrucât există procese economice sau activităţi economice care pot fi reprezentate cu ajutorul unui
arbore în condiţii convenabile. Această problemă are importanţă practică în trasarea reţelelor de comunicaţii şi a
reţelelor de distribuţie, în general, în studiul reţelelor de transport:
- aprovizionarea cu apă potabilă sau cu energie electrică sau termică a unor puncte de consum de la un punct
central;
- evoluţii posibile ale unui sistem pornind de la o stare iniţială;
- construirea unei reţele telefonice radiale, a unei reţele de televiziune sau internet de la un punct central;
- schemele bloc ale programelor pentru calculatoare;
- studiul circuitelor electrice în electrotehnică, etc.
Teorema 1.2 (Berge) Dacă graful G = (V, E) este un graf conex şi complet şi dacă valorile asociate
muchiilor sunt toate distincte v(ei) ¹ v(ej) oricare ar fi ei, ej Î E cu i ¹ j atunci problema determinării arborelui de
acoperire de valoare minimă admite o soluţie şi numai una (arborele este unic determinat).
Dacă valorile muchiilor grafului G = (V, E) nu sunt distincte, adică, dacă de exemplu, v(e1) = v(e2) = v(e3)
= ... , considerăm:
v/(e1) = v(e1) + e
v/(e2) = v(e2) + 2e
v/(e3) = v(e3) + 3e
........
unde e este o valoare pozitivă foarte mică, astfel încât să nu schimbe ordinea de mărime a muchiilor. Prin
aceasta se introduce o ordine strictă între muchii şi putem avea situaţia din teorema 1.2 de formare a arborelui H =
(V, Y). În finalul construcţiei (în soluţia optimă) se ia e = 0.
În situaţia în care valorile muchiilor grafului nu sunt distincte, problema nu admite, în general, soluţie
unică. Pentru determinarea tuturor soluţiilor, se va alege la fiecare etapă k numai o muchie dintre cele cu valori
egale şi se verifică pentru fiecare dintre acestea dacă formează ciclu cu muchiile deja alese în etapele 1,2, …, k-1.
Dacă graful G = (V, E) nu este complet, se atribuie muchiilor ce lipsesc valoarea ¥ sau valori foarte mari.
Aceste muchii nu vor intra în mulţimea Y a muchiilor arborelui H.
Procedeul de construcţie efectivă a unui arbore care acoperă un graf dat G este prezentat în cele ce urmează:
Etapa de iniţializare:
Din mulţimea muchiilor E se alege o muchie e1 cu valoarea v(e1) cea mai mică. Dacă există mai multe muchii
cu aceeaşi valoare se alege una dintre acestea. Fie Y mulţimea muchiilor alese. Iniţial Y = {e1} şi |Y| = 1.
Etapa iterativă:
Din mulţimea muchiilor neselectate E – Y se alege o muchie ei cu valoarea v(ei) cea mai mică, pentru care Y
È íeiý nu conţine un ciclu. Se ia Y È íeiý ® Y şi |Y| + 1 ® |Y|.
STOP: Etapa iterativă se opreşte atunci când sunt alese n-1 muchii. H = (V, Y) este arborele de acoperire de valoare
minimă.
Arborele de valoare minimă H = (V, Y) este determinat de muchiile alese. În cazul în care există mai multe
muchii de valori egale, arborele de valoare minimă nu este, în general, unic. Este preferabil, în aceste situaţii, să fie
determinaţi toţi arborii de valoare minimă şi dintre aceştia un manager (decident) să îl aleagă pe cel mai convenabil
corespunzător unui alt criteriu economic.
Algoritmul Kruskal este foarte simplu. El intră în categoria algoritmilor de tip "greedy" (lacom) deoarece la
fiecare pas al algoritmului se alege cea mai bună variantă. Totuşi, acest algoritm din ştiinţa managementului produce
întotdeauna soluţia optimă.
Algoritmul Kruskal poate fi utilizat şi pentru determinarea arborilor de acoperire de valoare maximă, prin
înlocuirea, în algoritm: "se alege muchia cu valoarea cea mai mică" cu "se alege muchia cu valoarea cea mai mare".
1)
J. B. Kruskal, On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem, Proceedings of
the American Mathematical Society 7, 48-50, 1956.
Exemplul 1.1: Problema sistemului de comunicaţii
Într-un oraş se studiază posibilitatea ca principalele instituţii să fie conectate într-un sistem printr-o reţea de
telecomunicaţii. Schema tuturor legăturilor posibile, precum şi costul executării acestor legături între şase dintre
instituţiile oraşului sunt indicate în graful din figura 1.10. Valorile indicate pe arce reprezintă costurile (în unităţi
monetare) asociate realizării legăturilor dintre instituţii. Să se determine modul în care vor fi interconectate cele şase
instituţii astfel încât costul realizării sistemului de telecomunicaţii să fie minim.
B 6
D
7 5 4
A 7 F
4
3 6
C 5 E
Figura 1.10
Rezolvare:
Pentru rezolvarea acestei probleme se aplică algoritmul Kruskal. Muchia cu cel mai mic cost este [A,C] cu
v[A, C] = 3 u.m.. Aceasta este prima alegere. În continuare, pot fi alese muchiile [D, E] şi [D, F], fiecare având
costul de 4 u.m.. Pentru că fiecare din aceste muchii nu formează ciclu cu muchia [A, C] şi nici toate cele trei muchii
nu formează ciclu, se alege a doua oară şi a treia oară câte una din muchiile [D, E] şi [D,F]. Muchiile [A, D] şi [C,
E] cu costul v[A, D] = v[C, E] = 5 u.m. pot fi alese, în continuare. Se alege una din muchii, cealaltă formează un
ciclu. Deci, pot exista două variante conform figurilor 1.11.a) şi 1.11.b) prin alegerea fie a muchiei [A, D] fie a
muchiei [C, E].
6 6
B D B D
5 4 4
A F A 4 F
4
3 3
5
C E C E
a) H1 b) H2
Figura 1.11
Următoarea alegere este fie muchia [E, F] fie muchia [B, D] ambele având costul v[E, F] = v[B, D] = 6 u.m..
Dar, muchia [E, F] formează ciclu în ambii arbori parţiali împreună cu muchiile [D, E] şi [D, F]. În acest caz, se
alege muchia [B, D] în ambii arbori parţiali.
Rezultă două soluţii optime, deci doi arbori de valoare minimă prezentaţi în figura 1.11, cu v(H1) = v(H2) =
22. Alegerea între aceşti arbori va avea în vedere şi alte considerente economice pe lângă costul instalării sistemului
de telecomunicaţii.
Să reluăm exemplul 1.1 de mai sus referitor la problema sistemului de comunicaţii și să-l rezolvăm cu
ajutorul Excel QM.
În acest scop, deschidem aplicația Excel și din bara de sus selectăm Excel QM. Din meniul din stânga sus
apasăm pe Alphabetical, selectăm Network Analysis iar de acolo Minimum Spanning Tree.
În fereastra care se deschide introducem titlul „Problema sistemului de comunicații” și specificăm numărul
de muchii ale grafului, în cazul nostru „9”. Fereastra este redată mai jos:
Apăsăm pe butonul OK și ni se deschide o foaie de Excel cu un tabel în care vom introduce pentru fiecare
muchie („Branch”) nodul de start („Start node”), cel final („End note”) precum și valoarea („Cost”).
Atenție!! Nodurile etichetate alfabetic (A-F) vor trebui redenumite utilizând valori de la 1 la 6 deoarece
aplicația nu acceptă notațiile alfabetice pentru extremitățile muchiilor. Astfel, nodul A devine nodul 1, nodul D
devine nodul 4, muchia [A;D] devine muchia [1;4] iar costul asociat este 5.
Odată introduse toate muchiile și valorile lor, apăsăm butonul „Solve”. Rezultatele vor fi redate în tabelul
gri din drepta și se interpretează astfel: muchiile din tabelul din stânga in dreptul cărora apare valoarea „1” în tabelul
din dreapta sunt cele incluse în arborele maximal iar cele care nu au o valoare asociată nu vor fi considerate. Astfel,
citirea rezultatelor indică următoarea componență a arborelui maximal de cost minim: [1;3], [1;4], [2;4], [4;5] și
[4;6] sau, pe notațiile inițiale, muchiile [A;C], [A;D], [B;D], [D;E] și [D;F], reprezentate printr-o linie îngroșată în
figura 1.12. Valoarea arborelui maximal de cost minim este 22 u.m. ( v(H) = 22).
Figura 1.12
Notă: Excel QM nu furnizează decât o soluție optimă deși, așa cum am văzut în secțiunea precedentă,
problema admite două soluții optime.
1.2.3.3. Arborescenţe
Dacă n este numărul nodurilor, atunci numărul arcelor unei arborescenţe este m = n – 1. Prin urmare,
arborescenţa este un arbore cu orientare unică pe muchii, în care se pun în evidenţă drumuri de la nodul rădăcină la
toate celelalte noduri. Dacă G = (X, U) este un graf orientat şi conex, printre grafurile parţiale există arborescenţe
ale grafului dat.
Arborele genealogic este un exemplu de arborescenţă, nodurile fără descendenţi fiind noduri frunză.
cu proprietatea că pentru orice 1 £ i £ q – 1, extremitatea finală a unui arc ui coincide cu extremitatea iniţială a
arcului ui+1. Altfel spus, de-a lungul drumului l arcele componente sunt orientate în acelaşi sens, de la nodul iniţial
al arcului u1 către nodul final al arcului uq. Numărul arcelor componente defineşte lungimea l(l) a drumului l.
Drumurile de lungime 1 se identifică cu arcele permise ale grafului.
Dacă u1 = (x0, x1), u2 = (x1, x2), ..., uq = (xq-1, xq) sunt arcele date prin extremităţile lor, atunci un drum poate
fi definit şi prin succesiunea de noduri:
l = (x0, x1, x2, ..., xq)
Nodul x0 este extremitatea de start a drumului l iar nodul xq extremitatea finală. Dacă extremităţile sale
coincid (x0 = xq) atunci drumul l este un circuit.
Un drum este elementar dacă nodurile sale sunt distincte (drumul trece o singură dată prin fiecare nod al
său). Un drum este simplu dacă arcele sale sunt distincte (drumul trece o singură dată prin fiecare arc al său). Evident,
orice drum elementar este şi simplu. Reciproca nu este, în general, adevărată. Mulţimea drumurilor elementare dintr-
un graf finit este finită. Un drum l dintr-un graf G este inclus în drumul l' (l Í l') dacă toate arcele drumului l
sunt arce şi ale drumului l'. Evident, v(l) £ v(l').
O problemă extremală într-un graf orientat G = (V, U) constă în determinarea unui drum elementar (sau a
drumurilor elementare), între două noduri date, de valoare minimă (sau de valoare maximă).
Fie s şi t două noduri oarecare ale grafului G. Notăm cu G*(s, t) un subgraf al grafului G format din mulţimea
drumurilor din graful considerat G = (V, U) între nodurile s şi t, în care sunt incluse şi drumurile de lungime 1.
Problema drumurilor de valoare minimă între nodurile s şi t se defineşte ca problema determinării drumului l* de
la nodul s la nodul t în graful G*(s, t), de valoare minimă:
Dacă se consideră drumurile de valoare minimă de la un nod s la oricare alt nod al grafului G, mulţimea
acestor drumuri formează un graf parţial orientat în G, numit graful drumurilor de valoare minimă cu originea în
nodul s şi este notat G*(s) sau simplu G*. Problema pusă în acest fel cuprinde şi problema determinării drumurilor
de valoare minimă de la nodul s la un alt nod oarecare t. Într-adevăr, dacă în G*(s) figurează şi nodul t, atunci în
acest graf vom găsi şi drumurile de valoare minimă de la s la t.
Dacă luăm în considerare numai drumurile elementare de la s la t, deoarece mulţimea acestora este finită,
atunci există, întotdeauna, un drum de la s la t de valoare minimă. Aceste drumuri elementare sunt identificate greoi,
motiv pentru care drumurile de valoare minimă se determină considerând, în graf, toate drumurile elementare sau
neelementare între cele două noduri.
Este posibil ca problema (1.4) să nu admită soluţii optime (de exemplu în cazul existenţei circuitelor de
valoare negativă). În acest caz, există o infinitate de drumuri de la s la t a căror mulţime de valori poate fi nemărginită
inferior.
Propoziţia 1.3 Problema drumurilor de valoare minimă cu originea în nodul s admite soluţii în graful G =
(V, U) dacă şi numai dacă graful G*(s) nu conţine nici un circuit cu valoare strict negativă.
Demonstraţie: Fie s un nod al grafului G. Vom presupune că în graful G*(s) există un circuit c = (x = x0, xi,
xj, ..., xk, x) de valoare strict negativă v(c) = r < 0. Deoarece x Î X există un drum µ de la s la x şi fie w valoarea
acestuia. Prin prelungirea drumului µ cu circuitul c, noul drum µ ! c are valoarea w + r. De asemenea, µ ! c ! c are
valoarea w + 2r. Prin recurenţă, prelungirea drumului µ cu de k ori circuitul c, duce la drumul µ ! c$%! % ...
c# !" %c , k
k ori
Dacă l şi l' sunt drumuri elementare în G având aceleaşi extremităţi, atunci drumurile pot fi comparabile:
fie v(l') £ v(l), fie v(l) £ v(l’).
În cazul în care există drumuri de la s la t, evaluarea şi compararea acestora, conform afirmaţiei anterioare,
se poate limita la drumurile elementare cu aceleaşi extremităţi. Numărul drumurilor elementare fiind finit unul dintre
ele va fi drumul de la s la t de valoare minimă.
Dacă graful G nu este conex şi nodurile s şi t nu fac parte din aceeaşi componentă conexă (figura 1.13.a)
sau orientările pe arce nu permit atingerea nodului t din nodul s (figura 1.13.b), există posibilitatea ca în graful G să
nu existe drumuri de la s la t.
În acest context vom spune că nodul i este atins din nodul s dacă există un drum de la s la i format din arce
permise. Ne ocupăm de rezolvarea problemei determinării drumului de valoare minimă de la s la toate celelalte
noduri ale grafului, P(s ) , şi a cazului său particular P(s, t ) - determinarea drumului de valoare minimă de la s la t,
în ipoteza: toate valorile arcelor permise sunt nenegative: v(u ) ³ 0 ; "u Î U .
s
t
Figura 1.13.a
s
t
Figura 1.13.b
1. Preliminarii
1) Fiecărui nod i Î V i s-a asociat o variabilă d (i ) numită în continuare eticheta nodului i. Prin definiţie
d (s ) = 0 . În oricare moment al aplicării algoritmului variabilei d (i ) reţine valoarea unui drum de la s la i găsit de
algoritm până în acel moment. Dacă algoritmul nu a găsit încă un drum de la s la i variabila d (i ) are valoarea +∞.
La finalul aplicării metodei, eticheta indică valoarea celui mai „scurt” drum de la nodul s la nodul i. Pe parcursul
aplicării algoritmului etichetele se corectează în sensul micşorării valorilor lor. În momentul în care o etichetă d (i )
atinge valoarea minimă ea devine permanentă.
Metodele de rezolvare a problemei determinării drumului de valoare minimă între două noduri ale unui graf
sunt procedee de etichetare care se împart în două clase:
§ metode cu etichetare permanentă (la fiecare iteraţie se identifică un nod a cărui etichetă se
permanentizează – valoarea ei nu se va mai modifica până la finalul rezolvării); şi
2
Dijkstra, E.W. “A Note on two Problems in Connection with Graphs”, Numerische Math. 1, 269-271, 1959
§ metode cu etichetare temporară (etichetele tuturor nodurilor au valori temporare care devin
permanente doar la finalul rezolvării).
Metodele aparţinând primei clase se aplică numai grafurilor cu valori (costuri) nenegative ale muchiilor, în
timp ce metodele aparţinând celei de a doua clase se aplică grafurilor cu valori (costuri) negative ale muchiilor.
Algoritmul Dijkstra aparţine primei clase.
2) Fiecărui nod i Î V diferit de s i se asociază o altă variabilă PRED (i ) numită indicator de precedenţă cu
următoarea semnificaţie: în oricare moment al aplicării algoritmului, PRED (i ) conţine ultimul nod dinaintea lui i
pe drumul de la s la i găsit de algoritm până în acel moment. Atâta timp cât un asemenea drum nu a fost găsit
d (i ) = +¥ , indicatorul PRED (i ) nu este definit el fiind o locaţie vidă (PRED(i) = Æ).
3) Iniţializăm o listă P în care vom include toate nodurile i Î V pentru care algoritmul a găsit un drum de
valoare minimă de la i la s (lista nodurilor cu eticheta declarată permanentă). La start P se reduce la nodul de
plecare s.
4) Iniţializăm o listă T în care vom include toate nodurile j Î V care sunt vecine cu noduri din lista P: un
nod j este vecin cu i dacă arcul (i, j ) este permis. T este lista nodurilor cu eticheta declarată temporară.
Nodurile cu etichetă permanentă din lista P se selectează din lista T a nodurilor candidate. Corectarea unei
etichete se face după următoarea schemă echivalentă (figura 1.14).
s
j
μ
Figura 1.14
Referitor la un arc permis (i, j ) Î U cu valoarea v(i, j ) ³ 0 presupunem că algoritmul a găsit un drum λ de
la s la i a cărui valoare e reţinută în eticheta d (i ) şi un drum μ de la s la j a cărui valoare se găseşte în locaţia d ( j )
. Figura 1.14 pune în evidenţă cele două drumuri de la s la j.
- drumul l È (i, j ) de valoare d (i ) + v(i, j ) ;
- ,,vechiul” drum μ de valoare d ( j ) .
Dacă d (i ) + v(i, j ) < d ( j ) atunci primul drum are o valoare mai mică şi ca urmare va fi reţinut de algoritm
ca fiind cel mai bun drum de la s la j găsit până în acest moment. Memorarea acestui nou drum se face prin corectarea
etichetei d ( j ) care ia valoarea d ( j ) = d (i ) + v(i, j ) şi actualizarea indicatorului de precedenţă PRED (j): PRED
(j) = i.
Cu aceste pregătiri trecem la prezentarea algoritmului Dijkstra.
2. Algoritmul Dijkstra
START: Iniţializăm:
P = {s};
T = {i Î V / există arcul permis (s, i ) Î U } ;
d (s ) = 0 ; d (i ) = v(s, i ) pentru i Î T si d (i ) = +¥ în rest;
PRED (i ) = s pentru i Î T şi PRED ( j ) nedefinit în rest.
ITERAŢIE:
Pas 1: Dacă lista T e vidă, STOP: algoritmul a găsit toate nodurile ce pot fi atinse din s de-a lungul unor
drumuri de valoare minimă, toate nodurile sunt în lista P şi valorile minime ale drumurilor de la s la aceste noduri
sunt indicate de etichetele corespunzătoare. Identificarea drumului de valoare minimă se face cu ajutorul
indicatorului de precedenţă, din aproape în aproape, de la t (sau de la fiecare nod al grafului) către s.
Dacă T ¹ Æ se trece la pasul 2.
( )
Pas 2: Se selectează nodul i * Î T cu proprietatea: d i * = min{d (i ), i Î T }
Se transferă nodul i din lista T în lista P ( i devine nod cu eticheta permanentă). Drumul de la s la i * găsit
* *
până în momentul selectării este un drum de valoare minimă. Se adaugă la lista T toate nodurile j Î V - {s} care
nu figurau în această listă, noduri adiacente lui i * pentru care există arcul i * , j Î U .( )
( )
Pas 3: Pentru fiecare nod j Î T , vecin cu i * se compară d ( j ) cu suma d (i* ) + v i* , j (vezi figura 1.14
*
cu i schimbat în i ).
() ( )
- Dacă d i* + v i* , j ³ d ( j ) se trece la examinarea altui nod din T vecin cu i * ;
- Dacă d (i ) + v (i , j ) < á d ( j ) se fac actualizările:
* *
d ( j ) ¬ d (i ) + v (i , j ) şi* *
PRED ( j ) = i *
după care se trece la examinarea altui nod din lista T vecin cu i * .
După examinarea tuturor vecinilor lui i * din T se revine la Pasul 1 în cadrul unei noi iteraţii.
STOP: Algoritmul se termină în următoarele situaţii:
§ La Pasul 1: dacă lista T e vidă, T = Æ ;
§ La Pasul 2: Dacă ne interesează numai drumul de valoare minimă de la s la un nod t algoritmul descris se
termină în momentul în care nodul selectat este t : i * = t.
NOTĂ:
1) Dacă algoritmul se termină la Pasul 1 şi d(t) = +¥, în graful G NU există nici un drum de la s la t
(vezi situaţiile din figura 1.13).
2) Aplicarea Algoritmului Dijkstra nu rezolvă doar problema găsirii drumului de valoare minimă de la
s la t ci a TUTUROR drumurilor de valoare minimă de la s la toate celelalte noduri ale grafului
G.
Exemplul 1.2. Aplicaţi metoda DISKTRA pentru a determina drumurile de valoare minimă de la nodul s
la nodurile ce pot fi atinse din s în graful din figura 1.15.
3
x y
4 2
8
s 1
3 w
2
3
z t
Figura 1.15
Fiecărei muchii îi este asociat un cost valabil în ambele sensuri de parcurgere pe muchiile neorientate.
Rezolvare: Valorile iniţiale şi intermediare ale variabilelor d (i ) şi PRED(i) sunt date în tabelul 1.
START: Iniţializăm:
• Listele P = {s}, T = {x, y, z}
• d (s ) = 0 ; d ( x ) = 4, d ( y ) = 8, d ( z ) = 3; d (i ) = +¥ în rest;
• PRED (i ) = s pentru i Î T şi PRED ( j ) nedefinit în rest.
Iteraţia 1: Se calculează min{d (i ), i Î T } = min{4, 8, 3} = 3 Þ i * = z
Transferăm z din lista T în lista P: P = {s, z} şi includem în lista T nodul t care este vecin cu
i * = z : T = {x, y, t}.
*
Examinăm toţi vecinii lui i = z din lista T: există un singur vecin, nodul t. Deoarece
d ( z ) + v( z , t ) = 3 + 3 = 6 < +¥ = d (t ) actualizăm d (t ) = 6 şi PRED (t ) = z (valorile actualizate se trec
în tabelul 1 în linia ITERAŢIA 1, celelalte valori nu se modifică).
Iteraţia 2: Se calculează min{d (i ), i Î T } = min{4, 8, 6} = 4 Þ i * = x
Actualizăm listele P şi T: P = {s, z , x}, T = {y, t}
Observăm că vecinii lui i * = x cu etichetă nepermanentă, adică y şi t sunt deja în lista T.
Trecem la corectarea – dacă este cazul – a etichetelor d ( y ) şi d (t ) :
• d ( x ) + v( x, y ) = 4 + 3 = 7 < 8 = d ( y ) Þ actualizăm: d ( y ) = 7 şi PRED ( y ) = x
• d ( x ) + v( x, t ) = 4 + 1 = 5 < 6 = d (t ) Þ actualizăm d (t ) = 5 şi PRED (t ) = x .
Celelalte etichete şi indicatori de precedenţă rămân neschimbaţi.
Iteraţia 3: Calculăm min{d (i ), i Î T } = {7, 5} = 5 Þ i * = t .
Actualizăm P = {s, z , x, t}; T = {y} .
i * = t nu are vecini cu etichetă nepermanentă, nici în T, nici în afara lui T.
În această iteraţie nu are loc nici o corectare de indicatori.
Iteraţia 4: i* = y
P = {s, z , x, t , y}; T = F
i * = y nu are nici un vecin cu etichetă nepermanentă.
STOP, pentru că T = F .
Tabelul 1
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED (w)
(y) (z) (t)
START 0* 4 s 8 s 3 s +∞ - +∞ -
ITERAŢIA 1 - 4 s 8 s 3* s 6 z +∞ -
ITERAŢIA 2 - 4* s 7 x - - 5 x +∞ -
ITERAŢIA 3 - - - 7 x - - 5* x +∞ -
ITERAŢIA 4 - - - 7* x - - - - +∞ -
STOP 0 4* s 7 x 3 s 5 x +∞ -
Drumurile de valoare minimă se construiesc cu ajutorul indicelui de precedenţă şi sunt vizualizate în figura
1.16.
d(x) = 4 d(y) = 7
PRED(x) = s PRED(y) = x
3
x y
4
d(s) = 0 d(w) = +∞
s 1 PRED(w) = Æ
w
3
z t
d(z) = 3 d(t) = 5
PRED(z) = s PRED(t) = x
Figura 1.16
Aşa cum se observă, deşi graful din figura 1.15 este conex, datorită orientărilor existente pe muchii, nodul
w nu poate fi atins din s (nu se găseşte în lista P). Lungimile drumurilor de valoare minimă de la s la toate celelalte
noduri ale grafului sunt date de etichetele fiecărui nod (de exemplu, valoarea celui mai scurt drum de la s la y este
7 şi el trece prin nodul x – PRED(y) = x iar PRED(x) = s).
Observaţie finală: Una dintre metodele de determinare a drumurilor de valoare minimă în grafuri cu costuri
negative asociate muchiilor este Metoda Ford. Ea aparţine clasei metodelor cu etichetare temporară şi poate fi
lecturată în: Ciobanu Gh., Nica V., Floare Mustaţă, Virginia Mărăcine, Mitruţ D., “Cercetări Operaţionale.
Optimizări în reţele. Teorie şi aplicaţii economice”, Editura MatrixRom, Bucureşti, 2002.
Să reluăm exemplul 1.2 de mai sus referitor la identificarea drumurilor de valoare minimă de la nodul s la
nodurile ce pot fi atinse din s în graful din figura 1.15 și să-l rezolvăm cu ajutorul Excel QM.
În acest scop, deschidem aplicația Excel și din bara de sus selectăm Excel QM. Din meniul din stânga sus
apasăm pe Alphabetical, selectăm Network Analysis iar de acolo Shortest Path.
În fereastra care se deschide introducem titlul „Drumuri de valoare minimă de la s” și specificăm numărul
de muchii ale grafului, în cazul nostru „13”.
Întrucât graful este parțial orientat, optăm pentru opțiunea „Directed” ceea ce presupune dublarea numărului
muchiilor neorientate și introducerea lor în tabel cu considerarea ambelor arce (de exemplu pentru muchia
neorientată {s;x} considerăm atât arcul (s;x) cât și arcul opus (x;s)). Muchiile orientate se vor adăuga ținând cont de
orientarea lor (sensul de parcurgere permis). Dacă în graf am fi avut numai muchii neorientate, atunci am fi selectat
opțiunea „Undirected” iar dublarea numărului muchiilor neorientate nu ar mai fi fost necesară. Numărul 13 provine
din cele 5 muchii neorientate ale grafului care pot fi deci parcurse în ambele direcții (5 x 2=10) la care se adaugă
cele 3 muchii orientate care pot fi parcurse doar în direcția indicată. Fereastra este redată mai jos:
Apăsăm pe butonul OK și ni se deschide o foaie de Excel cu un tabel în care vom introduce pentru fiecare
muchie („Branch”) nodul de start („Start node”), cel final („End note”) precum și distanța („Distance”).
Atenție!! Deoarece nodurile din graf sunt etichetate alfabetic, ele vor trebui redenumite utilizând valori de
la 1 la 6 deoarece aplicația nu acceptă notațiile alfabetice pentru extremitățile muchiilor. Astfel, nodul s devine
nodul 1, nodul x devine nodul 2, nodul y este nodul 3, z este 4, t este 5 iar w este acum 6.
Faptul că muchia {s;x} este neorientată conduce la introducerea ei ca (s;x) și apoi ca (x;s) (pe notațiile
acceptate de program vom avea deci (1;2), respectiv (2;1)).
Specificăm apoi nodul sursă și nodul destinație. Întrucât în acest exercițiu dorim să identificăm toate
drumurile de valoare minimă de la nodul s (nodul 1) la restul nodurilor din graf, introducem „1” pentru „Origin” și
nu trecem nimic la „Destination”.
Odată introduse toate muchiile și valorile lor și specificate nodurile sursă și destinație, apăsăm butonul
„Solve”. Rezultatele vor fi redate în tabelul gri în care avem de fapt o matrice în care sunt date toate distanțele dintre
toate nodurile grafului către celelalte noduri din graf. Pentru a citi distanța de la un anumit nod la celelalte noduri
din graf pe uităm pe linia corespunzătoare nodului considerat nod de start. De exemplu, pentru a citi distanța de
nodul s la restul nodurilor din graf ne uităm la valorile trecute pe prima linie a matricii („node 1”). Astfel, distanța
de la s la s este 0 (d(s)=d(1)=0), de la s la x este 4 (d(x)=d(2)=4), de la s la y este 7 (d(y)=d(3)=7, de la s la z este 3
(d(z)=d(4)=3), de la s la t este 5 (d(t)=d(5)=5) iar de la s la w este +∞ (d(w)=d(6)= +∞ ) ceea ce arată faptul că nodul
w nu poate fi atins pornind din nodul s (se observă din graf dar și din ultima coloană a matricii că toate drumurile
către nodul w au o valoare foarte mare, indicând imposibilitatea ajungerii în acest nod din oricare nod al rețelei).
Astfel, matricea ne arată nu doar toate distanțele minime de la un anumit nod către toate nodurile din graf
(citite de pe linia corespunzătoare fiecărui nod) dar și toate distanțele minime de la toate nodurile unui graf către
un anumit nod din acel graf care se regăsesc pe coloanele matricii. Prin urmare, deși nu putem ajunge de la s la w,
putem ajunge de la w la s iar distanța minimă în acest caz este de 7 km așa cum rezultă din tabel dacă ne uităm la
valoarea care se regăsește în celula de pe linia node 6 și coloana node 1.
Dacă ne interesează de exemplu, un drum de valoare minimă de la nodul s la nodul t, introducând nodul t
(adică valoarea 5) ca destinație („Destination”), programul ne sugerează componentele acestui drum și ne
calculează valoarea minimă a acestuia cumulând valorile de pe fiecare arc component. În plus, programul furnizează
drumurile de valoare minimă și în cazul în care muchiile neorientate au valori diferite în funcție de sensul de
parcurgere (de exemplu în cazul în care distanța de la nodul 1 la nodul 2 este de 4 km iar de la nodul 2 la nodul 1
este de 5 km).
Rezultatele sunt redate mai jos; se observă că drumul de valoare minimă de la nodul s (nodul 1) la t (nodul
5) este alcătuit din arcele (1;2) și (2;5) iar distanța cumulată este de 4+1= 5 km. De asemenea, datorită valorilor
diferite ale muchiei {1;2} în funcție de sensul de parcurgere, drumul de lungime minimă de la t (nodul 5) la s (nodul
1) are distanța minimă de 6 km.
1.3. Îndrumar pentru autoverificare
Pentru rezolvarea acestor probleme, este necesară înțelegerea câtorva concepte de bază folosite în
teoria grafurilor. Acestea sunt prezentate pe scurt mai jos.
Într-o mare varietate de contexte se pune problema deplasării unei cantităţi Q ce poate fi materie,
energie, informaţie, etc. din unele locuri numite surse în alte locuri numite destinaţii, această deplasare
realizându-se pe anumite rute de legătură. Ansamblul surselor, destinaţiilor, al punctelor intermediare şi al
rutelor de legătură se va numi reţea de transport; ea se identifică cu un graf orientat, neorientat sau parţial
orientat
Un graf este un cuplu G = (V, E) format dintr-o mulţime nevidă V, ale cărei elemente se numesc
vârfuri sau noduri şi o mulţime E de elemente, zise muchii. Graful G se va numi simplu dacă nu are bucle
şi oricare două noduri sunt extremităţi pentru cel mult o muchie. Vom spune că G este finit dacă vârfurile
şi muchiile sale sunt în număr finit. Un graf orientat (parţial orientat, neorientat) este un graf în care s-a
dat o orientare totală (o orientare parţială, respectiv nu s-a dat nici o orientare). Graful G = (V,E) se zice
conex dacă oricare două noduri ale sale sunt extremităţile unui lanţ.
Un lanţ în graful G este o succesiune de noduri l = (x0, x1, ... , xp-1, xp) cu proprietatea că {x0, x1},
{x1, x2}, ..., {xp-1, xp } sunt muchii în G. Un ciclu este un lanţ ale cărui extremităţi coincid. Un drum în
graful G este o succesiune de noduri d = (x0, x1, ... , xp -1, xp) cu proprietatea că (x0, x1), (x1, x2), ..., (xp -1, xp)
sunt arce permise. Un circuit este un drum ale cărui extremităţi coincid. Prin definiţie lungimea unui
lanț/ciclu/drum/circuit este dată de numărul muchiilor componente.
Un arbore este un graf neorientat, conex şi fără cicluri. H se zice maximal dacă conţine toate
nodurile grafului G. Valoarea unui arbore H = (V, Y) conţinut în graful G = (V, E), Y Í E este, prin definiţie,
suma valorilor muchiilor sale.
Prima problemă pe care dorim să o rezolvăm este problema arborelui de valoare minimă: să se
determine un arbore de acoperire maximal H* = (V, Y*) conţinut într-un graf G = (V, E), Y* Í E de valoare
minimă: v(H*) = min v(H) . O modalitate de a identifica arbori de acoperire maximali este furnizată de
H
algoritmul Kruskal.
Cea de-a doua problemă referitoare la determinarea drumului de valoare minimă de la s la toate
celelalte noduri ale grafului, P(s ) şi a cazului său particular de la s la un anumit nod t, P(s, t ) (în ipoteza
că toate valorile arcelor permise sunt nenegative) se face cu ajutorul algoritmului lui Dijkstra.
Exercițiul 1 (rezolvat): Administraţia unei localităţi montane a hotărât construirea unor linii de teleferic
care să lege oraşul de cele 8 puncte turistice importante din jurul acestuia. În urma unui studiu au fost puse
în evidenţa toate posibilităţile şi costurile de conectare a obiectivele turistice între ele şi cu oraşul, acestea
fiind prezentate în figura 1.17.
Se cere găsirea variantei de construcţie de cost minim, care să asigure accesul din oraş la oricare
din obiectivele turistice.
Referitor la numărul de arce necesar, facem observaţia că, dacă din oraş se va putea ajunge la orice
obiectiv turistic, atunci se va putea ajunge şi de la orice obiectiv turistic la oricare altul (trecând prin oraş),
deci trebuie ca arcele alese pentru construcţie să formeze la un loc un graf conex.
În concluzie, căutăm un graf parţial conex cu un număr minim de arce, adică un arbore. În plus,
suma costurilor arcelor sale trebuie să fie minimă. Vom aplica algoritmul lui Kruskal.
Figura 1.17
La primul pas poate fi ales unul din arcele OP3 sau OP7, ele având valoarea minimă 2. Putem alege
oricum primul arc dintre cele două pentru că la al doilea pas va fi ales celălalt.
La pasul trei poate fi ales unul din arcele OP5, OP6 sau P1P6 care au valoarea minimă 3. Nici în
acest caz nu are vreo importanţă ordinea alegerii, deoarece pot fi alese succesiv toate trei fără a se forma
nici un ciclu.
Al şaselea arc poate fi ales dintre arcele P4P5 şi P1P2, care au valoarea minimă 4. Nici în acest caz
nu are vreo importanţă ordinea alegerii, deoarece pot fi alese succesiv ambele, fără a se forma nici un ciclu.
Următoarea valoare disponibilă a unui arc este 5, dar arcul opt nu poate fi ales dintre arcele OP1,
P6P7, deşi au valoarea minimă 5. Arcul OP1 nu poate fi ales deoarece s-ar forma ciclul OP1P6, iar P6P7 ar
duce la ciclul OP6P7. Următoarea valoare minimă este 6, pentru arcul P5P7 dar nu poate fi ales deoarece se
formează ciclul OP5P7.
Valoarea următoare, 7, o au arcele OP4, P2P3 şi P5P8. OP4 nu poate fi ales deoarece s-ar forma ciclul
OP5P4. Arcul P2P3 nu poate fi ales deoarece s-ar forma ciclul OP6P1P2P3. Arcul P5P8 nu formează nici un
ciclu şi el va fi al optulea arc ales. În acest caz, deoarece s-au adunat 8 arce într-un graf cu 9 noduri, am
obţinut graful căutat. Acest arbore este reprezentat în figura 1.18.
Figura 1.18
Exercițiul 2: Într-un județ se urmărește modernizarea drumurilor care să lege orașul reședință de județ (O)
cu alte 6 localități din județ. În graf s-au identificat drumurile ce pot fi modernizate și s-au estimat costurile
implicate în modernizarea acestora.
Să se determine drumurile ce trebuie să fie modernizate astfel încât toate localitățile să fie conectate
la un cost minim.
20
11 B
F
10 12
8 9
A
10
C O 15
19 8
11 16
D E
25
Figura 1.19
Răspuns: se aplică algoritmul Kruskal pentru a determina arborele maximal de valoare minimă. Problema
admite 2 soluții optime iar costul minim al conectării este 58 u.m.
Exercițiul 3: În cazul unei căderi masive de zăpadă, primăria dorește un plan de deblocare, într-o primă
etapă, a punctelor importante ale orașului (spitale, pompieri, aeroport). Se cunosc distanțele între aceste
puncte importante conform rețelei din figura. 1.20.
Să se determine drumurile ce trebuie să fie deszăpezite în prima etapă astfel încât toate aceste
puncte importante ale orașului să fie accesibile. După rezolvarea manuală a acestui exercițiu, utilizați Excel
QM pentru a obține soluția optimă furnizată de program și interpretați rezultatul obținut.
2 4
7
4
5 6
1 3 2
3
5
3 4
2 3 6 8
5 3
6 5 3
4 5
4
Figura 1.20
Răspuns: se aplică algoritmul Kruskal pentru a determina arborele maximal de valoare minimă. Problema
admite 6 soluții optime iar costul minim al conectării este 20 u.m.
Exercițiul 4: Problema modernizării reţelei de drumuri. Prefectura judeţului X şi-a fixat ca obiectiv
modernizarea reţelei drumurilor care leagă localităţile judeţului conform grafului din figura 1.21. Pe fiecare
muchie este înscrisă valoarea numerică în unităţi monetare [u.m.] a costului modernizării tronsonului
respectiv. În prima etapă se caută să se modernizeze numai unele drumuri astfel încât fiecare localitate să
fie conectată la cel puţin un drum modernizat şi costul întregii operaţii de modernizare (parţială) să fie
minim.
2 3
5
5 1 6 7
3
8 3 3 4
1 6 8
10 2 10 8 7
4 2 7
Figura 1.21
Rezolvarea problemei se reduce la determinarea unui arbore maximal de valoare minimă. Aplicaţi
algoritmul Kruskal pentru determinarea variantei optime de modernizare a drumurilor.
Exercițiul 5 (rezolvat): În graful din figura 1.22 valorile numerice înscrise pe muchii reprezintă distanţe.
Se cere determinarea celui mai scurt drum de la nodul O la nodul T. Atenţie: absenţa orientărilor vrea să
însemne că orice muchie poate fi parcursă în ambele sensuri (deci graful are 12 muchii şi 24 arce permise).
Aplicăm algoritmul lui Dijkstra.
Figura 1.22
Soluţie:
Start Nodul de plecare O este declarat cercetat; celelalte şase noduri ale grafului sunt declarate
necercetate.
Iteraţia 1
Singurul nod cercetat O are trei vecini A,B,C dintre care, cel mai apropiat, este A. Nodul A va fi
unicul candidat asociat nodului cercetat O. Declarăm cercetat nodul A; drumul cel mai scurt de la O la A
se reduce la arcul OA. Reţinem arcul OA pentru graful G*(O) al drumurilor de valoare minimă cu origina
în O.
Iteraţia 4: La acest stadiu al derulării algoritmului sunt declarate cercetate nodurile O,A,B,C şi
E.Sunt cunoscute valorile minimale ale drumurilor da la O către A,B,C şi E. Sunt reţinute deasemenea
„ultimele” arce ale drumurilor minimale; după cum vom vedea cunoaştera acestor arce va fi suficientă
pentru reconstituirea drumurilor minimale din O către orice alt nod al grafului!
D este singurul nod candidat, asociat însă la numai puţin de trei noduri deja cercetate A,B şi E. Este
clar că D va fi următorul nod declarat cercetat; rămâne să stabilim valoarea drumului minimal de la O la D
şi ultimul său arc! Algoritmul ia în considerare trei drumuri de la O la D:
- drumul minim de la O la A, prelungit cu arcul AD; valoare: 2 + 7 = 9 km;
- drumul minim de la O la B, prelungit cu arcul BD; valoare: 4 + 4 = 8 km;
- drumul minim de la O la E, prelungit cu arcul ED; valoare: 7 + 1 = 8 km;
În concluzie, cele mai scurte drumuri de la O la D au valoarea 8 km şi înainte de a ajunge în D trec, fie prin
B fie prin E!
Deoarece am „atins” nodul T algoritmul se opreşte. În cazul de faţă toate nodurile grafului au fost
cercetate aşa încât algoritmul a găsit şi toate drumurile minimale cu originea în O!
2 2 4 5
O A B D T
3 1
Figura 1.23
Determinarea efectivă a nodurilor prin care trece drumul cel mai scurt de la O la T sau la oricare
alt nod se face din aproape în aproape „de la sfârşit către începutul drumului” folosind arcele reţinute pe
parcurs.
Există două drumuri optime indicate în figura 1.23:
În fapt, algoritmul a determinat drumurile de valoare minimă de la O la toate celelalte noduri.
2 2
O 4 5
B D T
4 3 1
C E
Figura 1.24
Tabelul 1.1
Iteraţia Noduri Noduri Valoarea Care nod Valoarea minimă Ultimul arc pe
cercetate cu (necercetate) drumului a fost a drumului către drumul de
vecini candidate asociat declarat nodul declarat valoare minimă
necercetaţi cercetat cercetat
1 O A 2 A 2 OA
2 O C 4 C 4 OC
A B 2+2=4 B 4 AB
3 A D 2+7=9
B E 4+3=7 E 7 BE
C E 4+4=8
4 A D 2+7=9
B D 4+4=8 D 8 BD
E D 7+1=8 D 8 ED
5 D T 8+5=13 T 13 DT
E T 7+7=14
7
E
Figura 1.25
Exercițiul 7: Aplicaţi metoda DISKTRA pentru a determina drumurile de valoare minimă de la nodul s
(respectiv nodul 1) la nodurile ce pot fi atinse de s (respectiv nodul 1) din grafurile următoare.
Figura 1.26
Figura 1.27
Figura 1.28
Exercițiul 8:
a) Utilizând algoritmul lui Dijkstra determinaţi cele mai scurte drumuri de la nodul A la
celelalte noduri ale grafului din figura 1.29;
b) Ce modificări intervin în graful G*(A) al drumurilor de lungime minimă dacă muchiile {I,
G} şi {D, J} nu pot fi parcurse decât de la I la G, respectiv de la D la J?
B 8 8
C D
7 4 3 5 3 4
5 7
A H I J E
5 2 10
8 6
G F
7
Figura 1.29
Întrebări de control și teme de dezbatere
1. Ce este un graf și la ce poate folosi acesta în cadrul disciplinei studiate? Dați exemple.
2. Care sunt diferențele dintre un graf orientat/ parțial orientat/neorientat?
3. Care sunt diferențele dintre lanțuri/cicluri/drumuri și circuite?
4. Ce este un arbore? Când este el maximal?
5. Cum se aplică algoritmul lui Kruskal?
6. Cum se aplică algoritmul lui Dijkstra?
7. Dați exemple de situații întâlnite în practică în care vom folosi algoritmul lui Kruskal. Dar
algoritmul lui Dijkstra?
1. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Mitruț, D., Cercetări Operaționale. Optimizări în
rețele. Teorie și aplicații economice, Editura MATRIX ROM, București, 2002
2. Ciobanu, Gh, Nica, V, Mustață Fl., Mărăcine, V., Cercetări Operaționale cu aplicații în economie.
Teoria grafurilor și Analiza drumului critic, Editura MATRIX ROM, București, 1996
3. Nica, V., Cercetări operaționale I, Note de curs pentru învățământul la distanță, Editura ASE,
București, 2011;
4. http://www.asecib.ase.ro/cursurionline.htm, cursurile numărul: 1- Bazele Cercetării Operaționale; 13-
Culegere de probleme de Bazele Cercetării Operaționale- an II zi și distanță, București, Romania.