Sunteți pe pagina 1din 136

Cuprins

1. Modelarea matematică. Rolul ei în cercetarea operaţională ....................... 3

2. Programarea liniară .............................................................................................. 10

3. Elemente de teoria grafurilor ........................................................................... 43

4. Teoria oronanţării ................................................................................................ 81

5. Gestiunea stocurilor ............................................................................................. 110


Bazele cercetării operaţionale 3

MODELAREA MATEMATICĂ
ROLUL EI ÎN CERCETAREA OPERAŢIONALĂ

Cercetarea operaţională şi disciplinele înrudite

Cercetarea operaţională este una din disciplinele care a apărut către sfârşitul primei jumătăţi
a secolului nostru şi s-a dezvoltat spectaculos în special în ultimii ani, în strânsă legătură cu o serie
de alte discipline ale organizării şi conducerii, cum ar fi cibernetica, informatica sau analiza
sistemelor.
Pentru a avea o imagine de ansamblu asupra obiectului cercetării operaţionale aplicate în
economie, considerăm, deci, util să examinăm succint cum au apărut şi au evoluat disciplinele
organizării şi conducerii precum şi legăturile pe care le prezintă între ele.
Concepţia "organizării ştiinţifice", conturată către sfârşitul secolului al 19-lea şi începuturile
celui actual, consideră unitatea productivă ca un mecanism, în care oamenii, ajutaţi de maşini,
lucrează într-un determinism aproape total, pe baza unor dispoziţii acţionând ierarhic, conform unor
competenţe riguros definite.
Principalii reprezentanţi ai începuturilor organizării ştiinţifice, care formează aşa-numita
″şcoală clasică", stabilesc pentru prima oară o serie de principii ale conducerii ştiinţifice. Printre
acestea figurează binecunoscutul (şi încă actualul) principiu al excepţiei, principiul specializării
organizaţionale, principiul definirii riguroase a sarcinilor, principiul organizării ierarhice (Staff and
Line) ş.a.
Între conceptele utilizate de şcoala clasică nu figurează informaţia şi nici decizia:
conducerea "mecanismului" economico-social revine (în ultimă instanţă prin parcurgerea treptelor
piramidei ierarhice), întotdeauna, unui centru unic de decizie, pentru care informaţiile sunt
presupuse, aprioric, disponibile complet şi instantaneu, fără nici un fel de restricţie (de timp, de
spaţiu, de tehnică a transmiterii şi înmagazinării etc.).
Cu toată perspectiva sa limitată, şcoala clasică are marele merit al desţelenirii unui domeniu
virgin. Pionierii organizării ştiinţifice (Taylor, Gantt, Fayol) şi ceilalţi reprezentanţi ai şcolii clasice
pun pentru prima oară problema abordării raţionale a mecanismului funcţionării unei întreprinderi.
O mare parte din ideile şcolii clasice au fost criticate de reprezentanţii diferitelor şcoli care
s-au dezvoltat ulterior în ştiinţele organizării, dând naştere, după cum vom arăta în continuare, unor
teorii din ce în ce mai abstracte şi mai complexe. Merită să arătăm că în deceniul al şaselea, ca o
reacţie împotriva excesului de teoretizare, s-a dezvoltat o aşa-numită şcoală neoclasică, având drept
obiectiv reîntoarcerea la practică.
În deceniile care urmează după apariţia şi dezvoltarea şcolii clasice, problemele
informaţional-decizionale îşi afirmă prezenţa din ce în ce mai acut, pe măsura creşterii
dimensiunilor şi complexităţii organizaţiilor social-economice şi îşi caută rezolvări empirice de cele
mai multe ori nu la nivelul necesităţilor. Se stabilesc adesea circuite informaţionale paralele şi
supraabundente (redundante) iar în afara fluxurilor oficiale (formale) de date, se dezvoltă o
circulaţie neformală, uneori mai eficientă, dar cu caracter strict local. În procesele de decizie
continuă să prevaleze rutina, bunul simţ, talentul sau chiar improvizaţia.
În perioada următoare primului război mondial au putut fi constatate, ca urmare a acestor
rezolvări empirice, diferenţe considerabile, din punctul de vedere al competitivităţii, între unităţi
economice cu structuri organizatorice şi dotări tehnice identice sau similare. Analizele efectuate au
condus la o primă includere în perimetrul cercetării privind problemele organizării şi conducerii a
aspectelor informaţional-decizionale, până atunci ignorate şi totodată şi a aspectelor relaţiilor
umane. Se lărgeşte considerabil problematica organizării şi conducerii şi încep să circule cu din ce
în ce mai multă autoritate denumirile de management (ca activitate practică) şi management science
(ştiinţa conducerii).
Această perioadă este dominată de "şcoala comportamentului" care pune în centrul preocu-
părilor sale observaţia minuţioasă a comportamentului oamenilor în timpul procesului motivaţiilor
1
Modelarea matematică şi rolul ei în cercetarea operaţională 4

care determină coeziunea grupurilor.


Diferenţele substanţiale între şcoala comportamentului şi şcoala clasică se referă în special
la aspecte ca: descentralizarea deciziilor, promovarea încrederii între membrii unui grup (şi
neglijarea autorităţii) cu accentul pus pe responsabilitate (şi nu pe control)1.
Începând din deceniul al cincilea al secolului nostru2, se produce un fenomen care
promovează informaţia şi decizia printre elementele esenţiale ale epocii în care trăim.
La acest fenomen contribuie în primul rând creşterea extraordinară a complexităţii
structurale şi funcţionale, a organizaţiilor economice. Procesele de comasare-integrare, apariţia
structurilor organizaţionale cu activităţi productive pe arii geografice foarte mari (şi, de asemenea,
cu multiple probleme legate de desfacerea produselor), ridicarea nivelului de tehnicitate a
instalaţiilor şi corespunzător o specializare accentuată a profesiunilor - sunt numai câteva din
aspectele acestei complexităţi a unităţilor productive moderne.
Ca o consecinţă a acestei stări de fapt apare o extraordinară creştere a cantităţii de informaţii
deţinute şi manipulate în unităţile productive, accentuată şi de formularea unor condiţii mult mai
severe în ceea ce priveşte calitatea informaţiei (pertinenţa şi operativitatea acesteia). Alături de
producţia de bunuri apare o producţie de informaţii din ce în ce mai însemnată, informaţia devine
chiar un produs sau marfă ce se poate negocia, ajungând, alături de servicii, obiectiv al unor
organizaţii specializate.
În ceea ce priveşte procesele de decizie, pentru prima oară se pune în mod riguros şi pe scară
largă problema găsirii unor soluţii optime sau apropiate de cele optime, în marea diversitate de
probleme organizatorice şi de conducere.
Se poate considera că toate aceste schimbări au condus la o veritabilă revoluţie
informaţional-decizională în domeniul organizări şi conducerii şi, ca o consecinţă, la apariţia
managementului ştiinţific modern.
Principalele discipline privind conducerea, care au apărut în această etapă sunt: cercetarea
operaţională, cibernetica, informatica, psihosociologia organizării şi teoria generală a sistemelor.
• Cercetarea operaţională, care poate fi definită succint ca disciplină a optimizării
deciziilor cu ajutorul modelării matematice, a apărut în perioada celui de-al doilea război mondial.
Considerată de unii ca reprezentând şcoala matematică în disciplinele organizării şi
conducerii, cercetarea operaţională se caracterizează în primul rând prin procesul de elaborare a
modelelor, de regulă matematizate, care descriu procesele economice pentru care urmează a se lua
decizii cât mai avantajoase. Având în vedere importanţa modelării în cercetarea operaţională, îi vom
consacra în întregime paragraful următor.
• Cibernetica este ştiinţa care se ocupă cu conducerea şi reglarea sistemelor complexe.
Printre încercările cele mai caracteristice de perfecţionare a metodelor folosite în ultimele
decenii în ştiinţele organizării şi conducerii, alături de întrebuinţarea masivă a procedeelor
matematice şi a calculatoarelor electronice, se află şi utilizarea concepţiei sistemico-cibernetice.
Poate fi definită ca sistem orice secţiune a realităţii în care se identifică un ansamblu de
fenomene, obiecte, procese, concepte, fiinţe sau grupuri interconectate printr-o mulţime de relaţii
reciproce, precum şi cu mediul înconjurător şi care acţionează în comun în vederea realizării unor
obiective bine definite. Mulţimea elementelor şi a relaţiilor dintre acestea, precum şi a relaţiilor
între componente şi ansamblu formează structura sistemului. Mulţimea caracteristicilor unui sistem,
la un moment dat, determină starea sa.
Pentru analiza comportamentului sistemelor, în ansamblul lor, s-a propus conceptul de "cutie
neagră" care reprezintă sistemul privit ca un tot, făcând abstracţie de procesele sale interne. Cutia
neagră primeşte impulsuri din partea mediului înconjurător (″intrările" în sistem) şi, prelucrând
aceste impulsuri, le transformă în acţiuni asupra mediului ("ieşirile") din sistem.
Sistemele se pot clasifica: după natura lor (sisteme naturale - cum sunt organismele vii şi

1
Printre reprezentanţii "şcolii comportamentului" pot fi citaţi Mayo, Abraham Zalesnick şi D. G. Peltz.
2
Desigur, referirea la un moment în timp nu poate fi decât pur orientativă; aici am avut în vedere apariţia
primei generaţii de calculatoare electronice, a primelor lucrări de cibernetică şi a primelor echipe de cercetare
operaţională.
2
Bazele cercetării operaţionale 5

sisteme elaborate - tehnice, economice, conceptuale), după modul de funcţionare (deschise - în care
ieşirile nu influenţează intrările, şi închise, în care are loc influenţa intrărilor de către ieşiri) şi după
comportament (deterministe sau probabilistice1).
Mecanismul transformării intrărilor în ieşiri poate fi descris cu ajutorul funcţiilor de transfer,
care au diverse forme, particulare, după natura sistemului.
Sistemul devine cibernetic2 atunci când apare reglarea (conexiunea inversă, feedback-ul),
adică o intervenţie asupra intrărilor în scopul menţinerii ieşirilor la nivelul unor parametri-obiectiv
doriţi.
Se înţelege că expresia analitică a funcţiilor de transfer şi a mecanismului reglării conduce la
forme matematice foarte diverse şi de cele mai multe ori foarte complexe.
Ansamblul economiei poate fi privit ca un sistem ale cărui elemente componente
(organizaţiile social-economice de diferite mărimi) sunt intercorelate prin fluxuri materiale şi
informaţionale şi au un comportament orientat spre atingerea unor obiective precise. La rândul lor,
organizaţiile, care sunt elemente componente ale sistemului-ansamblu, pot fi considerate sisteme,
diviziunea putându-se continua până la identificarea unor componente elementare indivizibile.
Scopul cercetării cibernetico-sistemice aplicată la realitatea social-economică îl constituie
surprinderea comportamentului sistemelor, una din căile de descriere a acestui comportament fiind
găsirea expresiei funcţiilor de transfer şi a mecanismului reglării.
Adoptarea perspectivei cibernetico-economice în ştiinţele social-economice reprezintă un
câştig teoretic remarcabil şi este foarte probabil ca, în următorii ani, să asistăm la închegarea unei
teorii cibernetico-sistemice complete şi unitare aplicată la realitatea social-economică pe scară
largă.
• Informatica poate fi definită ca disciplina prelucrării datelor cu ajutorul echipamentelor
automate de prelucrare.
Principalele probleme care pot fi considerate ca aparţinând informaticii sunt: culegerea
datelor, pregătirea datelor, codificarea acestora, transmiterea lor, prelucrarea datelor pe
echipamente, stocarea şi conservarea lor.
Problema dezvoltării explozive a informaticii şi a rolului ei în economie, administraţie,
cercetare spaţială, strategie militară, ştiinţă, învăţământ etc, este bine cunoscută şi de nespecialişti.
Vom arăta numai că, de la câteva calculatoare electronice şi puţini specialişti în informatică, în
1945, s-a ajuns azi, pe plan mondial, la milioane de calculatoare şi specialişti.
• Psihosociologia organizării a apărut ca o nouă orientare în disciplinele conducerii în jurul
anului 1950.
St. March, F. Simon şi alţi reprezentanţi ai aşa-numitei "şcoli psihosociologice" abordează,
în principal, problema influenţei factorilor psihologici şi sociologici în compartimentul decizional.
Luarea deciziilor, în concepţia acestei şcoli, nu este funcţie numai de criterii raţionale ci şi de modul
de percepere a stimulilor, depinzând de poziţia decidentului şi de relaţiile cu ceilalţi membri ai
grupului.
Cu alte cuvinte, oricât s-ar face apel, în organizarea şi conducerea organismelor economice,
la metode şi echipamente de mare fineţe şi tehnicitate, în ultimă instanţă oamenii sunt cei de care
depinde funcţionarea eficientă a sistemului, de aceea, trebuie studiate reacţiile individuale şi relaţiile
dintre indivizii din sistem.
• Teoria generală a sistemelor (TGS), strâns legată de cibernetică, propune o perspectivă
care să sintetizeze ideile viabile ale diferitelor orientări în ştiinţele organizării şi conducerii.
Iată câteva din ideile de bază ale teoriei generale a sistemelor, după "Industrial Dynamics" a
lui J. Forrester:

a) orice sistem este alcătuit din elemente (părţi) interdependente, acţionând în comun în

1
Sistemele deterministe au o comportare previzibilă, în timp ce sistemele probabilistice au o comportare aleatoare.
2
Apariţia şi dezvoltarea ciberneticii (începând din deceniul al 5-lea al secolului nostru) este legată de numele unor
savanţi celebri ca Norbert Wiener, Claude Shannon, Ross Ashby etc.
3
Modelarea matematică şi rolul ei în cercetarea operaţională 6

virtutea unui scop;


b) ansamblul legăturilor între elementele sistemului, precum şi al legăturilor cu întregul,
formează structura sistemului S;
c) complexitatea sistemelor depinde mai mult de structura sistemului decât de natura părţilor
sale;
d) două sisteme cu structuri parţial identice se numesc homomorfe (sistemul mai simplu va
constitui un model al sistemului homomorf mai complex);
e) două sisteme homomorfe vor avea un comportament asemănător, de unde rezultă
posibilitatea de studiu a proprietăţilor sistemelor reale prin simulare;
f) structura (statică) unui sistem preexistă comportamentului său (dinamicii sistemului);
g) mişcările într-un sistem se realizează prin fluxuri presupuse concrete şi continue;
h) într-un organism economic toate categoriile de mişcări pot fi grupate în următoarele tipuri
de fluxuri interconectate; 1) fluxuri materiale; 2) fluxuri de comenzi; 3) fluxuri băneşti; 4)
fluxuri umane; 5) fluxuri de echipamente şi 6) fluxuri informaţionale;
i) fluxul informaţional are un rol central în funcţionarea sistemelor;
j) procesele decizionale sunt considerate şi ele ca având un rol central în mecanismul
sistemelor; ele sunt presupuse a fi discontinue;
k) reglarea este un element caracteristic al funcţionării sistemelor;
l) procesele care au loc în sistemele economice sunt, de regulă, neliniare.

Pe baza acestor premise, Forrester construieşte un procedeu de descriere a


comportamentului unei întreprinderi, care utilizează metode cibernetice, informatice,
psihosociologice, precum şi procedee de modelare matematică. De asemenea, sunt folosite analogii
fizice şi tehnice (de exemplu, fluxurile sunt examinate în sens hidraulic) iar simularea este utilizată
ca un procedeu de bază în descrierea comportamentului sistemelor.
În linii mari în "Industrial Dynamics" se urmăreşte înţelegerea stării unui sistem cu ajutorul
unor ecuaţii care descriu în timp intrările, transformările şi ieşirile din sistem, pentru cele şase tipuri
de fluxuri amintite mai sus. (E vorba deci de găsirea funcţiilor de reacţie ale sistemului.) Pe baza
acestei descrieri matematice se pot face simulări pe calculator, cu ajutorul cărora se prevede
evoluţia sistemului.
Ideile şi procedeele TGS, impresionante prin complexitatea lor, sunt în curs de sedimentare
metodologică şi experimentare practică.
Marea majoritate a propoziţiilor enumerate mai sus şi care stau la baza teoriei lui Forrester
se regăsesc explicit sau implicit şi la baza metodologiilor practice de analiză sistemică. Conceptele
de flux informaţional şi proces decizional sunt dominante şi în analiza sistemică la fel ca în TGS, iar
urmărirea mecanismului transformării intrărilor în ieşiri constituie obiectul principal al analizei de
sistem la fel ca şi al TGS. Procedeul folosit de analiza sistemică nu mai este însă matematic, ci
bazat pe descrierea explicită, calitativă, a proceselor informaţional-decizionale. În plus, în practica
analizei de sistem, odată cu proiectarea proceselor informaţionale şi în special a celor decizionale,
se urmăreşte îmbunătăţirea lor, deci se au în vedere criterii de optim. În acţiunea aceasta de
proiectare eficientă a procesului informaţional-decizional, analiza sistemică face din plin apel la
procedeele cercetării operaţionale şi la tehnicile informaticii. În ceea ce priveşte folosirea metodelor
psihosociologice, în analiza de sistem există încercări recente în acest sens.

Rolul modelării în cercetarea operaţională

Conceptul de "model", atât de mult folosit în ştiinţa modernă, este relativ nou, dar metoda
modelării este tot atât de veche pe cât sunt preocupările oamenilor pentru cunoaşterea ştiinţifică3.
Putem considera că modelul este o reprezentare izomorfă a realităţii, care, oferind o imagine
intuitivă şi totuşi riguroasă, în sensul structurii logice, a fenomenului studiat, facilitează
3
Oamenii de ştiinţă din toate timpurile au folosit "modele" în cele mai diverse domenii ale cunoaşterii
ştiinţifice. Până de curând însă ei utilizau modelarea fără a folosi termenul respectiv.
4
Bazele cercetării operaţionale 7

descoperirea unor legături şi legităţi imposibil sau foarte greu de găsit pe alte căi.
În elaborarea modelelor economico-matematice, teoria economică are un rol deosebit de
important întrucât ea formulează categoriile, conceptele şi legile obiective ale realităţii economice.
Numai sprijinindu-se pe teoria economică modelele matematice pot reprezenta fidel fenomenele
economice.
Modelul, ca instrument al cunoaşterii ştiinţifice, este folosit în foarte numeroase discipline
teoretice şi practice. Fără pretenţia de a face o clasificare riguroasă a tipurilor de modele, vom arata
că ele pot fi: modele verbal-descriptive - folosite în toate disciplinele nematematizate, modele
matematice, modele fizice analogice (de tipul machetelor statice sau dinamice), modele grafice etc.
În ştiinţele economice, în special în disciplinele organizării şi conducerii, modelele sunt
utilizate în toată diversitatea de tipuri care există. În ultimele decenii însă, se conturează din ce în ce
mai mult tendinţa utilizării cu precădere, în aceste discipline, a modelelor de tip matematic, datorită
în special capacităţii acestora de a condensa riguros esenţialul, cât şi posibilităţii lor de a fi
programate cu ajutorul calculatoarelor electronice, alcătuind împreună un instrument de investigaţie
ştiinţifică de o putere necunoscută până în prezent, o prodigioasă "prelungire" a inteligenţei umane.
O sistematizare metodologică a modelelor matematice întrebuinţate în disciplinele
organizării şi conducerii social-economice ar fi riscantă, având în vedere mutaţiile continue şi
spectaculoase care au loc în aceste discipline şi, în plus, ar avea un caracter pur scolastic, fără
utilitate teoretică sau practică reală. De aceea, ne vom limita, în continuare, să enumerăm
principalele tipuri de modele matematice cunoscute în acest domeniu.
După întinderea domeniului studiat, modelele care descriu realitatea economică pot fi:
macroeconomice - cele care se referă la economia naţională, la ramură (subramură) sau la economia
unui teritoriu mare (un judeţ, o anumită zonă industrială, agricolă etc.) şi microeconomice - la nivel
de întreprindere, uzină, trust, combinat etc.
Modelele cibernetico-economice urmăresc să studieze relaţia dintre intrări şi ieşiri într-un
organism economic, cu evidenţierea fenomenelor de reglare care determină buna funcţionare a
sistemului. Majoritatea modelelor cibernetico-economice sunt macroeconomice.
Modelele econometrice descriu comportamentul organismelor economice cu ajutorul unor
sisteme de ecuaţii în care elementele numerice sunt determinate statistic. Şi aceste modele sunt, de
obicei, macroeconomice.
Modelele de simulare încearcă să stabilească modul de funcţionare al unor organisme macro
sau microeconomice prin acordarea unor combinaţii de valori întâmplătoare variabilelor
independente care descriu procesele. Prin "citirea" valorilor pe care le capătă în felul acesta
variabilele dependente, se obţin mărimi semnificative în procesul studiat.
Modelele sistemice au drept obiectiv surprinderea ansamblului aspectelor dintr-un organism
economic (de exemplu, în modelele Forrester se consideră că prin identificarea celor şase fluxuri
caracteristice se poate cunoaşte comportarea sistemului ca un tot).
Modelele cercetării operaţionale se caracterizează prin căutarea unei soluţii optime sau
apropiată de optim, pentru fenomenul studiat. Modelele cercetării operaţionale se bazează pe o mare
diversitate de procedee matematice şi au aplicaţii la nivel macro, dar în special la nivel
microeconomic. Ele reprezintă principalul instrument pentru optimizarea deciziilor în analiza de
sistem.
Tipologia de mai sus este foarte relativă, între grupele menţionate existând frecvente
asemănări şi întrepătrunderi. Astfel, modelele econometrice sunt adesea de tip cibernetic, simularea
se utilizează în mai toate tipurile de modele matematice, modelele cercetării operaţionale pot fi
folosite în descrierea sistemică a unui organism etc.
Vom examinăm, în continuare, procedeele practice de elaborare şi utilizare a modelelor
matematice în disciplinele organizării şi conducerii.
În primul rând trebuie subliniat faptul că activitatea de modelare, pentru a fi eficientă,
trebuie desfăşurată întotdeauna în cadrul analizei de sistem, şi anume ca un moment al etapei de
proiectare a noului sistem. O serie de operaţii care se desfăşoară în cadrul analizei de sistem
înaintea acestui moment au un caracter pregătitor pentru efectuarea modelării, iar altele, ulterioare

5
Modelarea matematică şi rolul ei în cercetarea operaţională 8

ei, sunt necesare pentru aplicarea în practică a modelelor elaborate.


Vom arăta în continuare care sunt principalele faze ale elaborării unui model matematic
într-o problemă de organizare-conducere social-economică, având grijă să evidenţiem cum se
împletesc aceste faze cu alte operaţii ale analizei de sistem.
• Prima fază a modelării, care are un caracter pregătitor, este cunoaşterea realităţii în
organismul studiat, în scopul îmbunătăţirii mecanismului informaţional-decizional. Descrierea
logicii proceselor decizionale, alături de considerarea obiectivelor viitorului sistem, sunt
principalele elemente ale cunoaşterii realităţii necesare modelării.
• A doua fază a modelării o reprezintă construirea propriu-zisă a modelului. Această
operaţie, în marea majoritate a cazurilor din practică, constă în aplicarea unui instrument clasic de
modelare ales din gama extrem de variată pe care ne-o pune la dispoziţie teoria cercetării
operaţionale. În astfel de situaţii, abilitatea analistului constă în stabilirea corespondenţei dintre
realitate şi instrumentul de modelare cunoscut din literatura de specialitate. Există şi cazuri când nu
se poate stabili o astfel de corespondenţă, analistul fiind obligat să elaboreze modele noi. Acestea
pot fi de două feluri: a) combinaţii de modele clasice, din domeniul teoriei şi b) modele noi
propriu-zise. În primul caz, totul se reduce la buna cunoaştere a realităţii şi a teoriei, la care trebuie
adăugată o doză de abilitate în combinarea metodelor. În cazul al doilea, este vorba despre creaţie
originală. Elaborarea unui model matematic realmente original reclamă, pe lângă profunda
cunoaştere a realităţii care urmează a fi modelată, o foarte solidă cultură matematică, imaginaţie şi
talent. După cum va rezulta din parcurgerea în prezentul curs a modelelor clasice ale cercetării
operaţionale, există o mare diversitate în structura, matematica şi logica modelelor, de la modele
foarte simple, neaxiomatizate, cum sunt cele din programarea liniară, la modele combinatorice, în
probleme de teoria grafelor, analiza drumului critic şi programarea operativă a producţiei şi până la
modele de mare fineţe, prezentate axiomatizat, cum sunt cele ale utilităţii sau deciziilor de grup.
Evident, elaborarea în forma axiomatizată a unui model reprezintă un stadiu superior în procesul
modelării care, însă, nu poate fi totdeauna atins în practică.
Un model axiomatizat (sistem axiomatic) cuprinde:

- axiomele sistemului, reprezentând propoziţii exprimate în formă matematică, de regulă


foarte puţine, care conţin unele adevăruri de mare generalitate privind fenomenul care se
modelează, atât de generale, încât toate constatările concrete şi particulare vor putea fi
deduse din cele generale;
- reguli de inferenţă, reprezentând prescripţii riguroase, singurele admise în sistem, prin
care se trece de la axiome la teoreme, sau de la teoreme deja demonstrate, la altele noi;
- teoreme, adică propoziţii mai mult sau mai puţin particulare, exprimate matematic, deduse
prin reguli de inferenţă din aproape în aproape din axiome şi care exprimă proprietăţi ale
fenomenului modelat.

Când în procesul de modelare axiomatică se explicitează limitativ conceptele care urmează a


fi utilizate, adică se dă de la început o listă a noţiunilor şi operaţiilor matematice admise în sistem,
se obţine o formă superioară de sistem axiomatic numit sistem formal.
Sistemele formale sunt încă foarte puţin utilizate în ştiinţă şi cu atât mai puţin în disciplinele
organizării şi conducerii economice.
Axiomatizarea şi, în ultima analiză, formalizarea, reprezintă viitorul în modelarea
matematică, datorită rigorii excepţionale pe care o introduc, diminuării considerabile a elementelor
de intuiţie şi arbitrar, care, deşi mult mai puţine decât în modelele nematematizate, sunt încă
prezente în modelarea matematică axiomatizată.
• A treia fază a modelării este confruntarea modelului cu realitatea şi eventual
experimentarea sa. Această fază se realizează în cadrul implementării sistemului, care poate fi
considerată a patra şi ultima fază a modelării.
În încheierea acestui paragraf, să examinăm câteva caracteristici ale instrumentelor de
modelare matematică pe care ni le pune la dispoziţie cercetarea operaţională.
6
Bazele cercetării operaţionale 9

Una din principalele caracteristici ale tuturor metodelor cercetării operaţionale este faptul că
unele probleme ale cercetării operaţionale pot fi privite, din perspectivă pur teoretică, ca probleme
de matematică pură. Evident, nu aceasta va fi perspectiva pe care o vom adopta în cele ce urmează,
întrucât vom privi metodele cercetării operaţionale strâns legate de problemele practice.
Din punct de vedere istoric, unele dintre problemele cercetării operaţionale s-au ivit, ce e
drept, în special sub aspect pur matematic, cu mult înainte de a fi apărut activitatea organizată şi
denumirea de cercetare operaţională. Astfel, unele noţiuni de teoria grafelor se cunosc de mai bine
de un secol, teoria aşteptării îşi are originea în unele lucrări ale lui Erlang din deceniul al 2-lea al
secolului nostru, iar teoria stocurilor apare către anul 1930. Ca disciplină de sine stătătoare,
cercetarea operaţională a apărut însă în timpul celui de-al doilea război mondial, prin înfiinţarea
unor echipe complexe (matematicieni, ingineri, economişti, biologi, psihologi ş.a.) însărcinate cu
optimizarea deciziilor privind unele acţiuni pregătitoare operaţiilor militare. După război, echipele
astfel formate s-au reprofilat rapid pentru activităţi paşnice. Dezvoltându-se spectaculos în ultimele
trei decenii, preocupările teoretice şi în special practice, în domeniul cercetării operaţionale, au
ajuns să antreneze astăzi pe plan mondial sute de mii de specialişti.
În prezent nu se mai poate concepe conducerea unei activităţi tehnico-economice importante
fără a face apel la metodele cercetării operaţionale, bineînţeles împreună cu celelalte tehnici
moderne cum ar fi informatica, analiza de sistem ş.a..

7
Bazele cercetării operaţionale 10

PROGRAMAREA LINIARĂ
Prezentare generală

Mulţimea sistemelor economice concrete şi multitudinea problemelor conducerii acestora au


creat o diversitate de reprezentări economico-matematice, denumite modele.
Varietatea acestora este determinată, în principal, de structura "obiectului" analizat, de
scopul cercetării precum şi de informaţia disponibilă.
Modelele de programare matematică şi mai ales subclasa acestora – modelele de programare
liniară – ocupă un loc deosebit de important, atât în teoria cât şi în practica economică. Teoria
economică a beneficiat de aportul abordării interdisciplinare care a permis aprofundarea analizei
eficienţei maximale a sistemelor complexe, a permis descoperirea unor concepte noi ale optimului
economic, a perfecţionat metodele de cercetare şi cunoaştere iar practica economică s-a îmbogăţit
cu un instrument deosebit de util analizei economice şi fundamentării deciziilor.
Structura modelului general de programare liniară se constituie în primul rând prin mulţimea
de activităţi {A1, A2, ... An} care compun sistemul economic analizat, mulţimea de resurse utilizate
{R1, R2, ... Rm} precum şi prin relaţiile tehnico-economice dintre acestea. Legătura dintre activităţi
şi resurse este determinată de tehnologia de fabricaţie corespunzătoare fiecărei activităţi Aj
(j=1,...,n) şi poate fi caracterizată numeric prin vectorul coloană a(j) de componente (a1j, a2j, ... amj).
Elementele {aij, i = 1,...,m; j = 1,...,n} se numesc coeficienţi tehnici sau coeficienţi de consum
specific şi arată ce cantitate din resursa Ri se consumă pentru producerea unei unităţi din produsul
(serviciul) Pj (ca rezultat al activităţii Aj). Toate "tehnologiile" de fabricaţie definite de vectorii
coloană a(j) se pot organiza într-o matrice A cu m linii şi n coloane; fiecare linie se referă la o
resursă Ri (i = 1,...,m) şi fiecare coloană se referă la o activitate Aj (j = 1,...,n).
Notând cu xj (j = 1,...,n) rezultatul activităţii Aj într-o perioadă dată şi cu bi (i = 1,...,m)
cantităţile disponibile din resursele Ri (i = 1,...,m), se pot scrie matematic următoarele restricţii
tehnico-economice:
a 11 x 1 + a 12 x 2 + ... + a 1n x n ≤ b 1
(1) a 21 x 1 + a 22 x 2 + ... + a 2n x n ≤ b 2 sau A⋅x ≤ b
LLLLLLLLLLLL
a m1 x 1 + a m2 x 2 + ... + a mn x n ≤ b m

 a 11 a 12 L a 1n   x1   b1 
 L a 2n  ; x = x  b 
unde A =  a 21 a 22
  2  şi b =  2
 M M O M   M   M 
 a m1 a m2 L a mn  xn  bn 

Fiecare inecuaţie/restricţie încorporează două afirmaţii:

a. cantitatea consumată dintr-o resursă nu poate depăşi volumul disponibil (propoziţie de


logică economică)
b. consumul total Rij din resursa Ri pentru efectuarea activităţii Aj este proporţional cu
intensitatea acesteia, adică cu xj, deci Rij(∗) = aij ⋅ xj (ipoteză simplificatoare)

(∗)
De aici rezultă posibilitatea să calculăm coeficienţii aij pe baza informaţiilor disponibile privind cantităţile consumate
R ij
Rij şi nivelul xj: aij = ; i = 1,...,m; j = 1,...,n
xj

21
Programarea liniară 11

Sistemul de restricţii (1) realizează legătura dintre resurse şi activităţi prin intermediul celor
m restricţii liniare.
Modelul problemei de programare liniară conţine restricţii de tipul (1) precum şi un criteriu
de "performanţă" care să permită evaluarea eficienţei fiecărei activităţi. În funcţie de scopul urmărit,
putem alege drept criteriu de eficienţă un indicator care măsoară efortul, unul care măsoară
rezultatul sau un indicator exprimat ca raport între rezultat şi efort (sau efort pe rezultat).
Este evident că eficienţa maximă înseamnă minimizarea efortului şi maximizarea
rezultatului, iar conceptul de optim se defineşte, în acest caz, ca un program x∈ Rn care minimizează
sau maximizează o funcţie obiectiv şi, în acelaşi timp, satisface toate restricţiile tehnico-economice.
Presupunând că fiecare componentă a vectorului linie c = (c1, c2, ..., cn) măsoară eficienţa
unei unităţi din rezultatul activităţii Aj, atunci se poate introduce funcţia liniară:
f(x) = c1⋅x1 + c2⋅x2 + ... + cn⋅xn
care evaluează performanţa oricărui program x.
Sintetizând, obţinem următorul program de programare liniară:

optim[ f (x )] (1)
x
 n
 ∑ a ij ⋅ x j ≤ b i i ∈ I1
 j=1 unde I1 ∪ I2 = {1,2,...,m} (2)
 n
∑ a kj ⋅ x j ≥ b k k ∈ I2
 j=1

 xj ≥0 j = 1, n (3)


Relaţiile (1), (2) şi (3) constituie împreună modelul general al unei probleme de programare
liniară, având fiecare un rol specific:
n
1. relaţia (1), unde f(x) = ∑ c j ⋅ x j este denumită funcţia obiectiv de eficienţă a problemei,
j=1
evaluează eficienţa/performanţa fiecărei variante de program x;
n
2. relaţiile (2) de tipul ∑ a ij ⋅ x j ≤ b i reprezintă restricţii de tip resurse; iar restricţiile de
j=1
n
tipul ∑ a kj ⋅ x j ≥ b k se referă la restricţii tehnico-economice de tip calitativ (şi ca urmare
j=1
indicatorul bk este limita inferioară impusă "reţetei optime";
3. relaţia (3) xj ≥ 0 j = 1,...,n, numită condiţia de nenegativitate a variabilelor, asigură
obţinerea unei soluţii realizabile din punctul de vedere al logicii economice.
După cum s-a arătat la început, structura concretă a unei aplicaţii în economie este
determinată în primul rând de obiectivul urmărit.
Astfel, în cazul problemei determinării structurii sortimentale optime a producţiei, se
cunosc cantităţile disponibile (cantităţile de care se poate face rost pe perioada analizată) din fiecare
materie primă {bi, i =1,...,m}, coeficienţii tehnologici {aij, i = 1,...,m, j = 1,...,n} (aij reprezintă
cantitatea din materia primă i necesară fabricării unei unităţi din produsul de tipul j), cantităţile
maxime { x j , j = 1,...,n} şi minime { x j , j = 1,...,n} ce pot fi produse din fiecare sortiment în
perioada analizată şi profiturile unitare {pj, j = 1,...,n} ale fiecărui tip de produs. Se cere găsirea
acelor cantităţi xj care trebuie fabricate din fiecare tip de produs astfel încât să se obţină profitul
maxim, în condiţiile nedepăşirii disponibilurilor din fiecare resursă.

22
Bazele cercetării operaţionale 12

Pentru simplificarea modelului, se presupune că preţul unui bun nu depinde de cantitatea


produsă din acesta sau din celelalte, consumul din fiecare materie primă este direct proporţional cu
cantitatea produsă şi, pentru fiecare bun, consumurile dintr-o resursă sau alta nu se condiţionează
reciproc.
Problema matematică echivalentă este:

 max (p1x1 + p 2 x 2 + ... + p n x n )


x j j=1, n
a x + a x + ... + a x ≤ b i = 1,..., m
 i1 1 i2 2 in n i

 x j ≤ x j ≤ x j j = 1,..., n
x j ≥ 0 j = 1,..., n

În unele probleme, în loc de profiturile pj se cunosc veniturile unitare vj sau costurile unitare
cj sau alt criteriu de eficienţă, scopul fiind maximizarea venitului, minimizarea costurilor respectiv
optimul indicatorului de eficienţă respectiv, sau toate la un loc. De asemenea pot lipsi condiţiile de
limitare a producţiei sau pot exista şi alte condiţii.
La o problemă de programare operativă a producţiei restricţiile se referă la o serie de
maşini (utilaje) cu care se execută produsele dorite, bi fiind disponibilul de timp al utilajului i pe
perioada analizată iar aij timpul necesar prelucrării unui produs de tipul j pe utilajul i, scopul fiind
maximizarea producţiei.
Ca urmare, modelul are forma:

 max (x 1 + x 2 + ... + x n )
 x j ( j =1,..., n)

 a i1 x 1 + a i2 x 2 + ... + a in x n ≤ b i i = 1,..., m

 x j ≥ 0 i = 1,..., n

Dacă se doreşte obţinerea unui meniu (reţete furajere), care să asigure necesarurile {bi, i =
1,...,m} dintr-un număr de m substanţe esenţiale organismului, având la dispoziţie un număr de n
alimente, cunoscându-se cantităţile {aij, i = 1,...,m, j = 1,...,n} din fiecare substanţă pe care le
conţine o unitate de măsură din fiecare aliment şi costurile {cj, j = 1,...,n} unei unităţi de măsură din
fiecare aliment, putem scrie modelul:

 min (c 1 x 1 + c 2 x 2 + ... + c n x n )
 x j ( j =1,..., n)

 a i1 x 1 + a i2 x 2 + ... + a in x n ≥ b i i = 1,..., m

 x j ≥ 0 j = 1,..., n


Variabilele xj reprezintă, în acest caz, cantitatea din fiecare aliment ce va intra în meniu iar
n
f(x) = ∑c j ⋅ xj este costul total al reţetei definită de vectorul x.
j=1

23
Programarea liniară 13

Vom încheia exemplificarea cu prezentarea modelului amestecului optim de produse


petroliere. Presupunem că o rafinărie dispune de n tipuri de benzine, prin amestecarea acestora
urmând să obţină o benzină cu m caracteristici impuse şi la un preţ minim posibil. O serie de
caracteristici trebuie să fie îndeplinite cu o limită inferioară (de exemplu cifra octanică), altele cu o
limită superioară (de exemplu densitatea sau temperatura de fierbere) şi altele cu egalitate (de
exemplu cantitatea necesară), aceste limite fiind b 1i , i = 1,...,m1 , b i2 , i = 1,...,m2 respectiv b 3i , i =
1,...,m3 cu m1 + m2 + m3 = m. De asemenea, trebuie ţinut cont de cantităţile disponibile din fiecare
benzină Di, i = 1,...,n. Se cunosc caracteristicile fiecărei benzine disponibile, date într-o matrice A ∈
Mm×n, unde aij este valoarea caracteristicii i pentru benzina j şi preţurile unitare ale fiecărei benzine,
notate pj, j = 1,...,n. Dacă notăm cu xj, j = 1,...,n, cantităţile din fiecare benzină care vor forma
amestecul optim, atunci avem de rezolvat problema:

 n 
min ∑ p j ⋅ x j 
xj
 j=1 
n
∑ a ij ⋅ x j ≥ b1i i = 1,..., m1
 jn=1
∑ a ij ⋅ x j ≤ bi2 i = m1 + 1,..., m1 + m 2
 j=1
n
∑ a ij ⋅ x j = b3i i = m1 + m 2 + 1,..., m
 j=1
x j ≤ D j j = 1,..., n
x ≥ 0 j = 1,..., n
 j

Programarea matematică

Se observă că toate aceste probleme, cu toate că reprezintă situaţii economice total diferite,
sunt aplicaţii în sfera activităţii economice ale următoarei probleme de optimizare:

(max ) sau (min ) f (x1 , x 2 ,..., x n ) 1.1



 g i (x1 , x 2 ,..., x n ) ≤ b i i = 1,..., n 1.2
x1 , x 2 ,..., x n ∈ Ω ⊆ R n 1.3

în care funcţiile f,gi : Rn → R pot avea orice formă şi proprietăţi (liniare, convexe, continui,
diferenţiabile etc) iar Ω poate fi orice submulţime a lui Rn (continuă sau discretă, mărginită sau
nemărginită, convexă sau neconvexă, finită sau infinită etc) şi în care dorim să găsim minimul sau
maximul funcţiei f în variabilele xi care îndeplinesc restricţiile 1.2 şi 1.3. O astfel de problemă se
numeşte problemă de programare matematică.
Funcţia (1.1) se numeşte funcţia obiectiv a problemei de optimizare. În aplicaţiile
economice, ea reprezintă criteriul de performanţă urmărit: maximizarea beneficiului, maximizarea
producţiei marfă, minimizarea costului producţiei, maximizarea gradului de încărcare al utilajelor
sau minimizarea timpului de staţionare al acestora, maximizarea veniturilor etc.
Inegalităţile (1.2), în care gi sunt funcţii de n variabile iar bi sunt constante, se numesc
restricţii ale problemei de optimizare. Ele traduc în limbaj matematic condiţiile de natură economică
sau tehnologică în care se desfăşoară procesul economic modelat, cum ar fi: nedepăşirea stocurilor
disponibile de resurse (materii prime, capacităţi de producţie, forţă de muncă, fonduri băneşti, timp
etc), îndeplinirea sau depăşirea unor indicatori economici (producţia fizică, netă) etc.

24
Bazele cercetării operaţionale 14

Condiţiile (1.3), impuse "direct" variabilelor, depind de natura problemei studiate. De cele
mai multe ori, Ω este mulţimea vectorilor x = (xl,...,xn) ∈ Rn cu toate componentele nenegative şi
acest fapt se justifică prin aceea că, în general, xi reprezintă "nivelele" unor activităţi de producţie,
nivele care nu pot fi negative. În unele probleme de optimizare, cum ar fi cele de croire sau
ordonanţare, variabilele desemnează mărimi indivizibile şi deci nu pot lua decât valori întregi.
Mulţimea Ω va fi formată în acest caz din vectori x cu toate componentele întregi şi nenegative. În
alte probleme, ca de pildă cele de afectare, portofoliu etc, variabilele nu pot lua decât valorile 0 sau
1 (variabile bivalente) şi ca atare Ω va fi formată din vectorii x = (x1, …,xn) cu toate componentele
0 sau 1. Caracteristic acestor tipuri de probleme este faptul că Ω devine o submulţime discretă din
Rn, de unde şi numele generic de probleme de optimizare discretă dat acestora.
O soluţie a unei astfel de probleme are deci trei proprietăţi:

P1. verifică restricţiile 1.2


P2. verifică restricţiile "directe" 1.3
P3. optimizează funcţia obiectiv pe mulţimea vectorilor care îndeplinesc condiţiile P1. şi P2.

În teoria programării matematice se folosesc, pentru claritatea şi simplitatea expunerii,


următoarele noţiuni:

soluţie a problemei de optimizare = un vector x ∈ Rn care verifică restricţiile 1.2


soluţie admisibilă a problemei de optimizare = un vector x ∈ Rn care verifică restricţiile 1.2 şi 1.3
⇔ o soluţie care verifică restricţiile 1.3
soluţie optimă a problemei de optimizare = un vector x ∈ Rn care verifică restricţiile 1.2 şi
1.3 şi optimizează funcţia obiectiv pe mulţimea
tuturor vectorilor cu această proprietate
⇔ o soluţie care verifică restricţiile 1.3 şi
optimizează funcţia obiectiv pe mulţimea
tuturor soluţiilor cu această proprietate
⇔ o soluţie admisibilă care optimizează
funcţia obiectiv pe mulţimea soluţiilor
admisibile

Izvorâtă din studiul problemelor extremale ale analizei matematice clasice, programarea
matematică a cunoscut în ultimele decenii o dezvoltare spectaculoasă, explicabilă numai în parte
prin progresele înregistrate în matematică. Într-adevăr, această dezvoltare a fost puternic stimulată
de creşterea vertiginoasă a complexităţii activităţilor economice, care a furnizat probleme cu
structuri din ce în ce mai complicate, ca şi de rapida perfecţionare a mijloacelor automate de calcul,
singurele capabile să testeze eficienţa practică a metodelor teoretice elaborate. La rândul ei,
programarea matematică, prin rezultatele ei, a adus un considerabil aport la perfecţionarea
metodelor de conducere în economie şi a impulsionat cercetările - în plan teoretic - privind
modelarea sistemelor economice complexe, studiul şi interpretarea legilor şi proceselor economice.
În ceea ce priveşte rezolvarea acestor probleme, este evident că varietatea extremă a acestora
face imposibilă găsirea unui algoritm practic care să le poată rezolva pe toate, dar putem găsi (sau
ne putem aştepta să găsim), pentru fiecare caz particular, un algoritm de rezolvare care să-şi tragă
eficacitatea tocmai din folosirea tuturor particularităţilor cazului respectiv. În prezent există sute de
algoritmi de rezolvare, cercetarea problemei evoluând din ce în ce mai mult spre testarea şi
îmbunătăţirea acestora decât spre găsirea unora noi.

25
Programarea liniară 15

Problema de programare liniară

Definiţia 1. Dacă într-o problemă de programare matematică funcţia obiectiv f şi funcţiile


gi, din restricţiile 1.2, sunt funcţii liniare atunci problema se numeşte problemă de programare
liniară. O problemă de programare liniară este, deci, un caz particular al problemelor de programare
matematică şi, ţinând cont de forma oricărei funcţii liniare, rezultă că forma generală a oricărei
probleme de programare liniară este:

max (min ) f = c 1 ⋅ x 1 + c 2 ⋅ x 2 + ... + c n ⋅ x n

 ≤
a i1 ⋅ x 1 + a i2 ⋅ x 2 + ... + a in ⋅ x n = b i i = 1,..., n
 ≥
 ≤0
x 1 , x 2 ,..., x n ≥ 0
 oarecare

unde cj (coeficienţii funcţiei obiectiv), aij (coeficienţii restricţiilor) şi bi (termenii liberi) sunt
constate reale.

Forma conică şi forma standard a unei probleme de programare liniară

Cu toate că problema de programare liniară este cea mai simplă dintre problemele de
programare matematică, ea este încă destul de complicată, prin faptul că orice restricţie poate avea
trei forme diferite iar obiectivul poate fi minimizarea sau maximizarea funcţiei f. Este puţin probabil
că există un algoritm şi simplu şi aplicabil la toate cazurile.
Din acest motiv este mult mai simplu să găsim o anumită formă (cât mai simplă) cu
proprietatea că pentru orice problemă P, există o alta problemă P' de această formă, echivalentă cu
problema iniţială P (spunem că două probleme sunt echivalente dacă există un izomorfism între
mulţimile soluţiilor celor două probleme şi un homeomorfism între funcţiile lor obiectiv) şi să
dispunem de un algoritm care să rezolve problemele de această formă şi de o regulă prin care să
găsim soluţia problemei iniţiale P din soluţia problemei P', găsită cu acest algoritm.
În acest sens (dar şi din cauza frecvenţei apariţiei lor în practică) s-au evidenţiat două forme
ale problemelor de programare liniară, forma canonică şi forma standard.

Definiţia 2. Spunem că o problemă este la forma canonică dacă are una din următoarele
două forme:

Forma canonică de minim Forma canonică de maxim

(min) f = c1 ⋅ x1 + c2 ⋅ x2 + ... + cn ⋅ xn (max) f = c1 ⋅ x1 + c2 ⋅ x2 + ...+ cn ⋅ xn


 
ai1 ⋅ x1 + ai2 ⋅ x2 + ... + ain ⋅ xn ≥ bi i =1,...,n ai1 ⋅ x1 + ai2 ⋅ x2 + ...+ ain ⋅ xn ≤ bi i =1,...,n
x1, x2,...,xn ≥ 0 x1, x2,...,xn ≥ 0

Această formă este cel mai des întâlnită în practică (vezi problema determinării structurii
sortimentale optime a producţiei sau problema dietei) şi, în plus, restricţiile economice sunt în
general inegalităţi şi foarte rar egalităţi. De asemenea, această formă este invariantă la anumite
transformări (vezi problema duală) şi asigură existenţa soluţiei (orice problemă la această formă,
care are termenii liberi şi coeficienţii restricţiilor pozitivi, are soluţie).

26
Bazele cercetării operaţionale 16

Definiţia 3. Spunem că o problemă este la forma standard dacă are forma:

(min) sau(max) f = c1 ⋅ x1 + c2 ⋅ x2 + ...+ cn ⋅ xn



ai1 ⋅ x1 + ai2 ⋅ x2 + ...+ ain ⋅ xn = bi i =1,...,n
x1, x2,...,xn ≥ 0

Această formă, deşi nenaturală din punct de vedere economic, este cea care se pretează cel
mai bine la rezolvarea cu metodele algebrei clasice.

Propoziţie. Pentru orice problemă de programare liniară P există o problemă la forma


canonică PFC şi o problemă la forma standard PFS echivalente cu P.

Demonstraţie. Într-adevăr:

a) orice problemă de maxim poate fi transformată în una de minim şi reciproc folosind relaţia:

max f(x) = – min f(–x)

b) orice restricţie de tipul "≤" poate fi transformată într-o restricţie de forma "≥" şi reciproc
folosind relaţia:
α ≤ β ⇔ –α ≥ –β

c) orice restricţie inegalitate poate fi transformată în egalitate, prin introducerea unei variabile
suplimentare nenegative şi folosind relaţiile:

α+x=β α −x=β
α ≤ β ⇔  şi α ≥ β ⇔ 
 x≥0  x≥0
Toate variabilele introduse pentru transformarea inegalităţilor în egalităţi se numesc variabile de
abatere sau variabile de compensare.

d) orice restricţie egalitate poate fi transformată în restricţii inegalitate, folosind relaţia:

α≤β
α = β ⇔ 
α ≥β

e) orice variabilă cu restricţie de semn negativă (x ≤ 0) poate fi înlocuită cu o variabilă cu restricţie


de semn pozitivă (y ≥ 0), folosind relaţia:

x =-y
x ≤ 0 ⇔ 
y ≥ 0

f) orice variabilă fără restricţie de semn poate fi înlocuită cu două variabile cu restricţie de semn
pozitivă, folosind relaţia:

x = y - z
x oarecare ⇔  y ≥ 0
 z ≥ 0

Se demonstrează fără un efort matematic deosebit că dacă P' se obţine din P folosind doar
27
Programarea liniară 17

transformările de mai sus (numite şi transformări elementare) atunci P şi P' sunt două probleme
echivalente şi între soluţiile lor optime există o bijecţie.
Din cele de mai sus rezultă cum poate fi adusă orice problemă de programare liniară la
forma standard (sau canonică) şi cum se obţine soluţia problemei iniţiale din soluţia problemei la
forma standard (sau canonică).

Exemplu: Problemei P de mai jos îi corespunde problema la forma standard PFS alăturată:

P PFS

(min) f = 3x1 –2x2 + 4x3 (max) g = +3a1 + 2y2 – 2z2 – 4x3


 9x 1 + 13x 2 + 15x 3 ≤ 16  − 9a 1 + 13y 2 − 13z 2 + 15x 3 + x 4 = 16
 19x 1 + 36x 2 + 6x 3 ≥ −9 − 19a 1 + 36y 2 − 36z 2 + 6x 3 − x 5 = −9
 
 7x 1 − 7x 2 − 14x 3 ≤ 21  − 7a 1 − 7 y 2 + 7z 2 − 14x 3 + x 6 = 21
 3x 1 + 30x 2 + 5x 3 ≤ 31  − 3a 1 + 30y 2 − 30z 2 + 5x 3 + x 7 = 31
x 1 ≤ 0, x 2 oarecare, x 3 ≥ 0  a 1 , y 2 , z 2 , x 3 , x 4 , x 5 , x 6 , x 7 ≥ 0

Problema PFS are o singură soluţie optimă:


4 77 154
a1 = 3, y2 = , z2 = 0, x3 = 0, x4 = , x5 = 0, x6 = , x7 = 0
3 3 3
35
care dă un maxim al funcţiei g egal cu .
3
Acestei soluţii îi corespunde singura soluţie optimă pentru P:
4
x1 = -3, x2 = , x3 = 0
3
35
care dă un minim al funcţiei f, egal cu − .
3

Rezolvarea problemei de programare liniară.

Analiza problemei

Fie o problemă P despre care presupunem (fără a restrânge generalitatea) că a fost adusă la
forma standard. De asemenea presupunem (tot fără a restrânge generalitatea) că variabilele
problemei au fost numerotate şi denumite xj cu j = 1,...,n (n = numărul de necunoscute), coeficienţii
variabilelor din funcţia obiectiv f cu cj (cj = coeficientul variabilei xj), că în ecuaţii variabilele apar
în ordinea indicilor, ecuaţiile fiind numerotate de la 1 la m (m = numărul de ecuaţii) şi că am notat
cu bi termenul liber al ecuaţiei i şi cu aij coeficientul variabilei j din ecuaţia i. În acest caz putem
aşeza variabilele problemei într-un vector cu n componente, coeficienţii funcţiei obiectiv într-un
vector cu n componente, termenii liberi într-un vector cu m componente, coeficienţii variabilelor
din ecuaţii într-o matrice cu m linii şi n coloane şi vom avea:

 x1   c1   b1   a 11 a 12 L a 1n 
  c  b  a L a 2n 
x = x2 , c =  2 ,b=  2,A=  21
a 22

 M   M   M   M M O M 
xn  cn  bn   a m1 a m2 L a mn 

(vom nota cu xT, cT şi bT transpuşii acestor vectori şi cu AT transpusa matricei A).


Alegerea aşezării ca vectori coloană a fost făcută din raţiuni de uşurinţă a calculelor şi a

28
Bazele cercetării operaţionale 18

memorării acestora. După aceste notaţii, problema poate fi scrisă mult mai simplu:

(min ) f = cT ⋅ x (max ) f = cT ⋅ x
A ⋅ x = b sau A ⋅ x = b
 x≥0  x≥0
 

Se ştie că un sistem de forma A⋅x = b are soluţie doar dacă rang(A) = rang( A ), unde A este
matricea extinsă obţinută adăugând matricei A vectorul b, în acest caz sistemul devenind echivalent
cu sistemul obţinut prin eliminarea restricţiilor care nu corespund minorului principal (dacă sistemul
nu are soluţie atunci evident nici problema nu are soluţii, caz care este total neinteresant).
Presupunem că au fost eliminate aceste restricţii. Dacă rang A = n atunci sistemul are o
singură soluţie care, dacă este admisibilă, este şi soluţia optimă căutată, altfel problema nu are
soluţie. Este evident că şi acest caz este la fel de neinteresant ca primul.
Presupunem deci în continuare că:

rang(A) = m < n

Rezolvarea sistemului A⋅x = b se poate face într-un mod simplu (cel puţin teoretic) folosind
algebra matricială astfel:
− împărţim coloanele matricei A în două submatrici: minorul principal (notat cu B, care
este o matrice pătratică de dimensiune m şi va fi numit bază a sistemului) şi restul
coloanelor (notat cu S, care este o matrice cu m linii şi n – m coloane);
− împărţim variabilele problemei în doi vectori: vectorul variabilelor principale
(corespunzătoare coloanelor bazei) şi vectorul variabilelor secundare (notat cu xS).
Făcând eventual o renumerotare, pentru uşurinţa expunerii şi fiind evident că nu se
restrânge generalitatea problemei, presupunem că variabilele principale sunt chiar
primele m (această presupunere va fi făcută de câte ori va fi posibil, fără a mai specifica
acest lucru).
− aducem succesiv sistemul la forma de mai jos:

A⋅x = b ⇔ (BS)⋅  B  = b ⇔ B⋅xB + S⋅xS = b ⇔ B⋅xB = b – S⋅xS ⇔ xB = B-1⋅b – B-1⋅S⋅xS


x
 xS 
− soluţia sistemului va fi submulţimea lui Rn:

DB = {x = {xB,xS} / xS ∈ Rn-m oarecare, xB = B-1⋅b – B-1⋅S⋅xS}

Orice alegere a lui xS dă o soluţie. Dintre toate alegerile posibile este remarcabilă (prin
simplitatea ei) soluţia xS = 0, care duce la soluţia particulară:
B−1b
 0 
x =  0  n – m zerouri
B
 M 
 0 
 
numită soluţia de bază asociată bazei B. Deci xB este xB = B-1⋅b la care se adaugă n-m
zerouri. Cu toate acestea, vor fi ambele numite soluţie de bază, rezultând din context de care
este vorba.

Observaţie: Este evident că fiecărui minor principal al sistemului (= minor de


dimensiune m = bază) îi corespunde o unică soluţie de bază. O soluţie de bază care are toate
componentele nenule strict pozitive se va numi soluţie de bază admisibilă iar o soluţie

29
Programarea liniară 19

optimă care este de bază se va numi soluţie optimă de bază. Se observă că o soluţie de bază
are cel mult m componente diferite de 0. Din cauza importanţei lor în rezolvarea problemei,
vom evidenţia soluţiile de bază care au mai puţin decât m componente nenule, numite soluţii
degenerate şi pe cele care au fix m elemente nenule, numite soluţii nedegenerate.
DB este izomorfă cu Rn, adică are tot atâtea elemente câte puncte sunt într-un spaţiu cu
n_–_m dimensiuni. "Alegându-le" din acestea doar pe cele cu toate elementele pozitive,
găsim mulţimea în care vom "căuta" vectorul (vectorii) care dă (dau) extremul lui f.

Rezolvarea problemei poate duce la următoarele rezultate:


R1. Sistemul A⋅x = b nu are soluţii sau nu are soluţii admisibile. În acest caz problema nu
are soluţie.
R2. Imaginea funcţiei obiectiv pe mulţimea soluţiilor admisibile este nemărginită (la +∞
într-o problemă de maxim sau la -∞ într-o problemă de minim). În acest caz spunem
că problema are optim infinit.
R3. Imaginea funcţiei obiectiv pe mulţimea soluţiilor admisibile este mărginită. În acest
caz problema are cel puţin o soluţie şi spunem că problema are optim finit.
Greutatea găsirii soluţiei problemei constă în imensitatea numărului de soluţiilor posibile ale
sistemului şi în respectarea condiţiei de nenegativitate a celor printre care căutăm extremul dorit al
funcţiei f. Este natural ca primele încercări în rezolvare să caute în primul rând o limitare cât mai
puternică a locului în care căutăm. Pe baza unor reprezentări geometrice ale problemei au fost
descoperite următoarele proprietăţi ale problemei, care poartă denumirea de teoreme fundamentale
ale programării liniare:

Teorema 1. Dacă problema de programare liniară are soluţii admisibile atunci are şi soluţii
de bază admisibile.

Teorema 2. Dacă problema de programare liniară are soluţii optime atunci are şi soluţii
optime de bază.

Teorema 3. Mulţimea soluţiilor admisibile (optime) este închisă şi convexă. Dacă este şi
mărginită atunci punctele extremale ale acesteia sunt chiar soluţiile admisibile
(optime) de bază ale problemei.

Cele două teoreme realizează efectiv trecerea către o problemă rezolvabilă pe calculator.
Într-adevăr, deoarece o bază este un minor de ordinul m al matricii A şi unei baze îi corespunde o
unică soluţie de bază rezultă că sunt cel mult C m n soluţii de bază, adică un număr finit. În acest
moment s-ar părea că nu avem decât să lăsăm calculatorul să calculeze toate soluţiile de bază şi
valorile funcţiei obiectiv în cele admisibile găsind-o prin comparare pe cea care dă minimul sau
maximul funcţiei printre acestea. Totuşi, această variantă se dovedeşte nepractică la o analiză mai
atentă, ţinând cont de următoarele observaţii:
1. faptul că numărul soluţiilor de bază este finit ne asigură doar că problema se va termina
cândva, ceea ce, din punct de vedere economic, este evident nemulţumitor. Noi dorim ca
problema să fie rezolvată în timp util, adică repede. Rezolvând problema ca mai sus vom
avea, pentru o problemă cu 50 variabile şi 20 restricţii, de calculat, listat şi comparat
20
C 50 soluţii de bază, adică în jur de 1020. Presupunând că suntem dotaţi cu un
supercalculator care ar termina un miliard de baze pe secundă, rezolvarea ar dura 3000
ani. De altfel, o problemă ca cea de sus este foarte mică în comparaţie cu problemele
"serioase" ce au peste 1000 de variabile şi 100 de restricţii. În plus, un calculator ca cel
de sus nu există încă, deci în nici un caz nu e disponibil întreprinderilor obişnuite.
2. Cu algoritmul de mai sus vom găsi cea mai bună soluţie dintre soluţiile admisibile de
bază, fără însă să ştim dacă problema admite, de fapt, optim (ar putea să aibă optim

30
Bazele cercetării operaţionale 20

infinit).
3. Nu vom şti dacă un minor de m×m este bază decât după ce-i vom calcula determinantul
şi nu vom şti dacă soluţia de bază corespunzătoare este admisibilă decât după ce o vom
calcula.
4. Soluţia optimă, odată găsită, nu va fi recunoscută ca atare decât după ce vom calcula
toate celelalte soluţii de bază, chiar dacă ea a apărut chiar la începutul calculelor.

În concluzie, pentru a fi eficient, un algoritm ar trebui să aibă următoarele proprietăţi:

a) să dispună de un criteriu de recunoaştere a faptului că problema nu are soluţii admisibile;


b) să dispună de un criteriu de recunoaştere a faptului că problema are optim infinit;
c) să dispună de un criteriu de recunoaştere dacă o soluţie este optimă sau nu;
d) să treacă de la o soluţie de bază admisibilă la una cel puţin la fel de bună (o soluţie x este
mai bună decât o soluţie y dacă f(x) > f(y) într-o problemă de maxim şi f(x) < f(y) într-o
problemă de minim;
e) să treacă de la o soluţie la cea mai bună dintre soluţiile cel puţin la fel de bune posibile
ca succesoare;
f) să nu revină la o soluţie deja analizată;
g) să efectueze un număr de iteraţii comparabil polinomial cu dimensiunea problemei.
h) să nu introducă erori de rotunjire (sau nu prea mari);
i) să fie cât mai simplu de implementat;

Condiţiile de mai sus reprezintă de fapt un algoritm ideal. La începuturile cercetării


operaţionale era suficient, de fapt, şi un algoritm care să îndeplinească măcar condiţiile b), c), d), e)
şi h). Acest algoritm a fost dat de G.B. Dantzig, în 1947, care la numit algoritmul simplex. El
rămâne şi în zilele noastre cel mai eficient algoritm în ceea ce priveşte viteza de lucru, simplitatea şi
implementarea pe calculator, pentru problemele care apar efectiv în practica economică.
Totuşi, el nu îndeplinea condiţiile a), f) şi g).
Condiţia a) este relativ uşor de îndeplinit şi ea este acoperită prin introducerea unei faze
iniţiale suplimentare la algoritmul simplex, rezultând algoritmul simplex în două faze.
Condiţia f) a fost pusă în momentul în care s-a observat că, în condiţiile existenţei soluţiilor
degenerate, se poate ajunge în situaţia când, de la o soluţie dată, nu se poate ajunge decât la una la
fel de bună şi tot aşa, astfel încât, dacă nu se iau măsuri de evitare, se poate ajunge la o soluţie care
a mai fost, fenomen numit ciclare. Astfel de exemple a fost efectiv găsite, unul fiind exemplul lui
Beale prezentat mai jos:

3 1
(max ) f = x 4 − 20x 5 + x 6 − 6x 7
4 2
 1
x 1 + x4 − 8x 5 − x6 + 9x 7 =0
4
 1 1
 x2 + x4 − 12x 5 − x6 + 3x 7 =0
 2 2
 x3 + x6 =1
 x i ≥ 0, i = 1,...,7

Se observă imediat baza admisibilă B0 = (a1,a2,a3), de la care, aplicând algoritmul sub forma
clasică, se vor obţine succesiv bazele admisibile B1 = (a4,a2,a3), B2 = (a4,a5,a3), B3 = (a6,a5,a3), B4 =
(a6,a7,a3), B5 = (a6,a2,a3), B6 = (a4,a2,a3) ... . Cititorul poate verifica uşor că toate aceste baze au ca
soluţie de bază soluţia (0,0,1,0,0,0,0) şi valoarea funcţiei 0, dar nu îndeplinesc condiţia de optim. Pe
de altă parte se vede că B6 = B1 şi deci algoritmul va repeta la infinit această succesiune de baze,

31
Programarea liniară 21

7 3
neatingând niciodată valoarea maximă , corespunzătoare soluţiei ( ,0,0,1,0,1,0).
4 4
Această situaţie este îngrijorătoare nu atât din considerente practice imediate (încă nu a fost
găsită o problemă din practică la care să apară acest fenomen, toate exemplele existente fiind
artificial construite, ca şi cel de mai sus) cât din faptul că un algoritm implementat pe calculator s-ar
putea să fie pus în faţa unei astfel de probleme, situaţie în care n-am putea rezolva problema nici pe
calculator, nici manual, ea fiind prea mare. Situaţia a fost depăşită prin diferite tehnici suplimentare
adăugate celei de trecere la o soluţie cel puţin la fel de bună (insuficientă, cum s-a văzut), cea mai
cunoscută fiind cea care foloseşte ordonarea lexicografică a soluţiilor, care va fi prezentată şi în
această carte.
În fine, referitor la condiţia g), a durat mult timp până s-a demonstrat că algoritmul, sub
această formă, nu este în timp polinomial, un exemplu fiind clasa de probleme de mai jos, găsită
de Klee şi Minty în 1972, în care algoritmul trebuie să analizeze 2n baze (n = numărul de
necunoscute) până la găsirea celei optime.

n
(max ) f = ∑10
j=1
n- j
xj

 i -1 
 2 ⋅

∑ 10 i- j x j  + x i ≤ 100 i-1 i = 1,..., n


j=1 
 x j ≥ 0 j = 1,..., n

Pentru o astfel de problemă, la 100 de variabile, algoritmul va avea 2100 ≅ 1030 iteraţii, şi
chiar la o viteză de un miliard iteraţii pe secundă (mult peste puterea unui calculator actual) va
termina în 1013 ani.
Nu se ştie încă dacă există sau nu o altă modalitate de trecere de la o bază la alta, folosind
tabelele simplex, prin care algoritmul să devină în timp polinomial. Au fost însă găsiţi algoritmi
care nu folosesc tabelele simplex, primul fiind algoritmul de punct interior al lui Karmakar, despre
care s-a demonstrat că lucrează în timp polinomial.
În ceea ce priveşte erorile de rotunjire, inevitabile când se fac calculele pe un calculator,
algoritmul se comportă într-adevăr foarte rău, orice eroare propagându-se imediat la tot tabelul cu
efecte foarte mari. Acest lucru poate fi însă depăşit aplicând o variantă a algoritmului, numită
varianta revizuită a algoritmului simplex.
Toate punctele slabe ale algoritmului, amintite mai sus, nu au înmormântat însă algoritmul
simplex, deoarece folosirea acestuia aduce informaţii mult mai ample decât găsirea soluţiei propriu-
zise, este mult mai maleabil în cazul modificărilor ulterioare ale datelor problemei (vezi analiza
senzitivităţii soluţiei la datele problemei), se pretează mult mai bine la interpretări economice, este
uşor de scris un program de calculator asociat, este implementat pe foarte multe calculatoare şi în
plus, aşa cum aminteam mai sus, încă nu a apărut o problemă practică în faţa căruia să clacheze.
Noii algoritmi rămân doar ca alternative teoretice sau pentru cazurile în care algoritmul simplex este
lent, dar ei nu-l pot înlocui complet.

Fundamentarea matematică a algoritmului simplex

Algoritmul simplex pleacă de la presupunerea că dispunem deja de o soluţie admisibilă de


bază xB, corespunzătoare unei baze B. De asemenea, presupunem că am rezolvat sistemul A⋅x = b
folosind această bază, rezultând astfel variabilele principale în funcţie de cele secundare:

xB = B-1⋅b – B-1⋅S⋅xS
32
Bazele cercetării operaţionale 22

Înlocuind variabilele, cu formula găsită, în funcţia obiectiv, obţinem:

f(x) = c TB ⋅(B-1⋅b – B-1⋅S⋅xS) + c ST ⋅xS = c TB ⋅B-1⋅b – ( c TB ⋅B-1⋅S – c ST )⋅xS =


= f(xB) – ( c TB ⋅B-1⋅S – c ST )⋅xS = f(xB) – (z– c ST )⋅xS = f(xB) – ∆⋅xS

unde:
− f(xB) = c TB ⋅B-1⋅b este valoarea funcţiei obiectiv în soluţia de bază
− c TB ⋅B-1⋅S = z este un vector n-m componente z = (zm+1, zm+2,...,zn).
− ∆ = z – c ST este un vector n-m componente ∆ = (∆m+1, ∆m+2,..., ∆n)

Obţinem următoarea formă a problemei:


n
(max )sau(min) f = f x ( )− ∑ ∆
B
j ⋅x j
j= m +1
 n
x i +

∑ a ij ⋅ x j = x i
j= m +1
i = 1,..., m
 x j ≥ 0, j = 1,..., n

Din motive de organizare şi concentrare a datelor problemei, Danzig le-a trecut pe acestea
într-un tabel ca cel de mai jos, numit tabel simplex.

c1 c2 ... cm cm+1 ... cn


cB xB xB x1 x2 ... xm xm+1 ... xn
c1 x1
c2 x2
B-1⋅b Im B-1⋅S
M M
cm xm
f(xB) 0 zm+1 ... zn
0 ∆m+1 ... ∆n

Fiecărei soluţii de bază îi corespunde un tabel simplex şi reciproc, deci, de fiecare dată când
vom vorbi de un tabel simplex, vom spune şi care este baza asociată.
Din forma funcţiei obiectiv se vede că:

− într-o problemă de maxim:


n
xB este soluţie optimă ⇔ ( ) ∑∆
f xB − j ( )
⋅ x j ≤ f x B oricare ar fi xS ≥ 0 ⇔
j= m +1
n
⇔ ∑∆
j= m +1
j ⋅ x j ≥ 0 oricare ar fi xS ≥ 0 ⇔ ∆j ≥ 0, j = 1,...,n (toţi ∆j sunt pozitivi)

− într-o problemă de minim:


n
xB este soluţie optimă ⇔ ( ) ∑∆
f xB − j ( )
⋅ x j ≥ f x B oricare ar fi xS ≥ 0 ⇔
j= m +1
n
⇔ ∑∆
j= m +1
j ⋅ x j ≤ 0 oricare ar fi xS ≥ 0 ⇔ ∆j ≤ 0, j = 1,...,n (toţi ∆j negativi)

33
Programarea liniară 23

Pentru a evita complicarea expunerii vom presupune în continuare că problema este de


maxim, pentru cazul de minim raţionamentul fiind analog.
Rezultatul obţinut reprezintă criteriul de recunoaştere a optimalităţii soluţiei sau, mai simplu,
criteriul de optim.
Dacă soluţia nu este optimă atunci există evident o altă soluţie de bază admisibilă mai bună.
Se poate demonstra că dacă x şi y sunt două soluţii admisibile de bază cu f(x) ≤ f(y) şi numărul de
variabile principale prin care diferă cele două este k, cu 1 ≤ k ≤ m, atunci există un şir de soluţii
admisibile de bază: {x1 = x, x2, ..., xk = y} astfel încât:

1. f(xi) ≤ f(xi+1) oricare ar fi 1 ≤ i < k


2. xi diferă de xi+1 printr-o singură variabilă, oricare ar fi 1 ≤ i < k

Din cele de mai sus rezultă că e suficient să căutăm o soluţie de bază admisibilă mai bună
doar printre cele care diferă de cea actuală printr-o singură variabilă.
Trebuie deci să găsim acea variabilă principală care iese din bază şi acea variabilă secundară
care intră în bază. Rezultatul schimbării trebuie să fie:

1. o soluţie de bază (deci coloanele corespunzătoare noii variabile să formeze un minor


principal);
2. o soluţie admisibilă (adică să aibă toate componentele pozitive);
3. o soluţie mai bună;
4. cea mai bună posibilă dintre soluţiile mai bune.

Presupunem că înlocuim variabila principală xi (1≤ i ≤ m) cu variabila secundară xj (m+1 ≤ j


≤ m). Aceasta este echivalent cu a scoate din ecuaţia i (singura în care apare xi) variabila xj, în
funcţie de variabila xi şi de celelalte variabile secundare. Este evident că acest lucru (care este
echivalent cu faptul că noua soluţie trebuie să fie de bază) este posibil doar dacă coeficientul lui xj
din această ecuaţie este diferit de 0 (aij ≠ 0). În acest caz avem succesiv:

n n
a ik 1 1
xi + ∑
k = m +1
a ik ⋅ x k + aij⋅xj = xi ⇔ xj + ∑ a
k = m +1 ij
⋅xk +
a ij
⋅xi =
a ij
⋅xi ⇔
k≠ j k≠ j
n
1 a ik 1
⇔ xj =
a ij
⋅xi – ∑
k = m +1 a ij
⋅ x k – ⋅xi
a ij
k≠ j
Înlocuind variabila xj în celelalte ecuaţii obţinem:

n n
1 a ik

1
xs + ∑ a sk ⋅ x k + asj⋅(
k = m +1 a ij
⋅xi –
a
k = m +1 ij
⋅ xk –
a ij
⋅xi ) = xs ⇔
k≠ j k≠ j
n
 a  a a
⇔ xs + ∑  a sk − a sj ⋅ ik

k = m +1  a ij
 ⋅ x k – sj ⋅xi = xs – sj ⋅xi pentru s = 1,...,m şi s ≠ i

 a ij a ij
k≠ j

Conform formulelor de mai sus rezultă că noua soluţie de bază este admisibilă dacă:

a sj xs x
xs – ⋅xi ≥ 0 oricare ar fi s =1,...,m diferit de i ⇔ ≥ i oricare ar fi s =1,...,m, s ≠ i
a ij a sj a ij

34
Bazele cercetării operaţionale 24

şi în urma schimbării noua soluţie de bază va fi:


1 a sj
xj= ⋅xi şi x s = xs – ⋅xi pentru s ≠ i
a ij a ij
În concluzie, dacă ne hotărâm să introducem în bază variabila j, singura variabilă care o
poate înlocui (pentru ca noua soluţie să fie admisibilă de bază) nu poate fi decât aceea care
corespunde acelui aij strict pozitiv din coloana j din matricea B-1⋅S, pentru care se obţine valoarea
minimă a rapoartelor dintre componentele soluţiei de bază actuale şi componentele coloanei j.
Pentru evidenţierea acestora, ele se notează cu θs şi avem:
 x 
θi = minθ s = s 
1≤s≤m  a sj 
a >0 
ij

Condiţia de mai sus este numită criteriul de ieşire din bază.


Mai înainte am văzut ce efect are schimbarea unei variabile din bază asupra sistemului. Este
important însă să vedem efectul ei şi asupra funcţiei obiectiv. Valoarea funcţiei obiectiv în noua
soluţie de bază va fi:
( ) ( )
f( x B ) = f x B − ∆ j ⋅ x j = f x B − ∆ j ⋅
1
a ij
⋅ xi

Pentru ca această soluţie să fie cel puţin la fel de bună trebuie ca:

xi ≥ 0
( )
f( x B ) ≥ f(xB) ⇔ f x B − ∆ j ⋅
1
a ij
1
⋅ x i ≥ f(xB) ⇔ ∆ j ⋅ ⋅ x i ≤ 0
a ij
⇔ ∆j ≤ 0
a ij ≥ 0

În concluzie, dacă vrem să obţinem o soluţie strict mai bună vom alege o variabilă xj
corespunzătoare unui ∆j < 0. Noua soluţie va exista efectiv doar dacă pe coloana j din matricea B-1⋅S
există o componentă aij strict pozitivă şi va fi efectiv strict mai bună doar dacă componenta
1
corespunzătoare xi din soluţia de bază este diferită de 0, îmbunătăţirea fiind egală cu − ∆ j ⋅ ⋅ xi .
a ij
Situaţia în care toate componentele coloanei j din matricea B-1⋅S sunt mai mici sau egale cu
0 este lămurit de următoarea teoremă:

Teoremă: Dacă pe coloana j din matricea B-1⋅S, corespunzătoare unei variabile xj cu ∆j < 0,
toate componentele sunt mai mici sau egale cu zero atunci problema are optim infinit.

Demonstraţie: Fie o soluţie particulară a sistemului, în care variabila secundară xj = λ > 0, λ


oarecare iar celelalte sunt 0. În acest caz, variabilele principale vor fi: yλi = xi – aij⋅λ şi vor fi toate
pozitive, ţinând cont de faptul că toţi aij ≤ 0 şi, deci, soluţia va fi admisibilă. Pentru o astfel de
soluţie, valoarea funcţiei obiectiv este:

f(yλ) = f(xB) – ∆j⋅λ. şi avem: lim f ( y λ ) = +∞


λ →∞
deci imaginea funcţiei f este nemărginită şi afirmaţia este demonstrată.
Presupunem în continuare că există o componentă aij strict pozitivă. Deoarece dorim să
trecem la cea mai bună dintre bazele posibile, vom alege dintre toate variabilele cu ∆j < 0, pe cea
pentru care se obţine:
 x 
max  − ∆ j ⋅ min i 
m +1≤ j≤ n  1≤ i ≤ m a 
∆ j <0  a ij > 0 ij 

35
Programarea liniară 25

Această condiţie este criteriul de intrare în bază.


Deoarece calculul necesar găsirii acestuia este laborios, Danzig a preferat înlocuirea acestei
alegeri cu alegerea acelui j care corespunde celui mai negativ ∆j (= – max (− ∆ j ) ), variantă care
m +1≤ j≤ n
∆ j <0

este uşor de aplicat, îmbunătăţeşte soluţia şi prin care se obţine, în marea majoritate a cazurilor,
acelaşi j.
În acest moment ştim cum să găsim o soluţie mai bună, dacă ea există şi am putea calcula
din nou elementele necesare analizării noii soluţii, din tabelul simplex, folosind formulele fiecăruia:

xB = B-1⋅b
z = c TB ⋅B-1⋅A
∆=z–c

Acest mod de lucru este efectiv folosit în anumite variante ale algoritmului simplex (vezi
forma revizuită) dar el presupune calcularea inversei matricei B, ceea ce necesită foarte mult timp.
Acest motiv era suficient de convingător pentru ca Danzig să-şi fi pus problema dacă nu cumva
noul tabel simplex poate fi calculat pe baza fostului tabel simplex, făcând mult mai puţine calcule şi
utilizând formule uşor de memorat şi aplicat. Această întrebare era natural de pus, dacă ţinem cont
că noua soluţie diferă de fosta soluţie printr-o singură variabilă. Aceste formule au fost efectiv
găsite, ele putând fi obţinute urmărind efectul înlocuirii lui xi cu xj asupra sistemului:

− noua soluţie de bază x B se obţine din fosta soluţie cu formulele deja găsite mai sus:

1
xj= ⋅xi şi
a ij
a sj
x s = xs – ⋅xi pentru s ≠ i
a ij

− noii coeficienţii ai variabilelor în cele m ecuaţii vor fi:

1. variabilă principală xs va avea coeficientul 1 în ecuaţia k şi 0 în celelalte ecuaţii;


a
2. o variabilă secundară xk, diferită de xi, va avea coeficienţii a sk − a sj ⋅ ik în
a ij
a ik
ecuaţiile s ≠ i şi coeficientul în ecuaţia i.
a ij
a sj
3. noua variabilă secundară xi va avea coeficienţii – în ecuaţiile s ≠ i şi coeficien-
a ij
1
tul în ecuaţia i.
a ij

4. noua valoare a funcţiei obiectiv va fi: f( x B ) = f x B − ∆ j ⋅ ( ) 1


a ij
⋅ xi

5. noii ∆j îi obţinem înlocuind în funcţia obiectiv variabila xj în funcţie de xi:

n n
a ik 1 1
f(x) = f( x B ) – ∑ ∆ k ⋅ x k – ∆j⋅(–
k = m +1

k = m +1 a ij
⋅xk –
a ij
⋅xi +
a ij
⋅xi) =
k≠ j k≠ j

36
Bazele cercetării operaţionale 26

n
   ∆ 
= f x( )B
− ∆j ⋅
1
a ij
⋅ xi – ∑  ∆ k − ∆ j a ik  ⋅ x k –  − j  ⋅xi =
 a ij   a ij 
k = m +1   
k≠ j
n
 a   ∆j 
= f( x B ) – ∑  ∆ k − ∆ j ik  ⋅ x k

k = m +1  a ij 
–−  ⋅x
 a ij  i
 
k≠ j

a ik ∆j
de unde rezultă că ∆ k = ∆ k − ∆ j pentru k ≠ i şi ∆ i = −
a ij a ij

Deşi par să fie foarte multe formule complicate, frumuseţea algoritmului şi meritul lui
Danzig constă tocmai în faptul că toate respectă o regulă vizuală uşor de memorat, numită regula
dreptunghiului, aşa cum se va vedea în algoritmul simplex.

ALGORITMUL SIMPLEX

Reamintim că presupunem că problema este la forma standard de maxim şi că dispunem de


o soluţie de bază admisibilă.

Pasul 1. Se construieşte tabelul simplex corespunzător bazei de care dispunem în ordinea


următoare:
1. pe linia a doua se trec toate variabilele într-o ordine oarecare;
2. pe prima linie se trec coeficienţii funcţiei obiectiv, fiecare deasupra variabilei
corespunzătoare;
3. se construieşte matricea A, fiecare coloană fiind formată din coeficienţii unei
variabile din toate ecuaţiile (ordinea în care se parcurg ecuaţiile trebuie să fie aceeaşi
pentru toate variabilele), având grijă ca, coloanele să fie trecute în ordinea în care au
fost trecute variabilele pe linia 2;
4. se construieşte baza B, ordinea coloanelor fiind cea în care apar ele în matricea A;
5. se calculează B-1;
6. se calculează B-1⋅A şi se trece în partea centrală a tabelului;
7. se trec variabilele principale în a doua coloană, în aşa fel încât, la intersecţia liniei şi
coloanei corespunzătoare acestei variabile, să se afle valoarea 1.
8. se trec în prima coloană coeficienţii corespunzători variabilelor principale din funcţia
obiectiv, fiecare în dreptul variabilei corespunzătoare;
9. se calculează soluţia de bază cu formula B-1⋅b, având grijă ca ordinea în care au fost
trecuţi termenii liberi în vectorul b să fie aceeaşi cu ordinea în care au fost parcurse
ecuaţiile la formarea matricii A;
10. se trec în a treia coloană valorile variabilelor principale din soluţia de bază, fiecare în
dreptul variabilei corespunzătoare;
11. se calculează f(xB) înmulţind două câte două componentele coloanei 1 cu cele din
coloana 3 aflate pe aceeaşi linie şi adunând toate produsele între ele (adică facem
produsul scalar dintre cB şi xB);
12. se calculează pe rând fiecare zj j = 1,...,n un zj obţinându-se înmulţind scalar cB cu
coloana j din B-1⋅A aflată în centrul tabelului (această linie se calculează şi se trece
doar în primul tabel, scopul ei fiind calcularea lui ∆);
13. se calculează pe rând fiecare ∆j j = 1,...,n scăzând din linia lui z linia lui c (∆j = zj - cj)

Pasul 2. Se analizează valorile ∆j corespunzătoare variabilelor secundare (e uşor de văzut că


întotdeauna, cei corespunzători variabilelor principale sunt toţi 0, deci neinteresanţi).
37
Programarea liniară 27

− dacă toţi sunt mai mari sau egali cu 0 atunci soluţia actuală este cea optimă. Dacă
există ∆j = 0 în afara bazei, atunci pot apărea două cazuri:
1) toate elementele din coloana aj din B-1⋅A sunt mai mici sau egale cu 0.
Atunci toate soluţiile de forma xB - aj⋅λ sunt soluţii optime, unde λ > 0
oarecare;
2) există o componentă aij a coloanei aj strict pozitivă. Atunci introducând
variabila xj în bază în locul variabilei principală xi obţinem altă soluţie de
bază optimă.
Dacă apar numai cazuri de tipul 2), obţinem toate soluţiile de bază optime, mulţimea
tuturor soluţiilor optime fiind formată din toate combinaţiile convexe ale acestora.
Dacă apare şi cazul 1) atunci mulţimea soluţiilor optime este nemărginită fiind
formată din combinaţiile convexe ale soluţiilor de forma xB - aj⋅λ unde xB sunt toate
soluţiile optime de bază.
− dacă există ∆j < 0 atunci îl alegem pe cel mai negativ: ∆k = min ∆ j . Variabila xj
m +1≤ j≤ n
∆ j <0

va fi cea care intră în noua bază. Dacă minimul este multiplu atunci alegem, la
întâmplare, unul dintre aceştia (cei minimi).
Pasul 3. Se analizează elementele coloanei aj din B-1⋅A, corespunzătoare variabilei alese la pasul 2.

− Dacă toate sunt mai mici sau egale cu 0 atunci problema are optim infinit şi
algoritmul ia sfârşit;
− Dacă există componente strict pozitive, pentru acestea se calculează rapoartele θs
x
= s . Variabila xi corespunzătoare raportului minim este cea care va ieşi din
a sj
bază. Dacă acest minim este multiplu sunt posibile două cazuri:
1) minimul este strict pozitiv. În acest caz se alege unul dintre aceştia la
întâmplare;
2) minimul este 0. Atunci xi corespunzători sunt 0, deci soluţia este
degenerată şi noua soluţie este la fel de bună. Această situaţie poate duce
la ciclarea algoritmului şi alegerea la întâmplare nu mai este suficientă,
fiind nevoie de o regulă de alegere suplimentară care să evite ciclarea. O
metodă de alegere se bazează pe faptul că, aşa cum vom vedea,
întotdeauna prima bază este matricea unitate şi în dreptul ei, în toate
tabelele simplex, se va afla inversa bazei corespunzător fiecăruia. În acest
caz, pentru poziţiile în care s-a obţinut minimul împărţim prima coloană
a lui B-1 la coloana aj şi alegem minimul dintre aceste rapoarte. Dacă
minimul dintre aceştia este tot multiplu continuăm procedeul, pentru
poziţiile ce dau noul minim, cu coloana a doua din B-1 şi aşa mai departe,
până minimul rămâne unic. Nu este posibil să se epuizeze toate coloanele
lui B-1 şi minimul să rămână multiplu, deoarece, în acest caz, am avea:
b i1 jk b i 2 jk
= , pentru toţi indicii jk ai coloanelor lui B-1, i1 şi i2 fiind doi
a i1 j a i2 j
din indicii care dau acelaşi minim până la sfârşit sau altfel scris
b i1 jk ai j
= 1 pentru orice jk ⇒ liniile i1 şi i2 din B-1 sunt proporţionale,
b i 2 jk a i 2 j
fapt ce contrazice faptul că B-1 este inversabilă.
Pasul 4. Se calculează componentele tabelului simplex corespunzător noii baze pe baza tabelului
actual şi folosind următoarele reguli:
1. se încadrează elementul aij, aflat la intersecţia coloanei variabilei care intră în bază
38
Bazele cercetării operaţionale 28

cu linia variabilei care iese din bază, care a fost numit de Danzig pivot, într-un
dreptunghi
2. coloana pivotului va avea 1 în dreptul pivotului şi 0 în rest (inclusiv ∆j);
3. linia pivotului este linia actuală împărţită la pivot (inclusiv în soluţia de bază);
4. restul elementelor se calculează cu regula dreptunghiului (inclusiv soluţia de bază,
∆ şi f(xB)). Regula dreptunghiului se bazează pe observaţia că în toate formulele
prin care se calculează acestea nu apare decât valoarea lor actuală, pivotul şi cele
două elemente care ar completa dreptunghiul ce are poziţia de calculat şi pivotul
pe diagonală. Regula dreptunghiului se enunţă literar astfel: "noua valoare =
produsul dintre elementele de pe diagonala pivotului minus produsul dintre cele
aflate pe cealaltă diagonală totul împărţit la pivot". (pentru scurtarea timpului de
lucru se poate observa că elementele unei linii care are 0 pe coloana pivotului
rămân aceleaşi şi de asemenea elementele unei coloane care are 0 pe linia
pivotului)
Operaţia de calculare a noului tabel prin regulile de mai sus poartă denumirea de
pivotare.
Pasul 5. Se reia algoritmul de la pasul 2.

Exemplu: Fie problema de programare liniară:

(max ) f = 3x 1 + 2x 2 + x 3 + 4 x 4 + 3x 5 + 5x 6
 x 1 + 2 x 2 + x 3 + x 4 + 3x 5 + x 6 ≤ 8
2x 1 + 2 x 2 + 3x 3 + x 4 + 3x 5 + 2 x 6 ≤ 15
 3x + x + 2 x + 2 x + x + 2x ≤ 11
 1 2 3 4 5 6
 x i ≥ 0, i = 1,...,6

pentru care ştim că baza formată din coloanele a1, a2, a3 este admisibilă. Pentru rezolvare vom aduce
problema la forma standard de maxim introducând variabilele de abatere x7, x8, x9 obţinând:

(max ) f = 3x 1 + 2 x 2 + x 3 + 4 x 4 + 3x 5 + 5x 6
 x 1 + 2x 2 + x 3 + x 4 + 3x 5 + x 6 + x 7 = 8
2x 1 + 2x 2 + 3x 3 + x 4 + 3x 5 + 2 x 6 + x 8 = 15
 3x + x + 2x + 2x + x + 2 x + x = 11
 1 2 3 4 5 6 9
 x i ≥ 0, i = 1,...,9

Vom aşeza în tabelul simplex variabilele în ordinea indicilor şi vom avea:


 3
 2
1
 4  1 2 1 1 3 1 1 0 0 1 2 1  3
c =  3  , A =  2 2 3 1 3 2 0 1 0  , B =  2 2 3  , cB =  2 
 5  3 1 2 2 1 2 0 0 1   1
   3 1 2  
 0
 0 
 0
 1 3 4 
 − 
 7 7 7 
1
5 1 1
vom calcula matricea B-1 =  − −  şi pe baza acesteia soluţia de bază xB = B-1⋅b =  2  şi
 7 7 7  3
 4 5  
2
− − 
 7 7 7
39
Programarea liniară 29

 6 2 3 1 3 4 
1 0 0 − − 
 7 7 7 7 7 7 
2 11 1 5 1 1
matricea B ⋅A =  0 1 0
-1
− −  care se trec în tabelul simplex:
 7 7 7 7 7 7
 3 1 2 4 5 2
0 0 1 − − − 
 7 7 7 7 7 7

3 2 1 4 3 5 0 0 0
cB xB xB x1 x2 x3
x4 x5 x6 x7 x8 x9
6 2 3 1 3 4
3 x1 1 1 0 0 − −
7 7 7 7 7 7
2 11 1 5 1 1
2 x2 2 0 1 0 − −
7 7 7 7 7 7
3 1 2 4 5 2
1 x3 3 0 0 1 − − −
7 7 7 7 7 7

şi în final se vor calcula valoarea funcţiei obiectiv în această soluţie, zj şi ∆j:

3 2 1 4 3 5 0 0 0
cB xB xB x1 x2 x3 x4 x5 x6 x7 x8 x9
6 2 3 1 3 4
3 x1 1 1 0 0 − −
7 7 7 7 7 7
2 11 1 5 1 1
2 x2 2 0 1 0 − −
7 7 7 7 7 7
3 1 2 4 5 2
1 x3 3 0 0 1 − − −
7 7 7 7 7 7
19 17 13 9 6 8
10 3 2 1 −
7 7 7 7 7 7
9 4 22 9 6 8
0 0 0 − − − −
7 7 7 7 7 7

Din tabel se observă că există ∆j < 0, aceştia fiind ∆4, ∆5, ∆6, ∆8 iar minimul lor este ∆6.
Observaţie Dacă vom căuta acel ∆j care dă cea mai bună îmbunătăţire vom avea de găsit

 x i 
acel ∆j dintre cei negativi pentru care se obţine max  − ∆ j ⋅ min  şi deci de calculat:
4 ≤ j≤ 9 1≤ i ≤ 3 a 
∆ j <0  a ij > 0 ij 

 
xi 9  1 2 
− ∆ 4 ⋅ min = ⋅ min , = 3
1≤ i ≤ 3 a
a i4 > 0 i4
7  6 2  2
 
 7 7 
 
xi 4  2 3  8
− ∆ 5 ⋅ min = ⋅ min , =
1≤ i ≤ 3 a
a i5 > 0 i5
7  11 1  11
 
 7 7 

40
Bazele cercetării operaţionale 30

 
xi 22  1 2 3  22
− ∆ 6 ⋅ min = ⋅ min , , =
1≤ i ≤ 3 a
a i6 > 0 i6
7  3 1 2  3
 
 7 7 7 
 
xi 6  3  18
− ∆ 8 ⋅ min = ⋅ min  =
1≤ i ≤ 3 a
a i8 > 0 i8
7  5  5
 
 7 
3 8 22 18 22
şi în final max ( , , , ) = şi corespunde tot lui ∆6.
2 11 3 5 3
În concluzie, soluţia actuală nu este optimă şi soluţia cea mai bună dintre cele posibile ca
succesoare va avea variabila x6 printre cele principale.
Analizând coloana a6 observăm că există componente strict pozitive (de fapt, în acest caz
sunt chiar toate) şi calculăm pentru acestea rapoartele θi obţinând:

1 7 2 3 21
θ1 = = , θ2 = = 14, θ3 = =
3 3 1 2 2
7 7 7
deci minimul corespunde variabilei x1 şi aceasta este cea care va ieşi din bază. În cest moment
cunoaştem noua bază şi vom construi tabelul simplex pe baza regulilor de calcul de la pasul 4:

3
1. pivotul este a16 =
7
4. de exemplu, pentru elementul de pe poziţia a34 avem dreptunghiul:

6 3
7 7

3 2

7 7

3  3 6 2
⋅−  − ⋅
7  7 7 7
şi noua valoare de pe această poziţie va fi: = –1
3
7
În final, tabelul corespunzător noii baze va fi:

3 2 1 4 3 5 0 0 0
cB xB xB x1 x2 x3 x4
x5 x6 x7 x8 x9
7 7 2 1 4
5 x6 0 0 2 − 1 −1
3 3 3 3 3
5 1 5 2 1
2 x2 − 1 0 0 0 0 −
3 3 3 3 3
7 2 1 2 2
1 x3 − 0 1 −1 0 − 1 −
3 3 3 3 3
52 22 8 7 16
0 0 5 − 0 −4
3 3 3 3 3

41
Programarea liniară 31

Continuând algoritmul vom găsi tabelele:

3 2 1 4 3 5 0 0 0
cB xB xB x1 x2 x3 x4 x5 x6 x7 x8 x9
14 5 1 1 2
5 x6 0 1 1 − 1 − 0
3 3 3 3 3
5 1 5 2 1
2 x2 − 1 0 0 0 0 −
3 3 3 3 3
7 2 1 2 2
0 x8 − 0 1 −1 0 − 1 −
3 3 3 3 3
80 14 4 1 8
0 4 1 − 0 − 0
3 3 3 3 3

3 2 1 4 3 5 0 0 0
cB xB xB x1 x2 x3 x4 x5 x6 x7 x8 x9
8 1 1 3
5 x6 5 1 1 0 1 − 0
5 5 5 5
1 3 2 1
3 x5 1 − 0 0 1 0 0 −
5 5 5 5
3 1 4 3
0 x8 2 − − 1 −1 0 0 − 1 −
5 5 5 5
22 4 1 2
28 4 1 0 0 0
5 5 5 5

Ultimul tabel conţine soluţia optimă, deoarece toţi ∆j ≥ 0. Deoarece nu mai există nici un ∆j
= 0 în afara celor din bază rezultă că soluţia optimă este unică.

Determinarea unei soluţii de bază admisibile de start

Presupunem încă odată că problema este la forma standard.


Algoritmul simplex necesită, pentru pornire, o soluţie admisibilă de bază. Găsirea acesteia
pur şi simplu prin încercări nu este deloc o sarcină uşoară, gândindu-ne că aceasta presupune
găsirea unui minor principal, inversarea acestuia şi calcularea soluţiei, abia în acest moment putând
vedea dacă aceasta are toate componentele pozitive, această căutare putând dura foarte mult.
Rezolvarea problemei pleacă de la observaţia că singura bază pentru care calculul de mai sus
se poate face imediat este matricea unitate, caz în care soluţia de bază corespunzătoare este chiar
vectorul termenilor liberi. Aceasta presupune ca problema să aibă toţi termenii liberi mai mari sau
egali cu 0 şi în matricea A să existe toate coloanele matricii unitate.
Dacă toţi termenii liberi pot fi făcuţi mai mari sau egali cu 0 foarte simplu, prin înmulţirea
eventual cu –1 a restricţiei respective, existenţa tuturor coloanelor matricii unitate este evident că
este foarte puţin probabilă şi mai greu de obţinut.
În acest sens plecăm de la observaţia că existenţa unui vector din coloana unitate printre
coloanele matricii A este echivalentă cu existenţa unei variabile care apare doar în ecuaţia
corespunzătoare lui 1 din acel vector, cu coeficientul 1. Acest lucru poate fi obţinut în două
moduri:

42
Bazele cercetării operaţionale 32

a) Începând de la prima ecuaţie, căutăm o variabilă care are coeficientul de acelaşi semn cu
termenul liber, o scoatem din această ecuaţie în funcţie de celelalte variabile, o înlocuim
în celelalte şi repetăm procedeul pornind de la a doua ecuaţie. Pot apărea trei cazuri:
1) la un moment dat obţinem o ecuaţie în care toţi coeficienţii variabilelor au semn
contrar termenului liber, măcar unul dintre toţi fiind diferit de 0. În acest caz
ecuaţia nu are evident soluţie admisibilă(pozitivă) şi deci problema nu are soluţie;
2) toţi coeficienţii variabilelor şi termenul liber sunt 0. În acest caz rezultă că această
ecuaţie rezultă din cele anterioare şi ea va fi eliminată, trecându-se la următoarea;
3) se epuizează toate ecuaţiile. În acest moment, variabilele care au fost scoase din
fiecare ecuaţie formează baza dorită.
Procedeul de mai sus poate părea atractiv, dar presupune introducerea unui algoritm
diferit de simplex, cu efect asupra omogenităţii calculelor şi a vitezei de lucru. De
asemenea, prin efectuarea calculelor de mai sus, datele problemei nu mai au semnificaţia
economică iniţială, ne mai putându-se face interpretări economice.
b) Pentru toţi vectorii coloană introducem în ecuaţiile corespunzătoare câte o variabilă cu
coeficientul 1. Vom obţine evident un nou sistem de restricţii şi rămâne de văzut ce
legătură este între soluţiile acestuia şi cel iniţial. Cele două sisteme au forma:
A⋅x = b şi A⋅x + y = b
Este evident că o soluţie a primului sistem este soluţie şi a celui de-al doilea (luăm y = 0)
iar o soluţie a celui de-al doilea este soluţie şi pentru primul doar dacă y = 0. Scopul
nostru va fi deci, ca pornind de la soluţia iniţială a celei de-a doua probleme să ajungem
la o soluţie a acesteia în care y = 0. Ţinând cont că în soluţiile de bază, variabilele
secundare sunt toate egale cu 0, vom încerca să scoatem din bază variabilele y. Scopul
algoritmului simplex este însă maximizarea funcţiei obiectiv, nu scoaterea a uneia sau
alteia din variabile din bază. Pentru a echivala cele două scopuri putem proceda în două
feluri:
1) Alegem o nouă funcţie obiectiv care să-şi atingă extremul printre soluţiile pozitive
chiar pentru y = 0 şi în momentul când am obţinut soluţia respectivă pornim cu
aceasta ca soluţie iniţială algoritmul simplex pentru fosta problemă.
2) Adăugăm la fosta funcţie obiectiv noile variabile cu nişte coeficienţi de asemenea
natură aleşi încât aportul variabilelor y la valoarea funcţiei să fie contrar scopului
dorit (foarte mari pozitivi într-o problemă de minim şi foarte mari negativi într-o
problemă de maxim).

Vom detalia în continuare cele două metode:

Algoritmul simplex în două faze

Dată problema de programare liniară la forma standard de maxim:

(max ) f = c T ⋅ x

 A⋅x = b
 x≥0

în care am aranjat deja ca toţi termenii liberi să fie pozitivi (b ≥ 0).

Faza 1 Construim problema:


 (min )g = y
A ⋅ x + y = b
 x, y ≥ 0

43
Programarea liniară 33

pe care o rezolvăm cu algoritmul simplex pornind rezolvarea de la baza matrice unitate, putând
ajunge la două situaţii:

1) minimul funcţiei g este strict pozitiv. Aceasta este echivalent cu faptul că egalitatea Ax
+ y = b se poate obţine doar pentru y > 0 sau altfel spus Ax > b pentru orice x ≥ 0, deci
sistemul Ax = b nu are soluţii admisibile şi în concluzie problema iniţială nu are
soluţie.
2) minimul funcţiei g este 0. În acest caz, soluţia optimă obţinută are y = 0, deci verifică
Ax = b fiind în concluzie o soluţie admisibilă de bază a primei probleme.

Faza 2 Începând de la soluţia găsită la faza 1 se rezolvă problema iniţială cu algoritmul simplex.

Dezavantajul metodei constă în faptul că tabelul simplex final de la faza 1 trebuie modificat
pentru a obţine tabelul simplex iniţial de la faza 2 (vectorii x, c, cB, z, ∆, f(xB), se elimină coloanele
corespunzătoare lui y) şi în plus nu vom mai avea în tabelele simplex ale problemei iniţiale inversa
bazei (care se găsea în dreptul coloanelor matricii unitate din prima fază) necesară în anumite
variante ale algoritmului simplex.

Metoda bazei artificiale (metoda penalizării)

Dată problema de programare liniară la forma standard de maxim:

(max ) f = c T ⋅ x

 A⋅x = b
 x≥0

în care am aranjat deja ca toţi termenii liberi să fie pozitivi (b ≥ 0).

Construim problema:
(max )g = c T x − My

 A⋅x + y = b
 x, y ≥ 0

în care M este o constantă presupusă foarte mare (mai mare decât orice constantă care ar putea
apare în rezolvarea problemei). Rezolvăm problema cu algoritmul simplex pornind rezolvarea de la
baza matrice unitate, putând ajunge la trei situaţii:

1) problema are optim infinit. În acest caz, problema iniţială are optim infinit.
2) problema are optim finit şi în soluţia de bază avem cel puţin o variabilă din vectorul y. În
acest caz problema iniţială nu are soluţii admisibile.
3) problema are optim finit şi în soluţia de bază nu avem nici o variabilă din vectorul y. În
acest caz problema iniţială are optim finit, soluţia optimă şi maximul funcţiei fiind
aceleaşi cu cele ale problemei modificate.

În final vom remarca faptul că variabilele y nu corespund unor mărimi economice ca


celelalte, ele fiind introduse doar ca un artificiu de calcul pentru a putea porni algoritmul simplex.
Din acest motiv ele se numesc variabile artificiale.

44
Bazele cercetării operaţionale 34

Exemplu Fie problema de programare liniară:

(max ) f = 2 x 1 + 3x 2
3x 1 + x 2 ≤ 10

 x 1 + 4x 2 ≥ 2
 x 1 , x 2 ≥ 0
Forma standard a problemei va fi:
(max ) f = 2x 1 + 3x 2
3x 1 + x 2 + x 3 = 10

 x 1 + 4x 2 − x 4 = 2
 x 1 , x 2 , x 3 , x 4 ≥ 0

Avem deja termenii liberi şi o coloană a matricii unitate  10  corespunzătoare variabilei x3.
 
Pentru a obţine şi a doua coloană  10  vom introduce variabila x5 cu coeficientul 1 în a doua ecuaţie
 
şi în final vom avea de rezolvat problema:

Algoritmul simplex în două faze Metoda bazei artificiale

(min )g = x 5 (max ) f = 2 x 1 + 3x 2 − Mx 5
 3x 1 + x 2 + x 3 = 10  3x 1 + x 2 + x 3 = 10
 
x 1 + 4x 2 − x 4 + x 5 = 2 x 1 + 4x 2 − x 4 + x 5 = 2
 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0  x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0

Aplicând algoritmul simplex în două faze vom obţine în prima fază succesiunea de tabele:

0 0 0 0 1
cB xB xB x1 x2 x3 x4 x5
0 x3 10 3 1 1 0 0
1 x5 2 1 4 0 -1 1
2 1 4 0 -1 1
1 4 0 -1 0

0 0 0 0 1
cB xB xB x1 x2 x3 x4 x5
19 11 1 1
0 x3 0 1 −
2 4 4 4
1 1 1 1
0 x2 1 0 −
2 4 4 4
0 0 0 0 0 -1

Am obţinut optimul egal cu 0 în soluţia de bază (x3,x2) care va fi soluţia iniţială pentru
algoritmul simplex aplicat problemei iniţiale în a doua fază. Eliminăm din tabel coloana lui x5,
înlocuim valorile coeficienţilor funcţiei obiectiv şi deci şi valoarea acesteia, valorile ∆ şi obţinem
tabelul:

45
Programarea liniară 35

2 3 0 0
cB xB xB x1 x2 x3 x4
19 11 1
0 x3 0 1
2 4 4
1 1 1
3 x2 1 0 −
2 4 4
3 5 3
− 0 0 −
2 4 4

2 3 0 0
cB xB xB x1 x2 x3 x4
0 x3 4 0 -11 1 3
2 x1 2 1 4 0 -1
4 0 5 0 -2

2 3 0 0
cB xB xB x1 x2 x3 x4
4 11 1
0 x4 0 − 1
3 3 3
10 1 1
2 x1 1 0
3 3 3
20 7 2
0 − 0
3 3 3

2 3 0 0
cB xB xB x1 x2 x3 x4
0 x4 38 11 0 4 1
3 x2 10 3 1 1 0
30 7 0 3 0

Soluţia optimă a primei probleme este deci x1 = 0 şi x2 = 10 care dă un maxim al funcţiei


egal cu 30. Dacă aplicăm a doua metodă vom obţine succesiv tabele:

2 3 0 0 -M
cB xB xB x1 x2 x3 x4 x5
0 x3 10 3 1 1 0 0
-M x5 2 1 4 0 -1 1
-2M -M -4M 0 M -M
-M-2 -4M-3 0 M 0

2 3 0 0 -M
cB xB xB x1 x2 x3 x4 x5
19 11 1 1
0 x3 0 1 −
2 4 4 4
1 1 1 1
3 x2 1 0 −
2 4 4 4
3 5 3 3
− 0 0 − M+
2 4 4 4

46
Bazele cercetării operaţionale 36

2 3 0 0 -M
cB xB xB x1 x2 x3 x4 x5
0 x3 4 0 -11 1 3 -3
2 x1 2 1 4 0 -1 1
4 0 5 0 -2 2+M

2 3 0 0 -M
cB xB xB x1 x2 x3 x4 x5
4 11 1
0 x4 0 − 1 -1
3 3 3
10 1 1
2 x1 1 0 0
3 3 3
20 7 2
0 − 0 M
3 3 3

2 3 0 0 -M
cB xB xB x1 x2 x3 x4 x5
0 x4 38 11 0 4 1 -1
3 x2 10 3 1 1 0 0
30 7 0 3 0 M

Rezultatul final este evident acelaşi.

VARIANTE ALE ALGORITMULUI SIMPLEX

1. Algoritmul simplex dual

Pentru expunerea acestui algoritm trebuie introduse noţiunile de bază dual admisibilă şi
soluţie dual admisibilă de bază. Prin definiţie numim:

soluţie de bază dual admisibilă soluţie de bază pentru care toţi ∆j ≥ 0


=
bază dual admisibilă =
bază corespunzătoare unei soluţii de
bază dual admisibile
Ca şi în cazul algoritmului simplex, pentru a putea rezolva problema cu algoritmul simplex
dual trebuie să dispunem deja de o bază iniţială dual admisibilă. Această soluţie poate exista ca
urmare a unor calcule anterioare (vezi capitolul cu reoptimizarea) sau, ca şi în cazul algoritmului
simplex, poate fi aplicată o procedură prin care să găsim această bază. Prezentarea acesteia este mai
complicată decât cea de la algoritmul simplex astfel încât:

− dacă dispunem de o bază dual admisibilă vom rezolva problema cu algoritmul simplex
dual
− dacă nu dispunem de o bază dual admisibilă vom rezolva problema cu algoritmul
simplex.

Pentru a evita orice confuzie, vom numi în continuare algoritmul simplex obişnuit algoritm
simplex primal şi o bază admisibilă bază primal admisibilă.
Se observă că o soluţie dual admisibilă nu este în general primal admisibilă şi reciproc, iar o
soluţie care este simultan primal şi dual admisibilă este o soluţie optimă şi reciproc.
Presupunem că am adus problema la forma standard de maxim şi dispunem de o bază dual
47
Programarea liniară 37

admisibilă şi dispunem deja de de o bază dual admisibilă. Algoritmul simplex dual constă în
următorii paşi:

Pasul 1. Se construieşte tabelul simplex asociat acestei baze, la fel ca şi la algoritmul simplex
primal;
Pasul 2. Se analizează componentele soluţiei:
− Dacă toate componentele sunt mai mari sau egale cu 0 atunci soluţia este şi primal
admisibilă, deci optimă.
− Dacă există componente strict negative, variabila corespunzătoare celei mai
negative (xi = min x k ) este cea care iese din bază. Dacă minimul este multiplu se
1≤ k ≤ m
ia una la întâmplare.
Pasul 3. Se analizează linia li corespunzătoare variabilei xi aleasă la pasul 2:
− Dacă toate componentele aij j = 1,...,n sunt mai mari sau egale cu 0, atunci am avea
o ecuaţie cu toţi coeficienţii necunoscutelor pozitivi şi termenul liber strict negativ,
deci problema nu are soluţii primal admisibile.
− Dacă există componente strict negative, atunci pentru acestea se găseşte acel indice
∆j
pentru care se obţine min (prin α am notat modulul numărului α). Dacă
a ij < 0 a
ij

minimul este multiplu alegem unul dintre aceştia la întâmplare. Variabila


corespunzătoare acestuia este cea care intră în bază.
Pasul 4. Se construieşte tabelul corespunzător noii baze aplicând aceleaşi reguli ca la algoritmul
simplex primal;
Pasul 5. Se reia algoritmul de la pasul 2

2. Forma secundară

Este evident că modul de organizare al datelor în tabelul simplex nu este unicul mod de a
organiza datele într-un tabel. Forma secundară este tocmai o astfel de alternativă. Presupunem şi în
acest caz că problema este la forma standard de maxim, că problema este la forma standard şi că
dispunem de o soluţie iniţială de bază care este primal sau dual admisibilă.

Pasul 1. Datele problemei vor fi organizate într-un tabel de forma:

cS
c x f xS
f(xB) ∆S
cB xB xB = B-1⋅b B-1⋅S
cS xS 0 –In-m

Se observă că singura diferenţa este că la coloana variabilelor bazei din stânga se adaugă
şi cele secundare, pe orizontală se lasă doar variabilele secundare iar în loc de matricea
unitate în dreptul variabilelor principale vom avea matricea unitate în dreptul celor
secundare (dar cu minus), ∆ fiind calculat la fel, neglijându-se cei din dreptul variabilelor
principale, care oricum erau 0.

Pasul 2. + Pasul 3. Se găsesc variabila care iese din bază şi cea care intră în bază cu aceleaşi
reguli ca la algoritmul simplex primal sau, după caz, ca la cel dual.

48
Bazele cercetării operaţionale 38

Pasul 4. Se construieşte tabelul asociat noii baze aplicând regulile:

1) Pivotul este acelaşi ca la tabelul simplex;


2) Linia pivotului are –1 în dreptul pivotului şi 0 în rest;
3) Coloana pivotului se împarte la pivotul cu semn schimbat
4) Celelalte elemente se calculează cu regula dreptunghiului

Pasul 5. Se reia algoritmul de la pasul 2.

Exemplu Fie problema de programare liniară rezolvată mai sus:

(max ) f
= 2 x 1 + 3x 2
3x 1 + x 2 ≤ 10

 x 1 + 4x 2 ≥ 2
 x 1 , x 2 ≥ 0
(max ) f = 2x 1 + 3x 2
3x + x 2 + x 3 = 10
Forma standard a problemei va fi:  1
 x 1 + 4x 2 − x 4 = 2
 x 1 , x 2 , x 3 , x 4 ≥ 0
(max ) f = 2x 1 + 3x 2 − Mx 5
 3x 1 + x 2 + x 3 = 10
iar după introducerea variabilelor artificiale obţinem: 
x 1 + 4x 2 − x 4 + x 5 = 2
 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0
Tabelul corespunzător va fi:

2 3 0
cB xB xB x1 x2 x4
-2M -M-2 -4M-3 M
2 x1 0 -1 0 0
3 x2 0 0 -1 0
0 x3 10 3 1 0
0 x4 0 0 0 -1
-M x5 2 1 4 -1

Aplicăm simplex primal şi obţinem cel mai negativ ∆j corespunzător lui x2 şi θi minim
corespunzător lui x5. În acest moment avem o soluţie de bază a problemei iniţiale şi putem elimina
variabila x5. Obţinem:

2 -M 0 2 0
cB xB xB x1 x5 x4 cB xB xB x1 x4
3
2
− 5
4 M+¾ -¾ 3
2
− 5
4 -¾
2 x1 0 -1 0 0 2 x1 0 -1 0
3 x2 ½ ¼ ¼ -¼ ⇔ 3 x2 ½ ¼ -¼
0 x3 19
2
11
4 -¼ ¼ 0 x3 19
2
11
4 ¼
0 x4 0 0 0 -1 0 x4 0 0 -1
-M x5 0 0 -1 0

şi în continuare:

49
Programarea liniară 39

3 0 3 0
cB xB xB x2 x4 cB xB xB x2 x3
4 5 -2 20
3
− 7
3
2
3
2 x1 2 4 -1 2 x1 10
3
1
3
1
3
3 x2 0 -1 0 → 3 x2 0 -1 0
0 x3 4 -11 3 0 x3 0 0 -1
0 x4 0 0 -1 0 x4 4
3
− 11
3
1
3

2 0
cB xB xB x1 x3
30 7 3
→ 2 x1 0 -1 0
3 x2 10 3 1
0 x3 0 0 -1
0 x4 38 11 4

Din rezolvarea de mai sus se observă că această metodă este mai eficientă doar dacă
numărul variabilelor secundare este mai mic decât numărul variabilelor principale. Totuşi, motivul
principal pentru care a fost introdusă această variantă, este existenţa unor probleme în care, pe
parcursul rezolvării, se adaugă foarte multe restricţii (de exemplu rezolvarea problemelor în numere
întregi), pentru o restricţie în plus tabelul simplex mărindu-se cu o linie şi o coloană (cum se va
vedea la capitolul de reoptimizare) iar tabelul corespunzător formei secundare doar cu o linie.

3. Forma revizuită a algoritmului simplex

O problemă mare (de exemplu cu 1000 variabile şi 100 restricţii) necesită în algoritmul
simplex introducerea, memorarea şi lucrul cu un tabel cu 100.000 componente, adică un număr
imens de date. Din acest motiv, şi remarcând faptul că în algoritmul simplex doar o parte din
acestea contribuie efectiv la luarea deciziilor, s-a construit un algoritm care să ţină cont de
observaţiile de mai sus, numit "forma revizuită a algoritmului simplex", în care se lucrează cu
minimul necesar din datele tabelului simplex. Astfel, pentru testarea soluţiei actuale şi trecerea
eventuală la o nouă bază avem nevoie doar de următoarele elemente:
(1) inversa bazei curente B-1
(2) componentele vectorului ∆ pentru a face testul de optim şi a găsi variabila care intră în
bază (dacă soluţia nu e optimă)
(3) coloana ak din B-1A corespunzătoare celui mai negativ ∆j (dacă există strict negativi)
pentru a face testul de optim infinit
(4) soluţia curentă pentru a găsi variabila care iese din bază (dacă mai e cazul)

Aceste elemente se aşează într-un tabel de forma:

cB xB xB = B-1b B-1

f(xB) π = c TB ⋅B-1

numit tabelul simplex redus.

50
Bazele cercetării operaţionale 40

Operaţiile ce se efectuează în cadrul algoritmului simplex revizuit sunt (presupunem că


problema este la forma standard de maxim şi deţinem o soluţie admisibilă de bază şi inversa bazei
corespunzătoare):

Pasul 1. Se calculează ∆j corespunzători variabilelor secundare cu formula cunoscută:

∆j = c TB ⋅B-1⋅Pj - cj = π⋅Pj - cj

unde Pj este coloana corespunzătoare variabilei xj din matricea iniţială.

Pasul 2. Se analizează ∆j calculaţi:

− dacă toţi sunt mai mari sau egali cu 0 soluţia curentă este optimă. STOP
− dacă există ∆j strict negativi se alege minimul dintre aceştia ∆k, variabila xk va intra în
bază şi se trece la pasul 3.

Pasul 3. Se calculează ak = B-1Pk care se ataşează ca nouă coloană la tabel:

cB xB xB = B-1b B-1 ak = B-1Pk

f(xB) π = c TB ⋅B-1 ∆k

Pasul 4. Se analizează componentele coloanei ak:

− dacă toate sunt mai mici sau egale cu 0 problema are optim infinit. STOP
− dacă există aik strict pozitivi se alege cel pentru care se obţine:

xi
ark = min
1≤ i ≤ m a
a > 0 ik
ik

şi variabila xr va ieşi din bază apoi se trece la pasul 5.

Pasul 5. Se pivotează întregul tabel simplex şi se elimină ultima coloană.


Pasul 6. Se reia algoritmul de la pasul 2.

Exemplu Fie problema de programare liniară rezolvată mai sus:

(max ) f = 2 x 1 + 3x 2
3x 1 + x 2 ≤ 10

 x 1 + 4x 2 ≥ 2
 x 1 , x 2 ≥ 0
(max ) f= 2 x 1 + 3x 2
 3 x + x 2 + x 3 = 10
Forma standard a problemei va fi:  1
 x 1 + 4x 2 − x 4 = 2
 x 1 , x 2 , x 3 , x 4 ≥ 0

51
Programarea liniară 41

(max ) f
= 2x 1 + 3x 2 − Mx 5
 3 x 1 + x 2 + x 3 = 10
iar după introducerea variabilelor artificiale obţinem: 
x 1 + 4x 2 − x 4 + x 5 = 2
 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0

Iteraţia 1. Prima bază este B = I2 = B-1 corespunzătoare variabilelor x3 şi x5 de unde rezultă xB =


10  şi π = (0,-M)⋅I2 = (0,-M). Primul tabel redus va fi:
2

0 x3 10 1 0
-M x5 2 0 1
-2M 0 -M

Se calculează ∆S = π⋅S – cS = (0,-M)⋅  13 14 −01 – (2 3 0) = (− M − 2 − 4 M − 3 M )


 
de unde rezultă că cel mai negativ este ∆2 şi vom calcula coloana a2 = I2⋅  14  =  14  care se adaugă
   
la tabelul anterior rezultând:

0 x3 10 1 0 1
-M x5 2 0 1 4
-2M 0 -M -4M-3

θi minim este cel corespunzător lui x5 şi deci variabila x2 va intra în locul variabilei x5.
După pivotare şi eliminarea ultimei coloane obţinem:

0 x3 19
2 1 -¼
3 x2 ½ 0 ¼
3
2 0 ¾

Deoarece variabila artificială x5 a ieşit din bază ea va fi eliminată din problemă.


Iteraţia 2. ∆S = π⋅S – cS = (0,¾)⋅  13 −01 – (2 0) = ( − 5 4 − 3 4 )
 
1 − 1 4   3   11 4 
cel mai negativ este ∆1 şi vom calcula coloana a1 =  ⋅
1  1  1 
= care se
0 4     4
adaugă la tabelul anterior rezultând:
0 x3 19 2 1 -¼ 11
4
3 x2 ½ 0 ¼ ¼
3
2 0 ¾ − 54

θi minim este cel corespunzător lui x2 şi deci variabila x1 va intra în locul variabilei x2.
După pivotare şi eliminarea ultimei coloane obţinem:

0 x3 4 1 -3
2 x1 2 0 1
4 0 2

52
Bazele cercetării operaţionale 42

Iteraţia 3. ∆S = π⋅S – cS = (0,2)⋅  14 −01 – (3 0) = ( 8 − 2 )


 
cel mai negativ este ∆4 şi vom calcula coloana a4 =  10 −13  ⋅  −01 =  −31 care se
     
adaugă la tabelul anterior rezultând:

0 x3 4 1 -3 3
2 x1 2 0 1 -1
4 0 2 -2

θi minim este cel corespunzător lui x3 şi deci variabila x4 va intra în locul variabilei x3.
După pivotare şi eliminarea ultimei coloane obţinem:

4 1
0 x4 3 3 -1
2 x1 10
3
1
3 0
20 2
3 3 0

Iteraţia 4. ∆S = π⋅S – cS = ( 2 3 ,0)⋅  14 10  – (3 0) = ( − 7 3 0 )


 
 1 − 1  1   − 11 3 
cel mai negativ este ∆2 şi vom calcula coloana a2 =  1 3  ⋅   =  1  care se
 3 0   4  3 
adaugă la tabelul anterior rezultând:

0 x4 4
3
1
3 -1 − 11 3
2 x1 10 1 0 1
3 3 3
20
3
2
3 0 − 7
3

θi minim este cel corespunzător lui x1 şi deci variabila x2 va intra în locul variabilei x1.
După pivotare şi eliminarea ultimei coloane obţinem:

0 x4 38 4 -1
3 x2 10 1 0
30 3 0

Iteraţia 5. ∆S = π⋅S – cS = (3,0)⋅  13 10  – (2 0 ) = ( 7 3 ) >0 deci soluţia este optimă (şi unică)
 
STOP

Chiar dacă la prima vedere calculele par mai împrăştiate şi deci mai lente, pentru probleme
mari, pe calculator se economiseşte foarte multă memorie şi se măreşte foarte mult viteza de calcul.
Totuşi, marele avantaj al acestei metode este acela că, la fiecare iteraţie, se folosesc datele
problemei iniţiale, ceea ce face ca erorile inerente de rotunjire să nu se propage, rămânând în limite
acceptabile.

53
Bazele cercetării operaţionale 43

ELEMENTE DE TEORIA GRAFURILOR

1. Noţiuni generale

În general, pentru situaţiile care necesită la rezolvare un oarecare efort mintal (şi un caz tipic
este cel al celor din economie), se caută, în primul rând, o metodă de reprezentare a lor care să
permită receptarea întregii probleme dintr-o privire (pe cât posibil) şi prin care să se evidenţieze cât
mai clar toate aspectele acesteia.
În acest scop se folosesc imagini grafice gen diagrame, schiţe, grafice etc. O reprezentare
dintre cele mai utilizate este cea prin grafuri. Acestea sunt utilizate în special pentru vizualizarea
sistemelor şi situaţiilor complexe. În general, vom reprezenta componentele acestora prin puncte în
plan iar relaţiile (legăturile, dependenţele, influenţele etc) dintre componente prin arce de curbă cu
extremităţile în punctele corespunzătoare. Între două puncte pot exista unul sau mai multe segmente
(în funcţie de câte relaţii dintre acestea, care ne interesează, există) iar segmentelor li se pot asocia
sau nu orientări (după cum se influenţează cele două componente între ele), numere care să exprime
intensitatea relaţiilor dintre componente etc.
Este evident, totuşi, că această metodă are limite, atât din punct de vedere uman (prea multe
puncte şi segmente vor face desenul atât de complicat încât se va pierde chiar scopul pentru care a
fost creat – claritatea şi simplitatea reprezentării, aceasta devenind neinteligibilă) cât şi din punct de
vedere al tehnicii de calcul (un calculator nu poate "privi" un desen ca un om).
Din acest motiv, alături de expunerea naiv-intuitivă a ceea ce este un graf, dată mai sus, se
impune atât o definiţie riguroasă cât şi alte modalităţi de reprezentare a acestora, adecvate în general
rezolvărilor matematice.

Definiţia 1 Se numeşte multigraf un triplet G = (X, A, f) în care X şi A sunt două mulţimi


iar f este o funcţie, definită pe produsul vectorial al lui X cu el însuşi (X2 = X×X), care ia valori în
mulţimea părţilor mulţimii A (notată P(A))

Mulţimea X se numeşte mulţimea nodurilor multigrafului şi elementele sale se numesc


noduri (sau vârfuri) ale multigrafului, iar A reprezintă mulţimea relaţiilor (legăturilor) posibile între
două noduri ale multigrafului.

Definiţia 2 Se numeşte graf orientat un multigraf în care mulţimea A are un singur


element: A = {a}.

În acest caz mulţimea părţilor mulţimii A are doar două elemente: mulţimea vidă ∅ şi
întreaga mulţime A. Dacă unei perechi orientate (xi, xj) din X2 i se asociază prin funcţia f mulţimea
A atunci spunem ca există arc de la nodul xi la nodul xj iar perechea (xi,xj) se va numi arcul (xi,xj).
Nodul xi se numeşte nod iniţial sau extremitate iniţială a arcului (xi,xj) iar nodul xj se numeşte
nod final sau extremitate finală a arcului (xi,xj). Arcul (xi,xj) este incident spre interior vârfului
xj şi incident spre exterior vârfului xi. Dacă pentru un arc nodul iniţial coincide cu nodul final
atunci acesta se numeşte buclă. Nodurile xi şi xj se vor numi adiacente dacă există cel puţin unul
din arcele (xi,xj) şi (xj,xi).
Dacă unei perechi orientate (xi, xj) din X2 i se asociază prin funcţia f mulţimea vidă ∅
atunci spunem că nu există arc de la nodul xi la nodul xj.
Este evident că a cunoaşte un graf orientat este echivalent cu a cunoaşte vârfurile şi arcele
sale. Din acest motiv putem defini un graf orientat prin perechea (X,U), unde X este mulţimea
vârfurilor sale iar U mulţimea arcelor sale.
De asemenea, putem cunoaşte un graf orientat cunoscând mulţimea nodurilor şi, pentru
fiecare nod, mulţimea arcelor incidente spre exterior. Din acest motiv putem defini un graf orientat
ca o pereche (X,Γ) unde X este perechea nodurilor iar Γ este o funcţie definită pe X cu valori în

111
Elemente de teoria grafurilor 44

mulţimea părţilor lui X, valoarea acesteia într-un nod xi, Γ(xi) ⊆ X fiind mulţimea nodurilor
adiacente nodului xi, prin arce pentru care xi este extremitatea iniţială.

Definiţia 3 Se numeşte graf neorientat un multigraf în care mulţimea A are un singur


element iar funcţia f are proprietatea:
f[(xi,xj)] = f[(xj,xi)] , oricare ar fi nodurile xi şi xj din X
În aceste condiţii, dacă f[(xi,xj)] = f[(xj,xi)] = A atunci perechea neorientată {xi,xj} este o
muchie iar dacă f[(xi,xj)] = f[(xj,xi)] = ∅ spunem că nu există muchie între vârfurile xi şi xj.
Deoarece, în cele mai multe din cazurile practice care vor fi analizate în acest capitol,
situaţia este modelată matematic printr-un graf orientat, vom folosi, pentru simplificarea expunerii,
denumirea de graf în locul celei de graf orientat iar în cazul în care graful este neorientat vom
specifica acest fapt la momentul respectiv.

2. Moduri de reprezentare ale unui graf

A. O primă modalitate de reprezentare este listarea efectivă a tuturor nodurilor şi a arcelor


sale.
B. Putem reprezenta graful dând pentru fiecare nod mulţimea nodurilor cu care formează
arce în care el este pe prima poziţie.
C. Putem reprezenta geometric graful, printr-un desen în plan, reprezentând fiecare nod
printr-un punct(cerculeţ) şi fiecare arc printr-un segment de curbă care are ca extremităţi
nodurile arcului şi pe care este trecută o săgeată orientată de la nodul iniţial spre cel
final.
D. Putem folosi o reprezentare geometrică în care nodurile sunt reprezentate de două ori, în
două şiruri paralele, de la fiecare nod din unul din şiruri plecând săgeţi spre nodurile cu
care formează arce în care el este pe prima poziţie, de pe al doilea şir (reprezentarea prin
corespondenţă).
E. Un graf poate fi reprezentat printr-o matrice pătratică booleană, de dimensiune egală cu
numărul de noduri, în care o poziţie aij va fi 1 dacă există arcul (xi,xj) şi 0 în caz contrar,
numită matricea adiacenţelor directe.
F. Un graf poate fi reprezentat printr-o matrice pătratică latină, de dimensiune egală cu
numărul de noduri, în care pe o poziţie aij va fi xixj dacă există arcul (xi,xj) şi 0 în caz
contrar.
Exemplu: Dacă în reprezentarea A avem graful G = (X,U), unde X = {x1, x2, x3, x4, x5, x6}
şi U = {(x1,x1), (x1,x2), (x1,x4), (x1,x5), (x2,x3), (x2,x4), (x2,x6), (x3,x1), (x3,x2), (x4,x5), (x5,x2),
(x6,x4)}, atunci în celelalte reprezentări vom avea:
B x1 → {x1, x2, x4, x5} C
x2 → {x3, x4, x6}
x1 x2
x3 → {x1, x2}
x4 → {x5}
x5 → {x2} x6 x3
x6 → {x4}
D (reprezentarea prin corespondenţă) x5 x4
x1 x2 x3 x4 x5 x6

x1 x2 x3 x4 x5 x6

112
Bazele cercetării operaţionale 45

E F
x1 x2 x3 x4 x5 x6 x1 x2 x3 x4 x5 x6
x1 1 1 0 1 1 0 x1 x1x1 x1x2 0 x1x4 x1x5 0
x2 0 0 1 1 0 1 x2 0 0 x2x3 x2x4 0 x2x6
x3 1 1 0 0 0 0 x3 x3x1 x3x2 0 0 0 0
x4 0 0 0 0 1 0 x4 0 0 0 0 x4x5 0
x5 0 1 0 0 0 0 x5 0 x5x2 0 0 0 0
x6 0 0 0 1 0 0 x6 0 0 0 x6x4 0 0

3. Concepte de bază în teoria grafurilor

1. semigraf interior al unui nod xk: este mulţimea arcelor U −x k = {(xj,xk)/ (xj,xk) ∈ U} care
sunt incidente spre interior nodului xk;
2. semigraf exterior al unui nod xk: este mulţimea arcelor U +x k = {(xk,xi)/ (xk,xi) ∈ U} care
sunt incidente spre exterior nodului xk;
3. semigradul interior al unui nod xk: este numărul arcelor care sunt incidente spre interior
nodului xk = cardinalul lui U −x k şi se notează cu δ x−k ;
4. semigradul exterior al unui nod xk: este numărul arcelor care sunt incidente spre
exterior nodului xk = cardinalul lui U +x k şi se notează cu δ x+k ;
5. gradul unui nod xk: este suma semigradelor nodului xk: δ x k = δ x+k + δ x−k ;
6. nod izolat: este un nod cu gradul 0;
7. nod suspendat: este un nod cu gradul 1;
8. arce adiacente: arce care au o extremitate comună;
9. drum într-un graf: o mulţime ordonată de noduri ale grafului: (x1, x2, ..., xk), cu
proprietatea că există în graf toate arcele de forma (xi,xi+1) i = 1,...,k-1;
10. lungimea unui drum: este numărul arcelor care îl formează;
11. drum elementar: un drum în care fiecare nod apare o singură dată;
12. drum simplu: un drum în care fiecare arc apare o singură dată;
13. putere de atingere a unui nod xi ∈ X în graful G: numărul de noduri la care se poate
ajunge din xi. Puterea de atingere se notează cu p(xi), 1 ≤ i ≤ n şi evident p(xi) ≥ δ x+i .
14. drum hamiltonian: un drum elementar care trece prin toate nodurile grafului;
15. drum eulerian: un drum simplu care conţine toate arcele grafului;
16. lanţ: un drum în care arcele nu au neapărat acelaşi sens de parcurgere;
17. circuit: un drum în care nodul iniţial coincide cu cel final;
18. circuit elementar: un drum în care fiecare nod apare o singură dată, cu excepţia celui
final, care coincide cu cel iniţial;
19. circuit simplu: un drum în care fiecare arc apare o singură dată;
20. circuit hamiltonian: un circuit care trece prin toate nodurile grafului;
21. ciclu: este un circuit în care arcele nu au neapărat acelaşi sens de parcurgere;
22. ciclu elementar: un ciclu în care fiecare nod apare o singură dată, cu excepţia celui
final, care coincide cu cel iniţial;
23. ciclu simplu: un ciclu în care fiecare arc apare o singură dată;
Observaţie: Într-un graf neorientat noţiunile de drum şi lanţ sunt echivalente şi de
asemenea cele de circuit şi ciclu.
24. graf parţial al unui graf G = (X,U): este un graf G'(X,U') cu U' ⊂ U;
25. subgraf al unui graf G = (X,Γ): este un graf G'(X',Γ') unde X' ⊂ X şi Γ'(xi) = Γ(xi) ∩ X'
pentru orice xi ∈ X';

113
Elemente de teoria grafurilor 46

26. graf redus al unui graf G = (X,U): este un graf G*(X*,U*) unde X* este formată din
mulţimile unei partiţii de mulţimi nevide ale lui X, iar ( X *i , X *j ) există doar dacă i ≠ j şi
există cel puţin un arc în U, de la un nod din X *i la un nod din X *j .
27. graf tare conex: este un graf în care între oricare două noduri există cel puţin un drum;
28. graf simplu conex: este un graf în care între oricare două noduri există cel puţin un lanţ;
Observaţie: Pentru grafuri neorientat noţiunile de tare conex şi simplu conex sunt
echivalente, graful numindu-se doar conex;
29. componentă tare conexă a unui graf G = (X,U): este un subgraf al lui G care este tare
conex şi nu este subgraful nici unui alt subgraf tare conex al lui G (altfel spus, între
oricare două noduri din componentă există cel puţin un drum şi nu mai există nici un nod
în afara componentei legat printr-un drum de un nod al componentei).

4. Găsirea drumurilor într-un graf orientat

Dacă privim graful ca imagine a unui sistem, nodurile reprezentând componentele sistemu-
lui, atunci o interpretare imediată a unui arc (xi,xj) este că, componenta xi influenţează direct
componenta xj. Dacă nodurile au semnificaţia de stări posibile ale unui sistem atunci un arc (xi,xj)
semnifică faptul că sistemul poate trece direct din starea xi în starea xj. În ambele cazuri se vede că
avem de-a face doar cu informaţii despre legături directe; totuşi, chiar dacă o componentă xi nu
influenţează direct componenta xj ea o poate influenţa prin intermediul altor componente, existând
un şir de componente intermediare: x1 x2 ,..., xk, fiecare influenţând-o direct pe următoarea şi xi
direct pe x1 iar xk direct pe xj. Astfel, dacă dintr-o stare xi nu se poate trece direct într-o stare xj s-ar
putea totuşi în mai multe etape, prin alte stări intermediare. Deoarece găsirea acestor influenţe sau
treceri posibile este de obicei foarte importantă iar pentru un sistem cu mii sau zeci de mii de
componente acest lucru nu mai poate fi făcut "din ochi", este necesară formalizarea noţiunii de
"influenţe" şi "treceri" posibile, nu neapărat directe. Acest lucru a şi fost făcut mai sus, deoarece
este evident că "xi influenţează xj" sau "din starea xi se poate trece în starea xj" este echivalent cu
existenţa în graf a unui drum de la nodul xi la nodul xj.
În continuare vom da un algoritm prin care putem găsi toate drumurile dintr-un graf orientat
cu un număr finit de noduri.

Pasul 1. Se construieşte matricea booleană a adiacenţelor directe corespunzătoare grafului, notată


cu A. În aceasta se află, evident, toate drumurile de lungime 1.

Este interesant de văzut ce legătură există între această matrice şi drumurile de lungime 2.
Fie două noduri xi şi xj oarecare din graf. Existenţa unui drum de lungime 2 între ele presupune
existenţa unui nod xk, din graf, cu proprietatea că există atât arcul (xi,xk) cât şi arcul (xi,xk). Pentru a
vedea dacă acesta există, luăm pe rând fiecare nod al grafului şi verificăm dacă există sau nu ambele
arce ((xi,xk) şi (xi,xk)). Aceasta este echivalent cu a verifica dacă, în matricea booleană a adiacenţe-
lor directe, există vreun indice k astfel încât elementul k al liniei i şi elementul k al coloanei j să fie
ambele egale cu 1. Dacă folosim operaţiile algebrei booleene de adunare şi înmulţire:
+& 0 1 ×& 0 1
0 0 1 0 0 0
1 1 1 1 0 1

atunci verificările de mai sus sunt echivalente cu a verifica dacă elementul de pe poziţia (i,j) din A2
este egal cu 1. Valoarea 1 spune doar că există cel puţin un drum de lungime 2 de la xi la xj. Dacă
dorim să vedem şi câte sunt, vom folosi regulile de înmulţire şi adunare obişnuită.
De asemenea, se poate observa că existenţa unui drum de lungime 3 de la xi la xj presupune
existenţa unui nod xk astfel încât să existe un drum de lungime 2 de la xi la xk şi un arc de la xk la xj,
care este echivalent cu a verifica dacă există vreun indice k astfel încât elementul k al liniei i din

114
Bazele cercetării operaţionale 47

matricea A2 şi elementul k al coloanei j din A sunt ambele egale cu 1 sau, mai simplu, dacă
elementul (i,j) din A3 este 1.
Din cele de mai sus se observă că existenţa drumurilor de lungime k este dată de valorile
matricei Ak, dacă s-au folosit regulile algebrei booleene şi numărul lor este dat de Ak, dacă s-au
folosit regulile obişnuite.

Pasul 2. Vom calcula succesiv puterile lui A până la puterea An-1

Dacă între nodurile xi şi xj există un drum de lungime ≥ n atunci el va conţine un număr de


noduri mai mare sau egal nu n+1 şi, cum în graf sunt doar n vârfuri, este clar că cel puţin unul, să
zicem xk, va apărea de două ori. Vom avea în acest caz un drum de la xi până la prima apariţie a lui
xk, şi un drum de la ultima apariţie a lui xk la xj. Eliminând toate nodurile dintre prima apariţie a lui
xk şi ultima apariţie a sa vom obţine un drum de la xi la xj, în care xk apare o singură dată. Aplicând
acest procedeu pentru toate nodurile care apar de mai multe ori pe drum, vom obţine un drum de la
xi la xj, în care fiecare nod apare o singură dată (deci un drum elementar), care are evident cel mult
n-1 arce. În concluzie, dacă există vreun drum de la xi la xj atunci există şi un drum elementar şi,
deci, va exista o putere a lui A, între A1 şi An-1, în care poziţia (i,j) este diferită de 0. Pentru
deciderea existenţei unui drum între oricare două noduri este suficientă, deci, calcularea doar a
primelor n-1 puteri ale lui A.

Pasul 3. Se calculează matricea D = A + A2 + ... + An-1

Dacă ne interesează doar existenţa drumurilor dintre noduri, nu şi numărul lor, vom folosi
înmulţirea şi adunarea booleană şi conform observaţiei de mai sus:
( (
1 daca exista cel putin un drum de x i la x j
dij =  ( (
0 daca nu exista nici un drum de x i la x j

În acest caz, observând că:

A⋅(A + I)n–2 = C 0n− 2 ⋅A + C1n − 2 ⋅A2 + C 2n − 2 ⋅A3 + ... + C nn −− 22 ⋅An–1 = A + A2 + A3 + ... + An-1 = D

rezultă că e suficient să calculăm doar puterea n-2 a matricei A + I şi apoi s-o înmulţim cu A.
Avantajul acestei metode, în ceea ce priveşte economia de timp, este susţinut şi de următoarea
observaţie: dacă D conţine toate perechile de arce între care există drum atunci:

D = (A + A2 + ... + An-1) + An + An+1 + ... + An+k = D oricare ar fi k ≥ 0 ⇒


⇒ A⋅(A + I)n–2+k = (A + A2 + ... + An-1) + An + An+1 + ... + An+k-1 = D = A⋅(A + I)n–2 ⇔
⇔A⋅(A + I)n–2+k = A⋅(A + I)n–2 oricare ar fi k ≥ 0

deci de la puterea k = n-2 toate matricile Ak sunt egale. Putem, deci, calcula direct orice putere a lui
r
A+I mai mare sau egală cu n-1 (de exemplu calculând (A+I)2, (A+I)4, (A+I)8, ..., (A + I) 2 , r fiind
prima putere a lui 2 pentru care 2r ≥ n-2).
Procedeul de mai sus nu asigură decât aflarea faptului dacă există sau nu drum între două
noduri, eventual ce lungime are şi câte sunt de această lungime. Totuşi, în problemele practice cel
mai important este să ştim care sunt efectiv aceste drumuri. Deoarece toate drumurile pot fi
descompuse în drumuri elementare şi în problemele practice în general acestea sunt cele care
interesează, paşii următori ai algoritmului vor fi dedicaţi găsirii lor. Pentru găsirea acestora se
foloseşte reprezentarea grafului prin matricea latină de la cazul F.

Pasul 4. Construim matricea latină L asociată grafului, unde:


115
Elemente de teoria grafurilor 48

daca exista arcul (x i , x j )


( (
x x
lij =  i j
daca nu exista arcul (x i , x j )
( (
0
~
şi matricea L , definită prin:
~ x j daca exista arcul (x i , x j )
( (

0 daca nu exista arcul (x i , x j )


lij =  ( (

numită matricea latină redusă.


Găsirea unui drum de lungime 2 de la xi la xj presupune găsirea unui nod cu proprietatea că
există arcele (xi,xk) şi (xk,xj) şi memorarea vectorului (xi, xk, xj). Aceasta este echivalent cu a găsi
un indice k astfel încât elementul de pe poziţia k a liniei i, din matricea L, să fie xi,xk şi elementul
~ ~
de pe poziţia k al coloanei j, din matricea L , să fie xj. Vom înmulţi deci matricea L cu matricea L ,
folosind însă nişte reguli de calcul speciale, numite înmulţire şi adunare latină.

Definiţia 1: Se numeşte alfabet o mulţime de semne numite simboluri sau litere {si/i∈I}
unde I este o mulţime oarecare de indici, finită sau nu.
Definiţia 2: Se numeşte cuvânt un şir finit de simboluri notat s i1 s i 2 ...s i n .
Definiţia 3: Se numeşte înmulţire latină o operaţie definită pe mulţimea cuvintelor unui
alfabet, notată " × L ", astfel:
s i1 s i 2 ...s i n × L s j1 s j2 ...s jm = s i1 s i 2 ...s i n s j1 s j2 ...s jm
(produsul a două cuvinte se obţine prin concatenarea lor)
Înmulţirea latină este asociativă, are ca element neutru cuvântul vid, nu e
comutativă şi un element este inversabil doar dacă este cuvântul vid.
Definiţia 3: Se numeşte adunare latină o funcţie definită pe mulţimea cuvintelor unui
alfabet cu valori în mulţimea parţilor mulţimi cuvintelor, notată " + L " astfel:
 s s ...s 
s i1 s i 2 ...s i n + L s j1 s j2 ...s jm =  i1 i 2 i n 
s j1 s j2 ...s jm 
(suma a două cuvinte este mulţimea formată din cele două cuvinte)

Pasul 5. Se calculează succesiv matricile:


~ ~ ~
L2 = L × L L , L3 = L2 × L L , ... ,Lk+1 = Lk × L L

folosind operaţiile de înmulţire şi adunare latină, alfabetul fiind mulţimea nodurilor grafului, unde
operaţia de înmulţire este uşor modificată, produsul dintre două elemente ale matricilor fiind 0, dacă
unul dintre ele este 0 sau au un nod comun şi este produsul latin al lor, în caz contrar.
Din felul cum a fost construită, matricea Lk va conţine toate drumurile elementare de
lungime k. Cum un drum elementar poate avea cel mult n noduri (câte are graful cu totul) rezultă
că:
− primele n-1 puteri ale lui L conţin toate drumurile elementare din graf;
− puterile lui L mai mari sau egale cu n au toate elementele egale cu 0;
− matricea Ln-1 conţine toate drumurile hamiltoniene din graf (dacă există).

Observaţie: Deoarece obţinerea matricii D prin metoda de mai sus presupune un volum
foarte mare de calcule (de exemplu, dacă graful are 100 de noduri, ridicarea unei matrici de
100×100 la puterea 100) pentru obţinerea acesteia se poate aplica şi următorul algoritm:

Pas 1. Se construieşte matricea de adiacenţă A;


Pas 2. Pentru fiecare linie i se adună boolean la aceasta toate liniile j pentru care aij = 1.

116
Bazele cercetării operaţionale 49

Pas 3. Se reia pasul 2 până când, după o aplicare a acestuia, matricea rămâne aceeaşi (nu
mai apare nici un 1)
Ultima matrice obţinută este matricea drumurilor D numită şi matricea conexiunilor totale.
Această metodă, deşi mai simplă nu spune însă şi care sunt aceste drumuri, pentru găsirea
lor aplicându-se, de exemplu, înmulţirea latină

117
Elemente de teoria grafurilor 50

5. ARBORI. Problema arborelui de valoare optimă

În acest subcapitol grafurile vor fi considerate neorientate.

5.1. Noţiunea de arbore

Un arbore este un graf neorientat, finit, conex şi fără cicluri. Grafurile din fig. 4.1. sunt
arbori.

x1 x1 x1 x1 x1

x1
x1

x1 x1 x1 x1

a) c)
b)

Figura 4.1

Studiul arborilor este justificat de existenţa în practică a unui număr mare de probleme care
pot fi modelate prin arbori. Dintre acestea amintim:

1. construirea unor reţele de aprovizionare cu apă potabilă (sau cu energie electrică sau
termică etc) a unor puncte de consum, de la un punct central;
2. construirea unor căi de acces între mai multe puncte izolate;
3. desfăşurarea unui joc strategic;
4. luarea deciziilor în mai multe etape (arbori decizionali);
5. evoluţii posibile ale unui sistem pornind de la o stare iniţială;
6. construirea unei reţele telefonice radiale, a unei reţele de relee electrice;
7. legarea într-o reţea a unui număr mare de calculatoare;
8. organigramele întreprinderilor;
9. studiul circuitelor electrice în electrotehnică (grafe de fluenţă etc);
10. schemele bloc ale programelor pentru calculatoare etc.

În toate problemele de mai sus se doreşte ca, dintre muchiile unui graf neorientat, să se
extragă arborele optim din mulţimea tuturor arborilor care pot fi extraşi din graful dat.
Deoarece definiţia arborelui este dificil de aplicat pentru deciderea faptului că un graf este
arbore sau nu (şi în special sunt greu de verificat conexitatea şi mai ales existenţa ciclurilor) există
mai multe caracterizări posibile ale unui arbore, acestea fiind date de teorema de mai jos:

Teoremă. Dacă H este un graf neorientat finit, atunci următoarele afirmaţii sunt echivalente:

1) H este arbore;
2) H nu conţine cicluri şi, dacă se unesc printr-o muchie două noduri neadiacente, se
formează un ciclu (şi numai unul). Arborele este, deci, pentru o mulţime de noduri dată,
graful cu numărul maxim de arce astfel încât să se păstreze proprietatea că nu are cicluri);
3) H este conex şi dacă i se suprimă o muchie se creează două componente conexe (arborele
este graful conex cu numărul minim de arce);

118
Bazele cercetării operaţionale 51

4) H este conex şi are n-1 muchii;


5) H este fără cicluri şi are n-1 muchii;
6) Orice pereche de noduri este legată printr-un lanţ şi numai unul.

Demonstraţie :

1)⇒ 2). între cele două noduri adiacente noii muchii introduse exista deja un drum în fostul graf.
Acest drum, împreună cu noul arc va forma evident un ciclu şi afirmaţia 2) a fost
demonstrată.
2)⇒3). Pentru oricare două vârfuri neunite printr-o muchie, adăugând muchia dintre cele două
vârfuri s-ar crea, conform ipotezei, un ciclu care conţine această muchie, deci două
drumuri între cele două noduri, din care unul nu conţine noua muchie, adică în graful
iniţial exista un drum între cele două noduri. Dacă nu există cicluri înseamnă că între
oricare două noduri există un singur drum. Pentru două noduri unite printr-o muchie,
aceasta este chiar drumul corespunzător celor două noduri. Dacă suprimăm această muchie
între cele două noduri nu va mai exista nici un drum, formându-se două componente
conexe.
3)⇒4). Demonstraţia se face prin inducţie după n = numărul de noduri ale grafului. Pentru n=2 este
evident. Presupunem afirmaţia adevărată pentru toate grafurile cu cel mult n noduri. Dacă
graful are n+1 noduri, prin suprimarea unei muchii se formează două componente conexe
fiecare având cel mult n noduri (n1 ≤ n, n2 ≤ n şi n1 + n2 = n+1) şi deci au n1 – 1 respectiv
n2 – 1 muchii. În concluzie graful iniţial a avut (n1 – 1) + (n2 – 1) +1 = n1 + n2 – 1= (n+1)-1
muchii, ceea ce era de demonstrat.
4)⇒5). Dacă ar avea un ciclu atunci prin suprimarea unui arc al acestuia ar rămâne de asemenea
conex. Eliminăm acest arc apoi repetăm procedeul pentru graful parţial rămas şi tot aşa
până când nu mai rămâne nici un ciclu. În acest moment graful rămas este conex şi nu are
cicluri deci este arbore şi deci are n-1 arce, în contradicţie cu faptul că el avea n-1 arce
înainte de a începe suprimarea arcelor;
5)⇒6). Dacă între două noduri ar exista două drumuri atunci acestea ar forma la un loc un ciclu.
Deci între 2 noduri este cel mult un drum. Dacă între două noduri nu ar exista nici un drum
ar fi cel puţin două componente conexe în graf, fiecare fiind arbore (pentru că nu există
cicluri) şi deci fiecare ar avea un număr de arce cu 1 mai mic decât numărul de noduri.
Făcând adunarea, ar rezulta că în graf sunt strict mai puţin de n-1 arce.
6)⇒1). Dacă H ar avea un ciclu, între două noduri ale acestuia ar exista două lanţuri, în
contradicţie cu ipoteza.

Presupunem că avem un graf pentru care am verificat deja dacă este conex. Dacă nu este
atunci acesta, evident, nu are nici un graf parţial care să fie arbore.
Presupunem de asemenea că fiecărei muchii îi este asociată o valoare reală.

5.2. Algoritmi pentru găsirea arborelui de valoare optimă

Vom da mai jos trei algoritmi pentru determinarea unui graf parţial al grafului, care să fie
arbore şi pentru care suma valorilor arcelor sale să fie minimă (sau maximă).
Toţi algoritmii descrişi în continuare extrag arborele prin colectarea una câte una a muchiilor
acestuia.

A. Algoritmul lui Kruskal

Pasul 1. Dintre toate muchiile grafului se alege muchia de valoare minimă (maximă). Dacă
minimul este multiplu se alege la întâmplare una din muchiile respective. Deoarece acest
"la întâmplare" trebuie cumva tradus în limbajul calculatorului, în cazul implementării unui
119
Elemente de teoria grafurilor 52

program bazat pe acest algoritm, vom perturba din start valorile muchiilor, la k muchii cu
aceiaşi valoare V adunând respectiv valorile ε, 2ε, ... , kε, unde ε este foarte mic (în orice
caz, kε mai mic decât diferenţa dintre valoarea acestor arce si valoarea imediat superioară a
unui arc), pozitiv.
Pasul 2. Dintre toate muchiile rămase, se alege cea de valoare minimă (maximă);
Pasul 3. Dintre toate muchiile rămase, se alege cea de valoare minimă (maximă), astfel încât să nu
se formeze cicluri cu cele deja alese;
Pasul 4. Se reia algoritmul de la pasul 3 până se colectează n-1 muchii.

Deşi s-a demonstrat că algoritmul găseşte întotdeauna arborele optim, el are dezavantajul că
este foarte laborios (de fiecare dată trebuie calculat minimul unei mulţimi mari sau foarte mari –
există situaţii în practică în care graful are sute de mii de arce) şi, în plus, trebuie aplicat un algoritm
special ca să respectăm condiţia de a nu se forma cicluri, la alegerea unui nou arc.
O metodă posibilă este ca, după adăugarea fiecărui arc, să se împartă graful în componente
conexe şi să alegem apoi un arc care nu are ambele extremităţile în aceeaşi componentă conexă.
De asemenea este clar că, în cazul existenţei arcelor de valori egale, deoarece se alege la
întâmplare, există mai multe variante de evoluţie a alegerii arcelor. Totuşi, cu toate că pot fi mai
multe grafuri la care se poate ajunge prin acest algoritm, ele vor avea toate aceeaşi valoare (minima
(sau maxima) posibilă).

B. Algoritmul lui Sollin

Pasul 1. Pentru fiecare nod se alege muchia adiacentă de valoare minimă (maximă).
Pasul 2. Se evidenţiază componentele conexe, existente în graful parţial format din arcele alese
până în acest moment.
Pasul 3. Pentru fiecare componentă conexă se alege muchia adiacentă de valoare minimă
(maximă). Prin muchie adiacentă unei componente conexe înţelegem o muchie care are o
singură extremitate printre nodurile componentei respective.
Pasul 4. Se reia algoritmul de la pasul 2 până rămâne o singură componentă conexă. Aceasta este
arborele optim căutat.

Acest algoritm asigură de asemenea găsirea arborelui optim, necesită mult mai puţine
calcule (la fiecare alegere se calculează minimul doar pentru muchiile adiacente unui singur nod),
evită automat formarea ciclurilor, dar, pentru grafuri foarte mari, la un moment dat pot exista atât de
multe componente conexe care trebuie memorate succesiv, încât calculul devine greoi sau, pe
calculator, depăşeşte posibilităţile de memorare ale calculatorului.

C. O variantă a algoritmului lui Kruskal

Pasul 1. Dintre toate muchiile grafului se alege cea de valoare minimă (maximă);
Pasul 2. Dintre toate muchiile adiacente componentei conexe formată din arcele alese până în acest
moment, se alege cea de valoare minimă (maximă);
Pasul 3. Se reia pasul 2 până se colecţionează n-1 muchii.

Algoritmul are toate avantajele algoritmului lui Sollin şi, în plus, lucrează cu o singură
componentă conexă, fiind mult mai uşor de implementat pe calculator şi mult mai rapid în execuţie.

Exemplu: 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
120
Bazele cercetării operaţionale 53

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 4.2.
Se cere găsirea variantei de construcţie de cost minim, care să asigure accesul din oraş la
oricare din obiectivele turistice.

P2
4 9
7
P1 8 8 P3
8 P4
2
5 7
3 9 4
O
3 3 8
P6 2 P5
5 7
6
8 P8
P7

Figura 4.2

Rezolvare

Condiţia de cost minim implică două obiective:


1. Să se construiască minimul de arce necesare;
2. Să se construiască cele mai ieftine legături.
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 staţiune la oricare alta (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 pe rând cei trei algoritmi pentru
găsirea acestuia:

A. Kruskal

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 vre-o 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 vre-o 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 4.3.

121
Elemente de teoria grafurilor 54

P2
4

P1 P3
2 P4
3 4
O
3 3
P6 2 P5
7
P8
P7

Figura 4.3

B. Sollin

Vom alege: pentru nodul O → arcul OP3


pentru nodul P1 → arcul P1P6
pentru nodul P2 → arcul P1P2
pentru nodul P3 → arcul OP3
pentru nodul P4 → arcul P4P5
pentru nodul P5 → arcul OP5
pentru nodul P6 → arcul P1P6
pentru nodul P7 → arcul OP7
pentru nodul P8 → arcul P5P8

Rezultă graful parţial:


P2
4

P1 P3
2 P4
3 4
O
3
P6 2 P5 7
P8
P7

Figura 4.4

După cum se vede, s-au format două componente conexe: C1 = {P1,P2,P6}


C2 = {O,P3,P4,P5,P7,P8}.
Vom alege: pentru C1 → arcul OP6
pentru C2 → arcul OP6

şi obţinem o singură componentă conexă, care este arborele căutat.

122
Bazele cercetării operaţionale 55

C. Varianta algoritmului lui Kruskal

Succesiunea alegerii arcelor va fi:

1 → OP3
2 → OP7
3 → OP6
4 → OP5
5 → P1P6
6 → P1P2
7 → P4P5
8 → P5P8

123
Elemente de teoria grafurilor 56

6. Cuplajul a două mulţimi disjuncte. Probleme de afectare (de repartiţie)


În practica economică sunt foarte des întâlnite probleme în care se doreşte asocierea optimă
a elementelor unei mulţimi X = {x1, x2, ... , xn} cu elementele unei alte mulţimi Y = {y1, y2, ... , ym}
în condiţiile unor limitări existente (şi cunoscute) ale posibilităţilor de asociere.
În general, fiecare asociere posibilă xi ↔ yj aduce un anumit efect aij (profit, cost etc) care
poate fi calculat şi vom presupune că este cunoscut.
Limitările asupra asocierilor se traduc de obicei prin faptul că:

1. Un element xi poate fi asociat doar cu anumite elemente din Y şi reciproc;


2. La sfârşit, fiecărui element din X i s-a asociat cel mult un element din Y şi reciproc.

Asocierea optimă presupune, de obicei, două obiective:

1. Să se facă maximul de asocieri;


2. Suma efectelor asocierilor să fie maximă (sau minimă, în funcţie de semnificaţia
acestora).

Reprezentarea geometrică a situaţiei de mai sus este un graf de forma:

x1
y1

x2
y2

ym
xn

numit graf bipartit.

Definiţia 1: Se numeşte graf bipartit un graf G = (X, U) în care mulţimea nodurilor poate fi
împărţită în două mulţimi disjuncte A şi B astfel încât orice arc are extremitatea iniţială în A şi cea
finală în B.

Definiţia 2: Se numeşte cuplaj al unui graf bipartit o submulţime de arce W ⊆ U cu


proprietatea că nu există două arce adiacente (sau altfel spus, pentru orice nod există cel mult un arc
incident acestuia).

Definiţia 3: Se numeşte cuplaj maxim un cuplaj cu proprietatea că orice arc care nu face
parte din cuplaj este adiacent cu un arc din cuplaj ( ⇔ orice arc am adăuga, nu mai rămâne cuplaj
⇔ nu există nici un cuplaj în care să se includă strict ⇔ conţine numărul maxim de arce
neadiacente)
Este evident că numărul de arce ale unui cuplaj este mai mic sau egal cu numărul de
elemente din fiecare din mulţimile A şi B (≤ min (A,B). Este interesant de văzut însă cât de
mare este el efectiv şi în ce condiţii este egal chiar cu min (A,B).
Referitor la prima întrebare, în 1931 König a demonstrat o teoremă care permite stabilirea
numărului de arce ale unui cuplaj maxim:

124
Bazele cercetării operaţionale 57

Teoremă: Numărul maxim de arce ale unui cuplaj într-un graf bipartit G = (A∪B, Γ) este
egal cu min( A − C + Γ(C ) )
C ⊂A

În ceea ce priveşte a doua problemă, observăm mai întâi că putem presupune că întotdeauna
A≤B, în caz contrar inversând sensul tuturor arcelor grafului, problema rămânând aceeaşi.
În acest caz:

min( A − C + Γ(C ) ) = A ⇔ min( A − C + Γ(C ) ) – A = 0 ⇔ min(− C + Γ(C ) ) = 0 ⇔


C ⊂A C ⊂A C ⊂A

⇔ max ( C − Γ(C ) ) = 0 ⇔ Γ(C ) ≥ C oricare ar fi C ⊆ A


C ⊂A
sau altfel spus, pentru orice submulţime C a lui A, mulţimea nodurilor atinse de arce care pleacă din
nodurile sale, adică Γ(C), are cel puţin atâtea elemente cât C.
De exemplu, la repartizarea angajaţilor pe posturi, fiecare angajat poate obţine un post dorit
dacă şi numai dacă oricare ar fi mulţimea de r angajaţi există cel puţin r posturi diferite din care pot
alege.
Presupunem, în continuare, că s-a asociat fiecărui arc (xi,xj) o valoare vij.

Definiţia 4: Se numeşte valoare a unui cuplaj suma valorilor arcelor care îl formează.

În acest moment putem spune că determinarea unei asocieri optime a mulţimilor X şi Y de la


început este echivalentă matematic cu determinarea unui cuplaj maxim de valoare optimă (minimă
sau maximă) în graful bipartit asociat.
Dintre problemele întâlnite în practica economică, ce se reduc matematic la găsirea unui
cuplaj maxim de valoare optimă, amintim:

1. Problema repartizării muncitorilor unei secţii la utilajele acesteia în funcţie de pregătirea


şi preferinţele muncitorilor, complexitatea maşinilor etc;
2. transferarea unor informaţii într-un grup;
3. Repartizarea angajaţilor pe posturi;
4. Formarea grupelor de lucru după afinităţile dintre membrii colectivului.

În 1955, bazându-se pe teorema lui König, H.W. Kuhn a elaborat un algoritm, cunoscut în
literatura de specialitate sub denumirea de algoritmul ungar, cu ajutorul căruia se poate determina
un cuplaj maxim de valoare minimă într-un graf bipartit pentru care A=B= n.
El se bazează pe observaţia că, dacă se adună (sau scade) aceeaşi număr la toate valorile
arcelor, nu se modifică ierarhia cuplajelor maxime, în ceea ce priveşte valoarea lor.
Vom prezenta algoritmul concomitent cu rezolvarea unui caz particular, pentru o mai bună
receptare a acestuia:
"Într-o secţie produsele finite se obţin în urma efectuării succesive a 6 operaţii pe 6 maşini.
În această secţie sunt angajaţi 6 muncitori, fiecare fiind calificat pentru efectuarea oricărei din cele 6
operaţii. Pentru a optimiza activitatea în secţie cei 6 muncitori au fost supuşi la un test în care
fiecare a prelucrat un număr de piese, pe toate cele şase maşini. În final, calculându-se timpul mediu
în care muncitorul Mi efectuează operaţia Oj s-au obţinut valorile (în ore) date în tabelul de mai jos:

M1 M2 M3 M4 M5 M6
O1 4 3 6 2 6 8
O2 5 4 8 3 8 9
O3 5 6 8 2 8 7
O4 4 5 7 2 7 8
O5 4 6 6 3 6 7
O6 6 6 8 3 8 9

125
Elemente de teoria grafurilor 58

Să se găsească acea repartiţie a muncitorilor la maşini astfel încât timpul în care o piesă se
prelucrează succesiv pe cele 6 maşini să fie minim."

Pasul 1. Se construieşte matricea pătratică M care are elementele:

 valoarea arcului (x i , x j ) daca exista arcul (x i , x j )


daca nu exista arcul (x i , x j )
mij = 
 ∞

4 3 6 2 6 8
5 4 8 3 8 9

Pentru exemplul ales vom avea: M =  45 6 8 2 8 7
5 7 2 7 8
4 6 6 3 6 7
6
 6 8 3 8 9 

Pasul 2. Se scade din fiecare linie minimul acesteia apoi, în matricea obţinută, din fiecare coloană
minimul acesteia (se poate face şi invers, rezultatul final va fi acelaşi). Pentru exemplul
dat vom obţine succesiv matricile:
2 1 4 0 4 6 1 0 1 0 1 2
2 1 5 0 5 6 1 0 2 0 2 2
 3 4 6 0 6 5  
M1 =  2 3 5 0 5 6  şi apoi M2 =  12 23 23 00 23 12 
1 3 3 0 3 4 0 2 0 0 0 0
 3 3 5 0 5 6 2 2 2 0 2 2
   
Ultima matrice este cea asupra căreia se aplică următoarele calcule. În acest moment pe
fiecare linie şi pe fiecare coloană se află cel puţin un 0, care corespunde celui mai mic timp. Se
încearcă în continuare folosirea doar a acestor repartizări:

Pasul 3. În ordinea crescătoare a numărului de zerouri şi de sus în jos (în cazul existenţei mai
multor linii cu acelaşi număr de zerouri ) se încadrează pentru fiecare linie zeroul a cărui
coloană conţine cele mai puţine zerouri (primul de la stânga dintre acestea, în caz de
egaliate) şi se barează celelalte zerouri de pe linia şi coloana acestuia. Pe parcursul
algoritmului sunt luate în considerare la numărare doar zerourile neîncadrate şi nebarate
încă. În final, pe fiecare linie şi pe fiecare coloană va fi cel mult un zero încadrat. Dacă în
final sunt n (= dimensiunea matricei) zerouri, atunci arcele corespunzătoare formează
cuplajul căutat. Dacă sunt mai puţine se trece la pasul 4.
În exemplul nostru avem trei linii cu câte un zero (a 3-a, a 4-a şi a 5-a) .Îl încadrăm pe cel de
pe linia 3 (prima dintre ele) şi barăm restul zerourilor de pe linia 3 şi coloana 3, obţinând:

1 0 1 0 1 2
1 0 2 0 2 2
2 3 3 0 3 1
1 2 2 0 2 2
0 2 0 0 0 0
2
 2 2 0 2 2 

În acest moment pe liniile 1 şi 2 se află un zero. Se încadrează cel de pe linia 1 şi se


barează celelalte de pe linia 1 şi coloana 2, obţinând:

126
Bazele cercetării operaţionale 59

1 0 1 0 1 2
1 0 2 0 2 2
2 3 3 0 3 1
1 2 2 0 2 2
0 2 0 0 0 0
2
 2 2 0 2 2 

Ultima linie cu zerouri este linia 5 din care îl încadrăm pe primul şi le barăm pe celelalte:

1 0 1 0 1 2
1 0 2 0 2 2
2 3 3 0 3 1
1 2 2 0 2 2
0 2 0 0 0 0
2 2 2 0 2 2 

În total nu sunt 6 zerouri încadrate (sunt doar trei) şi deci trecem la pasul 4.

Pasul 4. La acest pas se va stabili numărul minim posibil de linii şi coloane care să conţină toate
zerourile matricii. În acest sens vom proceda astfel:

a) se marchează liniile care nu au nici un zero încadrat;


b) se marchează coloanele care au un zero barat pe o linie marcată;
c) se marchează liniile care au un zero încadrat pe o linie marcată (dacă există);
Se repetă operaţiile b) şi c) până nu mai poate fi marcată nici o linie şi nici o coloană.

În cazul nostru vom avea: a) → se marchează liniile 2, 4 şi 6;


b) → se marchează coloanele 2 şi 4;
c) → se marchează liniile 1 şi 3;
b) → nu mai marcăm nici o coloană deoarece nu mai există
nici un zero barat pe liniile 1 şi 3, care să corespundă unei
coloane nemarcate;
c) → nu mai marcăm nici o linie, deoarece nu a mai apărut
nici o coloană marcată.
Rezultă:
1 0 1 0 1 2
1 0 2 0 2 2
2 3 3 0 3 1
1 2 2 0 2 2
0 2 0 0 0 0
2 2 2 0 2 2
 

Pasul 5. Se taie liniile nemarcate şi coloanele marcate:

1 0 1 0 1 2
1 0 2 0 2 2
2 3 3 0 3 1
1 2 2 0 2 2
0 2 0 0 0 0
2
 2 2 0 2 2 

Pasul 6. Se împart elementele matricei în trei grupe:

G1 = elemente aflate la intersecţii de linii netăiate cu coloane netăiate;

127
Elemente de teoria grafurilor 60

G2 = elemente situate la intersecţii de linii tăiate cu coloane netăiate sau de linii netăiate
cu coloane tăiate;
G3 = elemente situate la intersecţii de coloane tăiate cu linii tăiate

Pasul 7. Se găseşte minimul grupei G1, care se scade din fiecare element al lui G1 şi se adună la
fiecare element al grupei G3. Elementele grupei G2 rămân neschimbate.
Pentru exemplul dat, minimul lui G1 este 1 şi obţinem noua matrice:
0 0 0 0 0 1
0 0 1 0 1 1
1 3 2 0 2 0
0 2 1 0 1 1
0 3 0 1 0 0
1
 2 1 0 1 1 
Pasul 8. Se reia algoritmul de la pasul 3.

Vom avea după marcare:


0 0 0 0 0 1
0 0 1 0 1 1
1 3 2 0 2 0
0 2 1 0 1 1
0 3 0 1 0 0
1 2 1 0 1 1
 
Deoarece avem 6 zerouri încadrate, am obţinut cuplajul maxim de valoare minimă căutat, căruia îi
va corespunde repartizarea muncitorilor pe operaţii de mai jos:
M1 O1
6
M2 4 O2

4
M3 O3

M4 7 O4
3
M5 6 O5

M6 O6

care duce la o durată totală a prelucrării unei piese de 6 + 4 + 7 + 6 + 3 = 26 ore


Observaţie: Deoarece regula de a alege de sus în jos la linii cu acelaşi număr de zerouri este
arbitrară şi de asemenea alegerea primului zero de la stânga, putem ajunge şi la alte
cuplaje maxime, dar toate vor avea aceeaşi valoare, cea minimă. De exemplu, un alt
cuplaj optim este:
M1 O1

M2 4 O2

0 0 0 0 0 1
0 0 1 0 1 1 M3 4 6 O3
1 3 2 0 2 0 adică
0 2 1 0 1 1 M4 7 O4
0 3 0 1 0 0
1
 2 1 0 1 1  6
M5 O5
3
M6 O6

128
Bazele cercetării operaţionale 61

care are de asemenea valoarea 26.

Observaţia 1. Dacă dorim un cuplaj de valoare maximă atunci vom calcula la pasul 1
matricea M astfel:

1. Construind matricea A de elemente:

 valoarea arcului (x i , x j ) daca exista arcul (x i , x j )


daca nu exista arcul (x i , x j )
aij = 
 −∞

2. Matricea M va avea componentele: mij = max (a ij ) − a ij


1≤ i, j≤ n

apoi aplicăm în continuare algoritmul.

Observaţia 2. Dacă A≠B atunci aplicăm acelaşi algoritm cu singura diferenţă că ne


vom opri când vom obţine un număr de zerouri egal cu min (A,B).

129
Elemente de teoria grafurilor 62

7. Drumuri şi circuite hamiltoniene


Una dintre cele mai cunoscute probleme economice este problema comis voiajorului. Comis
voiajorul este un individ care trebuie să prezinte s-au să distribuie marfa comandată la o serie de
centre distribuite în general neliniar pe o anumită zonă teritorială (localităţile dintr-un judeţ,
magazinele dintr-un cartier, persoanele dintr-un sat etc). Dacă numărul de obiective care trebuie
vizitate este mare sau foarte mare iar timpul disponibil foarte limitat atunci devine vitală o
asemenea organizare a trecerii pe la fiecare obiectiv încât să se efectueze în timpul minim posibil.
Acest timp minim se traduce prin drumul cel mai scurt, iar cel mai scurt drum este evident cel în
care se trece pe la fiecare obiectiv o singură dată. În plus, la sfârşit trebuie să se afle în punctul
iniţial, adică sediul firmei la care lucrează.
O reprezentare a regiunii aprovizionate, în care centrele pe la care se trece sunt vizualizate
prin puncte iar căile de acces la acestea prin segmente de curbe, va fi evident un graf, problema
reducându-se la a găsi circuitul hamiltonian de lungime minimă.
În timp, s-au evidenţiat o multitudine de probleme reductibile la găsirea unui drum (sau
circuit) hamiltonian într-un graf, cum ar fi:

1. Problema poştaşului (găsirea traseului cel mai scurt care trece pe la toate locuinţele ce
aparţin de oficiul poştal la care lucrează acesta);
2. Problema adunării deşeurilor (cel mai scurt drum care trece pe la toate punctele de
depozitate a deşeurilor);
3. Problema succesiunii operaţiilor (executarea mai multor operaţii pe o maşină în acea
ordine în care suma timpilor consumaţi cu pregătirea maşinii pentru trecerea de la o
operaţie la următoarea să fie minim)
4. Ordinea lipirii unor componente electronice pe o placă, etc;

Determinarea drumurilor hamiltoniene


Problema determinării drumului (circuitului) hamiltonian de valoare optimă s-a dovedit
deosebit de dificilă, neexistând nici acum un algoritm care să rezolve problema în timp polinomial
şi nici măcar o metodă simplă prin care să se decidă dacă într-un graf dat există sau nu drumuri
hamiltoniene.
Există însă mai mulţi algoritmi, unii exacţi alţii heuristici, care reuşesc, într-un caz sau altul,
să rezolve problema satisfăcător şi în timp util.

A. Algoritmul lui Foulkes


Pasul 1. Se scrie matricea booleană A asociată grafului G.

Pasul 2. Se determină matricea D a drumurilor grafului G prin procedeul expus la începutul


capitolului şi apoi matricea M = I + D.

Pasul 3. Se împarte mulţimea nodurilor grafului în submulţimi disjuncte astfel:

1. Se consideră în matricea M liniile pline (cu toate elementele 1). Nodurile ce corespund liniilor
pline cu 1 formează submulţimea C1.
2. Se elimină liniile şi coloanele care corespund nodurilor din submulţimea stabilită.
3. Se reia raţionamentul de la punctul 1 pe matricea redusă obţinută la punctul 2 obţinându-se
următoarea submulţime şi în continuare toate celelalte până se epuizează toate liniile matricei.

130
Bazele cercetării operaţionale 63

Pasul 4. Se construieşte graful G' în care:

1. Nodurile care formează o submulţime sunt reprezentate prin puncte în interiorul unui
dreptunghi şi între acestea se trasează arcele existente în graful iniţial G.
2. Se trasează legăturile dintre submulţimi. Ele sunt reprezentate prin arcele existente în
graful iniţial G între nodurile submulţimii C1 şi cele ale submulţimii C2, între nodurile
submulţimii C2 şi cele ale submulţimii C3 etc.

Pasul 5. Se găsesc drumurile hamiltoniene

Un drum hamiltonian se găseşte plecând de la un vârf din submulţimea C1, trecând prin toate
vârfurile acesteia cu un drum hamiltonian, din ultimul vârf la care se ajunge în C1 trecând la un vârf
din C2, parcurgând în continuare un drum hamiltonian în a doua submulţime şi tot aşa, trecând prin
toate submulţimile şi parcurgând, deci, toate nodurile grafului iniţial, o singură dată. Aplicând acest
procedeu în toate modurile posibile se obţin toate drumurile hamiltoniene din graful iniţial G.
(Observaţie: poate să nu existe nici un drum hamiltonian în graful G, caz în care algoritmul se
opreşte deoarece la un anumit pas nu mai exista nici o linie plina cu 1).

Observaţie. Algoritmul lui Foulkes reduce găsirea drumurilor hamiltoniene în graful iniţial
G (care în problemele practice este foarte mare) la găsirea mai multor drumuri hamiltoniene mai
mici în componente tare conexe ale grafului. Dacă un graf are o singură componentă tare conexă,
algoritmul lui Foulkes nu este eficient, în acest caz trebuind aplicaţi alţi algoritmi cum ar fi cel bazat
pe înmulţirea latină.

B. Algoritmul lui Chen pentru determinarea drumurilor hamiltoniene


în grafuri fără circuite

Fie G = (X,U) un graf orientat fără circuite, cu n noduri: X = {x1, x2, … , xn}. Vom
considera că am calculat matricea drumurilor D şi puterile de atingere ale tuturor nodurilor.
Dacă în graful G există un drum de la nodul xi la nodul xj atunci evident p(xi) > p(xj),
deoarece în orice vârf în care se poate ajunge din xj se poate ajunge şi din xi dar din xj nu se poate
ajunge în xj pentru că nu există circuite.

Teorema 2.3 (Chen) Un graf cu n noduri, fără circuite conţine un drum hamiltonian dacă şi
numai dacă există relaţia:

n
n (n − 1)
∑ p(x i ) = 2
i =1

Demonstraţie
“⇒” Fie H un drum hamiltonian şi presupunem că nodurile grafului au fost notate în
ordinea în care apar în acest drum. Atunci din orice nod xi se poate ajunge în toate nodurile cu
indice mai mare şi numai în acestea (altfel ar exista circuite) şi deci puterea unui nod xi este n – i, de
unde:
n
n (n − 1)
∑ p(x i ) = (n – 1) + (n – 2) + … + 1 + 0 = 2
i =1
“⇐” Ordonând vârfurile în ordinea descrescătoare a puterii lor de atingere (i > j ⇔ p(xi) <
p(xj)) şi cum graful nu are circuite, vom obţine o matrice D cu toate zerourile deasupra diagonalei
(evident pe o poziţie (i,i) nu se află nici un 1 iar dacă ar fi un 1 pe poziţia (i,j) cu i > j ar însemna că
131
Elemente de teoria grafurilor 64

din xi se poate ajunge în xj, deci în toate nodurile în care se poate ajunge din xj, iar din xj nu se poate
ajunge în xi, deci p(xi) > p(xj) în contradicţie cu ipoteza de ordonare a nodurilor). Cum deasupra
n (n − 1) n (n − 1)
diagonalei sunt poziţii iar suma puterilor vârfurilor este chiar rezultă că toate
n n
poziţiile de deasupra diagonalei sunt 1. Aceasta înseamnă că există toate arcele de forma (xi,xi+1)
(altfel n-ar exista drum de la xi la xi+1, deoarece toate drumurile au indicii nodurilor în ordine
descrescătoare) şi deci drumul hamiltonian (x1, x2, … , xn) q.e.d.

Teorema 2.4 Dacă într-un graf orientat fără circuite există un drum hamiltonian atunci
acesta este unic.

Demonstraţie Deoarece un drum hamiltonian se identifică cu o permutare a nodurilor


grafului, existenţa a două drumuri hamiltoniene implică existenţa a două permutări distincte a
nodurilor grafului şi cum două permutări distincte diferă prin cel puţin o inversiune vor exista două
noduri xi şi xj în ordinea xi → xj pe un drum şi invers pe celălalt, existând deci un drum atât de la xi
la xj cât şi de la xj la xi, cele două formând împreună un circuit, în contradicţie cu ipoteza.

Pe aceste teoreme se bazează algoritmul lui Chen de determinare a drumului hamiltonian


într-un graf orientat fără circuite:

Pasul1. Se scrie matricea de adiacenţă A


Pasul2. Se calculează matricea drumurilor D
Pasul3. Dacă există un indice i cu dii = 1 atunci graful are circuite, nu se poate aplica algoritmul
lui Chen şi algoritmul se opreşte. Dacă nu, se trece la pasul 4.
Pasul4. Se calculează puterile de atingere pentru fiecare nod.
n
n (n − 1)
Pasul5. Dacă nu se verifică relaţia ∑ p(x i ) = 2
atunci graful nu are drumuri hamiltoniene
i =1
şi algoritmul se opreşte, altfel se trece la pasul 6.
Pasul6. Se ordonează nodurile în ordinea descrescătoare a puterilor lor de atingere şi obţinem
drumul hamiltonian căutat.

C. Algoritmul lui Kaufmann

Pasul 1. Construim matricea latină L asociată grafului, unde:

x i x j daca exista arcul (x i , x j )


( (
daca nu exista arcul (x i , x j )
lij =  ( (
0
~
Pasul 2. Construim matricea L , definită prin:
~ x j daca exista arcul (x i , x j )
( (

0 daca nu exista arcul (x i , x j )


lij =  ( (

numită matricea latină redusă.

Pasul 3. Se calculează succesiv matricile:


~ ~ ~
L2 = L × L L , L3 = L2 × L L , ..., Lk+1 = Lk × L L , ...

132
Bazele cercetării operaţionale 65

folosind operaţiile de înmulţire şi adunare latină, alfabetul fiind mulţimea nodurilor grafului, unde
operaţia de înmulţire este uşor modificată, produsul dintre două elemente ale matricilor fiind 0, dacă
unul dintre ele este 0 sau au un nod comun, şi este produsul latin al lor, în caz contrar.
Din felul cum a fost construită, matricea Lk va conţine toate drumurile elementare de
lungime k. Cum un drum elementar poate avea cel mult n noduri (câte are graful cu totul) rezultă
că:
− primele n-1 puteri ale L conţin toate drumurile elementare din graf;
− puterile lui L mai mari sau egale cu n au toate elementele egale cu 0;
− matricea Ln-1 conţine toate drumurile hamiltoniene din graf.

Pasul 4. Dacă se doresc şi circuitele atunci se verifică pentru fiecare drum hamiltonian dacă poate
fi completat până la un circuit (adică dacă există în graf arcul care uneşte nodul final cu cel
iniţial);
Pasul 5. Dacă se doreşte şi drumul (sau circuitul) de valoare optimă (maximă sau minimă) se
calculează suma valorilor pentru fiecare drum şi/sau circuit şi se alege cel cu valoarea
optimă.

În concluzie, metoda înmulţirii latine (A. Kaufmann – J. Melgrange) determină toate


drumurile elementare din graf, prin calcularea matricelor M(1), M(2), M(3), …, M(n-1).
În matricea M(n-1) se citesc drumurile hamiltoniene.
Această metodă a înmulţirii latine (algoritmul lui Kaufmann) este utilă, mai ales, în cazul
grafurilor tare conexe, unde algoritmul lui Foulkes nu este eficient. Totuşi, metoda este greu de
aplicat în grafuri cu un număr mare de noduri. În acest caz este preferabil să se construiască graful
condensat, să se determine drumurile hamiltoniene în fiecare în parte cu algoritmul lui Kaufmann şi
apoi, ca la algoritmul lui Foulkes, să se caute drumurile hamiltoniene în graful iniţial.

D. Un algoritm bazat pe algoritmul ungar


Fie G = (X,U) un graf orientat cu n noduri X = {x1, x2, … , xn}.

Pasul 1. Se construieşte graful bipartit H = (A∪B,V) în care A = B = X şi V = U (adică am folosit


pentru G reprezentarea prin corespondenţă).
Pasul 2. Se găseşte pentru graful H cuplajul maxim de valoare minimă.
Pasul 3. Se construieşte graful parţial al lui G format doar cu arcele cuplajului găsit. Este uşor de
demonstrat că, componentele tare conexe ale acestuia sunt toate nişte circuite. Dacă s-a
format un singur circuit acesta este circuitul hamiltonian de valoare minimă. Dacă s-au
format mai multe se trece la pasul 4.
Pasul 4. Pentru fiecare arc aflat pe circuitul de lungime minimă (dacă sunt mai multe se iau în
considerare arcele tuturor) se reia algoritmul de la pasul 1 pentru graful parţial rezultat din
G prin eliminarea acestui arc.
Pasul 5. Pentru fiecare graf parţial se continuă procedeul până se ajunge la unul din cazurile:

Cazul1. Cuplajului maxim găsit îi corespunde un singur circuit. Dacă acest circuit
este primul obţinut atunci valoarea sa i se atribuie unei variabile Z şi
circuitul este păstrat. Dacă nu este primul atunci valoarea sa se compară cu
Z şi, dacă este mai mică, ea devine noua valoare a lui Z şi circuitul se
păstrează, eliminându-l pe cel corespunzător fostei valori a lui Z. În caz
contrar se trece la alt graf parţial neanalizat încă.
Cazul2. Cuplajul maxim are o valoare mai mare decât Z. Pentru acest graf parţial se
abandonează ramificarea.

133
Elemente de teoria grafurilor 66

Pasul 6. Se continuă analiza grafurilor parţiale până sunt analizate toate ramificaţiile. Valoarea Z
finală este valoarea circuitului de valoare minimă iar circuitul corespunzător este cel
optim.

Analiza de mai sus poate fi schematizată printr-un arbore de tipul:

în care fiecare nod este un graf parţial de analizat, iar pentru fiecare arc, nodul inferior este un graf
parţial care provine din graful corespunzător nodului superior, prin suprimarea unui arc de pe
circuitele de lungime minimă corespunzătoare cuplajului maxim de valoare minimă al acestuia.

Observaţie: Algoritmul asigură găsirea circuitului de valoare minimă iar în cazul în care
algoritmul lui Foulkes nu funcţionează este o alternativă mai bună decât algoritmul lui Kaufmann.
Totuşi el nu lucrează în timp polinomial şi în unele cazuri (de exemplu cazuri în care se formează
foarte multe cicluri cu lungime minimă) necesită un număr imens de calcule.
În aceste cazuri se pot folosi metode euristice prin care se elimină din start o serie de arce,
considerate a avea valori prea mari pentru a se putea afla pe circuitul hamiltonian de valoare
minimă, apoi se aplică în graful parţial rămas unul din algoritmii de mai sus.

134
Bazele cercetării operaţionale 67

8. Drumuri optime într-un graf

În marea majoritate a problemelor care pot fi modelate prin grafuri nu ne interesează numai
dacă există sau nu legături între componentele reprezentate prin nodurile grafului ci şi intensitatea
acestora. Această intensitate are semnificaţia unei valori numerice (pozitive sau negative) asociate
arcului corespunzător legăturii a cărei intensitate o măsoară.
În aplicaţiile economice această valoare poate fi:

− lungimea drumului dintre două localităţi;


− costul parcurgerii rutei reprezentate prin arcul corespunzător;
− durata parcurgerii rutei respective;
− cantitatea transportată pe ruta respectivă;
− capacitatea maximă a rutei respective;
− câştigul realizat prin trecerea de la o stare la alta a sistemului;
− consum de energie pentru efectuarea trecerii respective;
− punctaj realizat etc.

Una din problemele care poate apărea în aceste situaţii este găsirea, pentru o anumită
pereche de noduri (sau mai multe perechi), a drumului optim între acestea.
Pentru formalizarea problemei vom introduce noţiunea de valoare a unui drum, care este
egală cu suma valorilor arcelor care îl compun. Vom nota în continuare valoarea unui arc (xi,xj) cu
v(xi,xj) sau cu vij. În aceste condiţii putem enunţa problema drumului optim astfel:
"Dat un graf G = (X,U) şi o funcţie care asociază fiecărui arc o valoare reală, să se
găsească, pentru o pereche dată de noduri, drumul (drumurile) de valoare optimă (minimă sau/şi
maximă) între cele două noduri şi valoarea acestuia (acestora)"
Deoarece este vorba de găsirea minimului unei mulţimi de numere reale, prima întrebare
care se pune este dacă aceasta admite minim. Dacă mulţimea nodurilor grafului este infinită atunci
pot exista o infinitate de drumuri elementare distincte între cele două noduri şi mulţimea valorilor
acestora poate avea orice formă (închisă sau nu, mărginită sau nu) devenind foarte greu de
caracterizat cazurile când minimul dorit există. Deoarece totuşi majoritatea covârşitoare a
problemelor economice se modelează prin grafuri cu număr finit de noduri, ne vom limita în
continuare doar la acestea.
Un număr finit de noduri n atrage după sine existenţa unui număr finit de arce (cel mult n2)
n -1
1
şi a unui număr finit de drumuri elementare ( cel mult n⋅n!⋅ ∑ k! ). Deoarece oricărui drum d îi
k =1
corespunde un drum elementar de (obţinut prin eliminarea tuturor subcircuitelor lui d) putem calcula
valoarea oricărui drum ca sumă între valoarea drumului elementar corespunzător şi valorile unor
subcircuite ale sale, fiecare înmulţită cu numărul de parcurgeri ale circuitului respectiv.
În concluzie, dacă există un circuit de valoare negativă înseamnă că există drumuri de
valoare oricât de mică (cele care conţin acest circuit), obţinută prin parcurgerea acestuia de oricâte
ori dorim) şi, deci, mulţimea valorilor drumurilor este nemărginită inferior, neexistând drum de
valoare minimă. Dacă există un circuit de valoare pozitivă atunci există drumuri de valoare oricât de
mare şi mulţimea valorilor drumurilor este nemărginită superior, neexistând drum de valoare
maximă.
Dacă nu există circuite de valoare negativă atunci valoarea oricărui drum este mai mare sau
egală cu a drumului elementar corespunzător, deci drumul de valoare minimă (dacă există) va fi un
drum elementar. Cum mulţimea drumurilor elementare este finită (şi deci şi mulţimea valorilor lor)
va avea minorant şi am lămurit problema compatibilităţii problemei. Analog, dacă nu există circuite
de valoare pozitivă atunci valoarea oricărui drum este mai mică sau egală cu a drumului elementar
135
Elemente de teoria grafurilor 68

corespunzător, deci drumul de valoare maximă (dacă există) va fi un drum elementar. Cum
mulţimea drumurilor elementare este finită (şi deci şi mulţimea valorilor lor), va avea majorant.
Obs. 1. Dacă în graf nu există decât arce de valoare pozitivă atunci există drum de valoare
minimă.
Obs. 1. Dacă în graf nu există decât arce de valoare negativă atunci există drum de valoare
maximă.
Obs. 1. Dacă în graf nu există circuite atunci există şi drum de valoare minimă şi drum de
valoare maximă.
Deoarece din cele de mai sus se sesizează importanţa existenţei circuitelor într-un graf vom
da în continuare un algoritm de depistare a existenţei circuitelor într-un graf:

Pasul 1. Se construieşte mulţimea A formată din nodurile pentru care toate arcele incidente sunt
incidente spre interior ( noduri în care toate arcele "intră" sau, altfel spus, noduri din care
nu "pleacă" nici un arc).
Pasul 2. Se găsesc toate nodurile care nu sunt din A pentru care toate arcele incidente au cealaltă
extremitate în A (noduri din care se poate "ajunge" doar in A). Dacă nu există nici un
astfel de arc se trece la pasul 4.
Pasul 3. Se adaugă arcele găsite la pasul 2 la mulţimea A apoi se reia algoritmul de la pasul 2,
pentru noua mulţime A.
Pasul 4. Dacă A conţine mulţimea tuturor nodurilor atunci graful nu conţine circuite. Dacă au
rămas noduri în afara lui A atunci graful conţine circuite.

Algoritmi de găsire a drumului optim


Din cauza varietăţii nelimitate a grafurilor posibile, nu există un algoritm care să rezolve
orice problemă în timp util, dar s-au elaborat o mulţime de algoritmi, fiecare fiind cel mai eficace în
anumite cazuri. Aceşti algoritmi pot fi grupaţi în cinci categorii:

1. Algoritmi prin calcul matricial (Bellman-Kalaba, I. Tomescu, Bellman-Schimbell);


2. Algoritmi prin ajustări succesive: (Ford);
3. Algoritmi prin inducţie (Dantzig);
4. Algoritmi prin ordonare prealabilă a vârfurilor grafului;
5. Algoritmi prin extindere selectivă (Dijkstra).

În continuare vom prezenta trei dintre aceşti algoritmi.

A. Algoritmul lui Bellman - Kalaba

Algoritmul se aplică în grafuri finite care nu au circuite de valoare negativă (pentru o


problemă de minim) sau care nu au circuite de valoare pozitivă (într-o problemă de maxim) şi
găseşte drumurile de valoare minimă (maximă) de la toate nodurile grafului la un nod oarecare,
fixat. Dacă dorim să cunoaştem drumurile de valoare minimă (maximă) între oricare două noduri
vom aplica algoritmul, pe rând, pentru fiecare nod al grafului.
Fie G = {x1, x2, ... ,xn} un graf orientat finit. Presupunem (fără a restrânge generalitatea, că
am numerotat nodurile astfel încât nodul spre care căutăm drumurile de valoare minimă (maximă)
de la celelalte noduri să fie xn.

Pasul 1. Se construieşte matricea pătratică M cu dimensiunea egală cu numărul de noduri ale


grafului ale cărei elemente sunt:

136
Bazele cercetării operaţionale 69


 valoarea arcului (x i , x j ) daca exista arcul (x i , x j ) si i ≠ j

mij = 0 daca i = j

 + ∞ (într - o problema de minim)  daca nu exista arcul (x , x )
− ∞ (într - o problema de maxim) i j

Pasul 2. Se adaugă succesiv liniile Li la matricea M, elementele acestora calculându-se prin


relaţiile de recurenţă:
1. L1j = mjn j = 1,...,n (prima linie este ultima coloană, transpusă, a matricii M)
2. Lij = min (Li-1,j , min (mjk + Li-1,k)) într-o problemă de minim
k =1, n

sau Lij = max (Li-1,j , max (mjk + Li-1,k)) într-o problemă de maxim
k =1, n

Pasul 3. După calcularea fiecărei linii noi se compară elementele ei cu cele ale precedentei:
− Dacă Lij = Li-1,j pentru orice j = 1,...,n atunci se opreşte recurenţa şi ultima linie
calculată conţine valorile minime ale drumurilor de la celelalte noduri la nodul xn.
− Dacă există cel puţin un indice j cu Lij ≠ Li-1,j se trece la calcularea noii linii Li+1

Pasul 4. Pentru găsirea drumului care dă valoarea minimă de la un nod xj la nodul xn se găsesc,
începând înapoi de la ultima linie, pe care s-au obţinut valorile finale, notată Lf, nodurile
x k1 , x k 2 , ..., x k r care formează drumul căutat, unde x k1 = xj, x k r = xn şi fiecare alt indice
ki+1 este cel pentru care s-a obţinut minimul(maximul) de pe poziţia ki al liniei Li.

Observaţie: Pentru grafuri foarte mari, algoritmul necesită un volum mare de memorie, prin
necesitatea memorării matricei M, care este greu de manipulat. Chiar dacă din cele n2 arce posibile
graful ar avea doar un procent foarte mic matricea grafului va avea tot n2 poziţii de memorat şi
analizat.
Exemplu: Presupunem dat graful orientat de mai jos, în care se doreşte găsirea drumului de valoare
minimă de la nodul x1 la nodul x9.
x2
4 9
7
x1 8 8 x3
3 x4
2
5 7
3 9 4
3 x5 3
9
x6 2 x8
5 7
6
8 x9
x7

0 4 ∞ ∞ 5 ∞ ∞ ∞ ∞
∞ 0 7 9 ∞ ∞ ∞ ∞ ∞
∞ ∞ 0 3 ∞ ∞ ∞ ∞ 9
∞ ∞ ∞ 0 ∞ ∞ ∞ ∞ 3
Matricea M va fi  ∞ 8 2 7 0 3 2 9 ∞
∞ 8 ∞ ∞ ∞ 0 5 ∞ ∞
∞ ∞ ∞ ∞ ∞ ∞ 0 6 8
 ∞ ∞ ∞ 4 ∞ ∞ ∞ 0 7
∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 0 

137
Elemente de teoria grafurilor 70

iar după calcularea liniilor Li obţinem:

x1 x2 x3 x4 x5 x6 x7 x8 x9
x1 0 4 ∞ ∞ 5 ∞ ∞ ∞ ∞
x2 ∞ 0 7 9 ∞ ∞ ∞ ∞ ∞
x3 ∞ ∞ 0 3 ∞ ∞ ∞ ∞ 9
x4 ∞ ∞ ∞ 0 ∞ ∞ ∞ ∞ 3
x5 ∞ 8 2 7 0 3 2 9 ∞
x6 ∞ 8 ∞ ∞ ∞ 0 5 ∞ ∞
x7 ∞ ∞ ∞ ∞ ∞ ∞ 0 6 8
x8 ∞ ∞ ∞ 4 ∞ ∞ ∞ 0 7
x9 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 0
L1 ∞ ∞ 9 3 ∞ ∞ 8 7 0
L2 ∞ 12 6 3 10 13 8 7 0
L3 15 12 6 3 8 13 8 7 0
L4 13 12 6 3 8 13 8 7 0
L5 13 12 6 3 8 13 8 7 0

Deoarece L4 = L5 oprim calcularea liniilor după calcularea liniei 5. În această linie se află
valorile celor mai scurte de la toate nodurile la nodul x9. Drumul dorit de noi (x1 → x9) are valoarea
dată de prima poziţie a liniei 5, fiind egal cu 13.
Pentru a găsi acest drum, plecăm înapoi de la linia 4 şi avem:
x1 x5
↑ ↑
13 = 8 + 5 x3
⇓ ↑
8 = 6 + 2 x4
⇓ ↑
6 = 3 + 3

3 → x9

B. Algoritmul lui Ford simplificat

Algoritmul lui Ford simplificat se aplică doar în grafuri care nu admit circuite. Cu ajutorul
lui se găseşte drumul de valoare optimă între două noduri fixate xi şi xj. Printr-o eventuală
renumerotare a nodurilor putem presupune că nodul de la care porneşte drumul este x1, care va fi
numit nod iniţial, iar nodul la care se termină este xn, numit nod final.
Algoritmul este:

Pasul 1. I se dă vârfului iniţial valoarea 0 (zero): w(x0) = 0


Pasul 2. Se construieşte mulţimea A formată din nodul iniţial: A = {x1}
Pasul 3. Se analizează nodurile din afara mulţimii A.
− Dacă există noduri în care se poate ajunge prin arce directe doar de la nodurile
mulţimii A, acestea se adaugă la mulţimea A, cu valoarea:
w(xi) = min (w (x j ) + v (x j , x i )) , în problemele de minim
xj
(
∃ x j ,x i )

138
Bazele cercetării operaţionale 71

sau w(xi) = max (w (x j ) + v (x j , x i )) , în problemele de maxim


xj
(
∃ x j ,x i )
apoi se trece la pasul 4
− Dacă nu există nici un nod de acest tip atunci nu există nici un drum de la x1 la xn.
STOP

Pasul 4. Se analizează mulţimea A:


− Dacă xn ∈ A atunci valoarea sa reprezintă valoarea drumului de valoare optimă de la
x1 la xn. Pentru găsirea acestui drum se porneşte înapoi de la nodul final xn şi se
găsesc nodurile x k1 , x k 2 , ..., x k r care formează drumul căutat, unde x k1 = xn, x k r =
x1 şi fiecare alt indice ki+1 este cel pentru care:

w( x k i +1 ) + v( x k i +1 , x k i ) = w( x k i ) STOP
− Dacă xn ∉ A se reia algoritmul de la pasul 3.

Exemplu: Pentru acelaşi graf şi aceeaşi pereche de noduri din exemplul rezolvat cu algoritmul lui
Bellman-Kalaba vom avea succesiv:

pas1: w(x1) = 0
pas2: A = {x1}
pas3: Nodurile în care se poate ajunge doar din x1: {x5} ≠ ∅
w{x5) = min( w(x1) + v(x1,x5)) = 0 + 5 = 5
pas4: x9 ∉ A
pas3: A = {x1,x5} şi nodurile în care se poate ajunge prin arce directe doar din x1 şi x5 sunt: {x6}≠ ∅
w{x6) = min( w(x1) + v(x1,x6), w(x5) + v(x5,x6)) = min(0 + 3 , 5 + 3) = 3
pas4: x9 ∉ A
pas3: A = {x1,x5,x6} şi nodurile în care se poate ajunge prin arce directe doar din x1, x5 şi x6 sunt:
{x2,x7} ≠ ∅
w{x2) = min( w(x1) + v(x1,x2), w(x5) + v(x5,x2), w(x6) + v(x6,x2)) = min(0 + 4,5 + 8,3 + 8) = 4
w{x7) = min( w(x5) + v(x5,x7), w(x6) + v(x6,x7)) = min(5 + 2,3 + 5) = 7
pas4: x9 ∉ A
pas3: A = {x1,x2,x5,x6,x7} şi nodurile în care se poate ajunge prin arce directe doar din x1, x2, x5, x6
şi x7 sunt: {x3,x8} ≠ ∅
w{x3) = min( w(x2) + v(x2,x3), w(x5) + v(x5,x3)) = min(4 + 7,5 + 2) = 7
w{x8) = min( w(x5) + v(x5,x8), w(x7) + v(x7,x8)) = min(5 + 9,7 + 6) = 13
pas4: x9 ∉ A
pas3: A = {x1,x2,x3,x5,x6,x7,x8} şi nodurile în care se poate ajunge prin arce directe doar din x1,
x2,x3,x5, x6, x7 şi x8 sunt: {x4} ≠ ∅
w{x4) = min( w(x2) + v(x2,x4), w(x3) + v(x3,x4),w(x5) + v(x5,x4), w(x8) + v(x8,x4)) = min(4 +
9,7 + 3,5 + 7,13 + 4) = 10
pas4: x9 ∉ A
pas3: A = {x1,x2,x3,x4,x5,x6,x7,x8} şi nodurile în care se poate ajunge prin arce directe doar din x1,
x2, x3, x4, x5, x6, x7 şi x8 sunt: {x9} ≠ ∅
w{x9) = min( w(x3) + v(x3,x9), w(x4) + v(x4,x9), w(x7) + v(x7,x9), w(x8) + v(x8,x9)) = min(7 +
9, 10 + 3, 7 + 8, 13 + 7) = 13
pas4: x9 ∈ A şi urmează să găsim drumul care are lungimea 13.
Avem succesiv:
w(x9) = w(x4) + v(x4,x9)
w(x4) = w(x3) + v(x3,x4)
w(x3) = w(x5) + v(x5,x3)
139
Elemente de teoria grafurilor 72

w(x5) = w(x1) + v(x1,x5)


deci drumul căutat este: x1 → x5 → x3 → x4 → x9

Observaţia 1. Dacă graful are un circuit atunci se poate demonstra uşor că nu vom putea da
valoare nici unui nod al acestuia şi dacă există vreun drum de la x1 la xn care trece prin unul din
nodurile circuitului nu vom putea da valoare nici lui xn, cu toate că există drum de la x1 la xn.
Observaţia 2: Algoritmul necesită pentru memorare şi manipulare doar cunoaşterea, pentru
fiecare nod, a nodurilor spre care "pleacă" arce din acesta şi valorile acestor arce, fiind mult mai
uşor de aplicat sau implementat pe calculator. El are însă dezavantajul că se poate aplica doar în
grafuri fără circuite.

C. Algoritmul Ford generalizat

Algoritmul lui Ford generalizat a fost creat cu scopul de a putea găsi drumul optim şi în
grafurile care au circuite. Cu ajutorul lui se găseşte drumul de valoare optimă între două noduri
fixate xi şi xj. Printr-o eventuală renumerotare a nodurilor putem presupune că nodul de la care
porneşte drumul este x1, care va fi numit nod iniţial, iar nodul la care se termină este xn, numit nod
final.
Algoritmul este:

Pasul 1. I se dă vârfului iniţial valoarea 0 (zero): w(x0) = 0 şi tuturor celelalte valoarea +∞ (într-o
problemă de minim) sau -∞ (într-o problemă de maxim).
Pasul 2. În ordinea crescătoare a indicilor nodurilor se calculează pentru fiecare nod, pe bază
fostelor valori, noile valori cu formula:
 
 
w (xi) = min w (x i ), min (w (x j ) + v (x j , x i )) în problemele de minim
*
xj
 ( 
 ∃ x j ,x i ) 
 
 
sau w (xi) = max  w (x i ), max (w (x j ) + v (x j , x i )) în problemele de maxim
*
xj
 ∃(x j , x i )

 
*
Pasul 3. Se compară noile valori w (xi) cu fostele valori w(xi):
− Dacă w*(xi) = w(xi) pentru orice nod xi atunci:
− dacă w(xn) < ∞ (la problema de minim) sau w(xn) > -∞ (la problema de maxim),
valoarea nodului xn reprezintă valoarea drumului de valoare minimă(maximă) de
la x1 la xn. Pentru găsirea acestui drum se porneşte înapoi de la nodul final xn şi
se găsesc nodurile x k1 , x k 2 , ..., x k r care formează drumul căutat, unde x k1 = xn,
x k r = x1 şi fiecare alt indice ki+1 este cel pentru care:
w( x k i +1 ) + v( x k i +1 , x k i ) = w( x k i ) STOP
− dacă w(xn) = +∞ (-∞) atunci nu există nici un drum de la x1 la xn. STOP
− Dacă există cel puţin un nod pentru care w*(xi) < w(xi) se reia algoritmul de la pasul
2 pentru noile valori ale vârfurilor.

Observaţie: Algoritmul poate găsi drumul şi în grafuri cu circuite dar este evident mult mai
lent decât cel simplificat. Pentru scurtarea duratei de execuţie se poate modifica algoritmul în sensul
că o valoare nou calculată a unui vârf va fi folosită imediat ca atare la calculul noilor valori ale
celorlalte, nu doar după ce se calculează noile valori ale tuturor vârfurilor.

140
Bazele cercetării operaţionale 73

D. Algoritmul lui Dijkstra

În algoritmul Ford simplificat, pentru a găsi valoarea nodului final, deci a drumului minim,
plecăm de la nodul iniţial în toate direcţiile posibile, păstrând de fiecare dată toate nodurile
analizate. Acest fapt duce la un consum inutil de timp, deoarece foarte multe din aceste noduri nu
vor face parte din drumul optim. Pentru a elimina acest neajuns, algoritmul lui Dijkstra încearcă să
păstreze, la fiecare iteraţie, mulţimea minimă de noduri care să le conţină pe toate cele care vor
forma efectiv drumul optim. În plus, algoritmul se poate aplica şi în drumuri cu circuite. Ca un
minus este faptul că se aplică doar la probleme de minim. Algoritmul are următorii paşi:

Pasul 1. I se dă vârfului iniţial valoarea 0 (zero): w(x0) = 0


Pasul 2. Se construieşte mulţimea A formată din nodul iniţial: A = {x1}
Pasul 3. Se analizează nodurile din afara mulţimii A.
− Dacă există noduri în care se poate ajunge prin arce directe de la noduri din A
(nu doar de la nodurile mulţimii A, ca la algoritmul lui Ford simplificat) se
calculează pentru toate acestea:
w(xi) = min (w (x j ) + v (x j , x i )) în problemele de minim
x j∈A
(
∃ x j ,x i )
dar, spre deosebire de algoritmul lui Ford simplificat, se adaugă la mulţimea A doar
cel pentru care se obţine valoarea minimă, apoi se trece la pasul 4.
− Dacă nu există nici un nod de acest tip atunci nu există nici un drum de la x1 la xn.
STOP

Pasul 4. Se analizează mulţimea A:


− Dacă xn ∈ A atunci valoarea sa reprezintă valoarea drumului de valoare optimă de la
x1 la xn. Pentru găsirea acestui drum se porneşte înapoi de la nodul final xn şi se
găsesc nodurile x k1 , x k 2 , ..., x k r care formează drumul căutat, unde x k1 = xn, x k r =
x1 şi fiecare alt indice ki+1 este cel pentru care:

w( x k i +1 ) + v( x k i +1 , x k i ) = w( x k i ) STOP
− Dacă xn ∉ A se reia algoritmul de la pasul 3.

Exemplu Vom aplica algoritmul la acelaşi graf folosit la ceilalţi algoritmi, pentru a putea
face comparaţii:

pas1: w(x1) = 0
pas2: A = {x1}
pas3: Nodurile în care se poate ajunge şi din x1: {x2, x5, x6} ≠ ∅
w{x2) = min( w(x1) + v(x1,x2)) = 0 + 4 = 4
w{x5) = min( w(x1) + v(x1,x5)) = 0 + 5 = 5
w{x6) = min( w(x1) + v(x1,x6)) = 0 + 3 = 3
min(w{x2),w{x5),w{x6)) = w{x6) = 3
pas4: x9 ∉ A
pas3: A = {x1,x6} şi nodurile în care se poate ajunge prin arce directe din x1 sau x6 sunt:
{x2,x5,x7}≠∅
w{x2) = min( w(x1) + v(x1,x2), w(x6) + v(x6,x2)) = min(0 + 4 , 3 + 8) = 4
w{x5) = min( w(x1) + v(x1,x5)) = min(0 + 5) = 5
w{x7) = min( w(x6) + v(x6,x7)) = min(3 + 5) = 8
min(w{x2),w{x5),w{x7)) = w{x2) = 4
pas4: x9 ∉ A
141
Elemente de teoria grafurilor 74

pas3: A = {x1,x2,x6} şi nodurile în care se poate ajunge prin arce directe din x1, x2 sau x6 sunt:
{x3,x4,x5,x7} ≠ ∅
w{x3) = min( w(x2) + v(x2,x3)) = min(4 + 7) = 11
w{x4) = min( w(x2) + v(x2,x4)) = min(2 + 9) = 11
w{x5) = min( w(x1) + v(x1,x5)) = min(0 + 5) = 5
w{x7) = min( w(x6) + v(x6,x7)) = min(3 + 5) = 0
min(w{x3),w{x4),w{x5),w{x7)) = w{x5) = 5
pas4: x9 ∉ A
pas3: A = {x1,x2,x5,x6} şi nodurile în care se poate ajunge prin arce directe din x1, x2, x5, x6 şi x7
sunt: {x3,x4,x7,x8} ≠ ∅
w{x3) = min( w(x2) + v(x2,x3), w(x5) + v(x5,x3)) = min(4 + 7,5 + 2) = 7
w{x4) = min( w(x2) + v(x2,x4), w(x5) + v(x5,x4)) = min(4 + 9,5 + 7) = 12
w{x7) = min( w(x5) + v(x5,x7), w(x6) + v(x6,x7)) = min(5 + 2,3 + 5) = 7
w{x8) = min( w(x5) + v(x5,x8)) = min(5 + 9) = 14
min(w{x3),w{x4),w{x7),w{x8)) = w{x3) = w{x7) = 7
pas4: x9 ∉ A
pas3: A = {x1,x2,x3,x5,x6,x7} şi nodurile în care se poate ajunge prin arce directe din x1, x2, x3, x5, x6,
şi x7 sunt: {x4,x8,x9} ≠ ∅
w{x4) = min( w(x2) + v(x2,x4), w(x3) + v(x3,x4),w(x5) + v(x5,x4)) = min(4 + 9,7 + 3,5 + 7) =10
w{x8) = min( w(x5) + v(x5,x8), w(x7) + v(x7,x8)) = min(5 + 9,7 + 6) = 13
w{x9) = min( w(x3) + v(x3,x9), w(x7) + v(x7,x9)) = min(7 + 9,7 + 8) = 15
min(w{x4),w{x8),w{x9)) = w{x4) = 10
pas4: x9 ∉ A
pas3: A = {x1,x2,x3,x4,x5,x6,x7} şi nodurile în care se poate ajunge prin arce directe din x1, x2, x3, x4,
x5, x6, şi x7 sunt: {x8,x9} ≠ ∅
w{x9) = min( w(x3) + v(x3,x9), w(x4) + v(x4,x9), w(x7) + v(x7,x9)) = min(7 + 9,10 + 3,7+8)=13
w{x8) = min( w(x5) + v(x5,x8), w(x7) + v(x7,x8)) = min(5 + 9,7 + 6) = 13
min(w{x8),w{x9)) = w{x8) = w{x9) = 13
pas4: x9 ∈ A şi urmează să găsim drumul care are lungimea 13.
Avem succesiv:
w(x9) = w(x4) + v(x4,x9)
w(x4) = w(x3) + v(x3,x4)
w(x3) = w(x5) + v(x5,x3)
w(x5) = w(x1) + v(x1,x5)
deci drumul căutat este: x1 → x5 → x3 → x4 → x9

142
Bazele cercetării operaţionale 75

9. Reţele de transport
Într-o mare varietate de situaţii concrete din practica economică se pune problema deplasării
unei cantităţi de materie, energie, informaţie etc, din anumite locuri, numite surse, în alte locuri,
numite destinaţii. Pentru realizarea acestui transport se folosesc o serie de trasee, numite rute de
legătură. Unităţile indivizibile ale cantităţii Q, care se deplasează de-a lungul rutelor între surse şi
destinaţii, se numesc unităţi de flux, iar ansamblul rutelor, surselor, destinaţiilor şi, eventual, a
altor puncte intermediare se numeşte reţea de transport.
Situaţia de mai sus poate fi reprezentată geometric printr-un graf finit, conex şi fără bucle.
Pentru ca o astfel de problemă să fie suficient de complexă pentru a necesita un studiu
matematic riguros, trebuie ca fiecare sursă să poată aproviziona mai multe destinaţii şi orice
destinaţie să poată fi aprovizionată de mai multe surse.
Aprovizionarea destinaţiilor se poate face direct de la surse sau prin intermediul altor
puncte, numite puncte intermediare. În cazul cel mai general pot exista de asemenea legături între
surse şi/sau legături între destinaţii.
Aşa cum s-a văzut şi la problema de transport, situaţia de mai sus este un cadru extrem de
larg, care permite existenţa unui număr foarte mare de tipuri de probleme posibile, diferite între ele
prin informaţiile suplimentare pe care le avem despre reţea şi prin obiectivele urmărite.
Una dintre acestea este problema determinării cantităţii maxime (minime) care poate fi
transportată de la surse la destinaţii, în situaţia în care sursele dispun de cantităţi limitate (inferior
sau superior), destinaţiile au un necesar sau o putere de absorbţie limitată inferior sau superior iar pe
fiecare rută se poate transporta doar o cantitate cuprinsă între anumite limite.
Pentru studiul matematic al acestei situaţii vom da definiţiile matematice ale obiectelor
implicate în problemă şi ipotezele modelului.

Definiţia 1: Se numeşte reţea de transport standard un graf finit, simplu, conex, fără bucle
G = (X,U) care are următoarele proprietăţi:
+
1. Există şi este unic s ∈ X a.î. U s ≠ ∅, U s = ∅ (din care doar "ies" arce), numit

intrarea reţelei de transport;


− +
2. Există şi este unic t ∈ X a.î. U t = ∅, U t ≠ ∅ (în care doar "intră" arce) numit
ieşirea reţelei de transport;
3. S-a definit o funcţie c: U → R+ care asociază fiecărui arc u un număr strict
pozitiv cu numit capacitatea arcului.

Observaţie: Este clar că exemplele obişnuite au doar rareori o singură sursă şi o singură destinaţie.
Totuşi, printr-o tehnică foarte simplă, orice reţea de transport se poate aduce la forma standard:
1. Dacă sunt mai multe surse se introduce un nod suplimentar din care "pleacă" câte
un arc spre fiecare sursă (şi numai spre acestea), iar capacităţile acestor arce vor fi
egale cu disponibilurile surselor corespunzătoare;
2. Dacă sunt mai multe destinaţii se introduce un nod suplimentar spre care "pleacă"
câte un arc din fiecare destinaţie (şi numai din acestea), iar capacităţile acestor arce
vor fi egale cu necesarurile destinaţiilor corespunzătoare;

Definiţia 2: Se numeşte flux într-o reţea de transport R = (X,U) o funcţie ϕ: U → R+ care


are următoarele proprietăţile:
P1. 0 ≤ ϕu ≤ cu oricare ar fi u din U; valoarea ϕu se numeşte flux al arcului u
P2. ∑ ϕ u = ∑ ϕ u oricare ar fi i ≠ s,t (suma fluxurilor arcelor care "intră" într-
u ∈ U i+ u ∈ U i−

un nod i este egală cu suma fluxurilor arcelor care "ies" din acest nod, cu excepţia
nodului iniţial şi al celui final.
143
Elemente de teoria grafurilor 76

Definiţia 3: Se numeşte valoare a fluxului suma fluxurilor arcelor care "pleacă" din nodul
iniţial s şi se notează cu Φ.
Observaţie: Se poate demonstra uşor că această valoare este egală şi cu suma fluxurilor
arcelor care "intră" în nodul final t. În concluzie avem:

Φ= ∑ ϕ u = ∑ ϕ u
u ∈ U s+ u ∈ U −t

Valoarea fluxului reprezintă cantitatea care se transportă efectiv pe reţea de la surse la


destinaţii.

Definiţia 4: Se numeşte flux de valoare maximă într-o reţea un flux ϕ în această reţea, cu
proprietatea că, pentru orice alt flux ϕ' pe această reţea, avem Φ ≥ Φ'.

Valoarea fluxului de valoare maximă reprezintă cea mai mare cantitate care se poate
transporta efectiv pe reţea, de la surse la destinaţii.

Economic vorbind, ne interesează, referitor la o reţea, răspunsurile la următoarele întrebări:

1. Putem transporta întreaga cantitate necesară la destinaţii?


2. Dacă da, cum transportăm efectiv această cantitate de la surse la destinaţii?
3. Dacă nu, din ce motiv nu putem realiza acest transport?
4. Cum putem înlătura cu eforturi minime acest motiv?

Răspunsul la primele două întrebări se poate afla prin găsirea fluxului de valoare maximă şi
compararea valorii lui cu suma necesarurilor destinaţiilor. În plus, valoarea acestuia pe un arc
reprezintă cantitatea care trebuie transportată pe ruta respectivă, pentru a obţine această valoare a
fluxului.
Răspunsul la ultimele două întrebări porneşte de la observaţia că cea mai mare cantitate care
poate traversa reţeaua de la un cap la altul este egală cu dimensiunea celui mai îngust loc de trecere
prin reţea. Dacă vrem, deci, să mărim fluxul va trebui să lărgim tocmai acest cel mai îngust loc de
traversare al reţelei.
Pentru formalizarea consideraţiilor de mai sus vom introduce noţiunea de tăietură într-o
reţea:

Definiţia 5: Dată o reţea de transport G(X,U) cu s = nodul iniţial şi t = nodul final, se


numeşte tăietură în reţea o partiţie a mulţimii vârfurilor reţelei de transport, formată din două
submulţimi V şi W (V∩W = ∅, V∪W = X) astfel încât s ∈ V şi t ∈ W.

O tăietură poate fi privită, intuitiv, ca o secţiune a reţelei, care lasă nodul iniţial cu o
submulţime din noduri într-o parte, nodul final cu restul nodurilor în cealaltă parte şi retează toate
arcele care trec dintr-o parte în cealaltă.
A cunoaşte o tăietură este echivalent cu a cunoaşte care sunt elementele celor două mulţimi,
V şi W, care formează partiţia.
Vom nota o tăietură prin T = (V,W), convenind ca mulţimea scrisă pe prima poziţie să
conţină nodul iniţial s al reţelei iar cea scrisă pe a doua, nodul final t.

Definiţia 6: Se numeşte capacitate a unei tăieturi T = (V,W) într-o reţea de transport


G(X,U), notată C(T), suma capacităţilor tuturor arcelor care au extremitatea iniţială în V şi cea
finală în W.

144
Bazele cercetării operaţionale 77

C(T) = ∑ c
( )
u = x i ,x j
u

x i ∈V
x j∈W

Pentru a nu exista nici o ambiguitate, insistăm asupra faptului că se vor lua în considerare
doar arcele care trec de la mulţimea ce conţine nodul iniţial spre mulţimea care conţine nodul final,
adică în sensul normal de transport (surse → destinaţie).

Definiţia 7: Se numeşte tăietură de valoare minimă într-o reţea o tăietură T în această


reţea, cu proprietatea că, pentru orice altă tăietură T' în această reţea, avem C(T) ≤ C(T').

Următoarele teoreme fac legătura matematică dintre fluxurile unei reţele şi tăieturile sale:

Teorema 1. Dată o tăietură T = (V,W) şi un flux ϕ într-o reţea de transport avem:

Φ= ∑ ϕ
( )
u = x i ,x j
u – ∑ ϕ
( )
u = x i ,x j
u

x i ∈V x i ∈W
x j∈W x j∈V

sau, altfel spus, valoarea unui flux oarecare este egală cu suma fluxurilor arcelor care trec de la V la
W din care se scade suma fluxurilor arcelor care trec invers, de la W la V, oricare ar fi tăietura T =
(V,W).

Demonstraţie: Avem succesiv:

 
 
Φ= ∑
ϕu =
u = (s, x j )
ϕu +
u = (s, x j )
∑ 
x i ∈V  u∈U +
ϕu − ∑ ∑ ϕu  =


u∈U x− i
x j∈X x j∈X x i ≠s  xi 
= ∑ (ϕ
( )
u = x i ,x j
u −ϕ u ) + ∑ ϕ
( )
u = x i ,x j
u - ∑ ϕ
( )
u = x i ,x j
u = ∑ ϕ
( )
u = x i ,x j
u – ∑ ϕ
( )
u = x i ,x j
u

x i ∈V x i ∈V x i ∈W x i ∈V x i ∈W
x j∈V x j∈W x j∈V x j∈W x j∈V

Corolar: Într-o reţea de transport valoarea oricărui flux este mai mică sau egală decât valoa-
rea oricărei tăieturi.

Demonstraţie: Fie T o tăietură oarecare şi ϕ un flux oarecare. Avem succesiv:

Φ= ∑ ϕ
( )
u = x i ,x j
u – ∑ ϕ
( )
u = x i ,x j
u ≤ ∑ ϕ
( )
u = x i ,x j
u ≤ ∑ c
( )
u = x i ,x j
u = C(T)
x i ∈V x i ∈W x i ∈V x i ∈V
x j∈W x j∈V x j∈W x j∈W

Corolar: Într-o reţea de transport valoarea fluxului maxim este mai mică sau egală decât
valoarea tăieturii minime.
Demonstraţia e evidentă. În plus, din cele de mai sus se vede că egalitatea are loc numai
dacă, pentru tăietura minimă, există un flux pentru care toate arcele de la V la W sunt folosite la
maxim (fluxul e egal cu capacitatea arcelor) iar pe toate arcele de la W la V nu se transportă nimic.

Teorema lui Ford-Fulkerson Dacă fluxul ϕ este maximal atunci există o tăietură de
capacitate egală cu valoarea fluxului.
145
Elemente de teoria grafurilor 78

Demonstraţie: Fie ϕ un flux maximal. Introducem următorul procedeu de marcare a


vârfurilor:
Pasul 1. Se marchează nodul iniţial s cu 0(zero);
Pasul 2. Pentru fiecare vârf marcat xi se marchează cu:
• [+xi] toate vârfurile nemarcate xj pentru care există arcul (xi,xj) şi ϕ(xi,xj) < c(xi,xj)
(adica nodurile spre care mai e loc pentru a se transporta ceva din xi);
• [–xi] toate vârfurile nemarcate xj pentru care există arcul (xj,xi) şi ϕ(xj,xi) > 0
(adică toate nodurile spre care pleacă deja ceva din xi);
Pasul 3. Se repetă pasul 2 până nu mai poate fi marcat nici un vârf.

Dacă vârful final t ar fi marcat, atunci începând de la acesta, am putea construi lanţul
x k1 , x k 2 , ..., x k r unde x k1 = s, x k r = t şi marcajul oricărui vârf x k i +1 este + x k i sau – x k i .
Adăugând la fluxul fiecărui arc al lanţului de tipul ( x k i , x k i +1 ) valoarea:

∆ = min( min (c(x k , x k ) − ϕ (x k , x k )) , (x min,x


(x k i ,x k i +1 ) i i +1 i i +1 )
ϕ (x k i , x k i +1 ) )
k i +1 ki

şi scăzând din fluxul fiecărui arc de tipul ( x k i +1 , x k i ) aceeaşi valoare ∆, obţinem un flux de valoare
Φ + ∆, deci fluxul ϕ nu ar fi maximal.
În concluzie vârful t nu va fi marcat. Fie tăietura T = (V,W), unde V este formată din
mulţimea nodurilor marcate iar W din cele nemarcate. În acest caz, pentru fiecare arc (xi,xj) care
"traversează" tăietura avem:

− dacă xi ∈ V atunci ϕ(xi,xj) = c(xi,xj) deoarece nodul xj nu e marcat


− dacă xi ∈ W atunci ϕ(xi,xj) = 0 deoarece nodul xi nu e marcat

În acest caz avem:


C(T) = ∑ c
( )
u = x i ,x j
u = ∑ ϕ
( )
u = x i ,x j
u – ∑ ϕ
( )
u = x i ,x j
u =Φ
x i ∈V x i ∈V x i ∈W
x j∈W x j∈W x j∈V

şi teorema e demonstrată.

Teorema lui Ford-Fulkerson poate stabili doar valoarea fluxului maxim dar nu dă o metodă
de găsire a acestuia. Pentru a rezolva problema găsirii fluxului de valoare maximă se poate folosi
algoritmul lui Ford-Fulkerson.
Pentru expunerea acestuia vom introduce şi noţiunile de:

arc saturat = un arc pe care fluxul este egal cu capacitatea;


drum complet = un drum de la nodul iniţial s la nodul final t care conţine cel puţin un arc saturat;
flux complet = un flux pentru care orice drum de la nodul iniţial s la nodul final t este complet.

Algoritmul lui Ford-Fulkerson

ETAPA I Se determină un flux complet.

Pasul 1. Se numerotează nodurile reţelei de transport astfel încât x1 = s şi xn = t;


Pasul 2. Se asociază grafului fluxul nul (ϕu = 0 pentru orice arc u din graf);
Pasul 3. În ordine lexicografică, se ia pe rând fiecare drum D de la nodul iniţial la cel final, se
calculează valoarea ∆D = min(c u − ϕ u ) şi se adaugă la fluxul de pe fiecare arc al
u∈D

146
Bazele cercetării operaţionale 79

drumului. Arcul(arcele) unui drum D pentru care s-a obţinut valoarea minimă ∆D va fi
după această adăugare, în mod evident, saturat şi deci drumul D va fi complet.
După epuizarea tuturor drumurilor se obţine un flux complet, de valoare Φ = ∑ ∆ D .
D
Deoarece alegerea drumurilor în ordine lexicografică nu ţine cont de structura reţelei, aşa cum se
poate vedea pe un exemplu, acest procedeu nu asigură întotdeauna găsirea fluxului maxim. Acest
impediment poate fi depăşit fie prin găsirea unei ordini de parcurgere a tuturor drumurilor, care să
dea pentru fiecare reţea fluxul maxim, în urma procedeului de mai sus, fie prin redistribuirea
judicioasă a fluxului găsit la etapa I. A doua variantă este cea care se aplică la etapa II.

ETAPA II Se determină fluxul maxim

Pasul 4. Se marchează nodul iniţial s cu 0(zero);


Pasul 5. Pentru fiecare vârf marcat xi se marchează cu:
• [+xi] toate vârfurile nemarcate xj pentru care există arcul (xi,xj) şi ϕ(xi,xj) < c(xi,xj)
(adica nodurile spre care mai e loc pentru a se transporta ceva din xi);
• [–xi] toate vârfurile nemarcate xj pentru care există arcul (xj,xi) şi ϕ(xj,xi) > 0 (adică
toate nodurile spre care pleacă deja ceva din xi);
Pasul 6. Se repetă pasul 5 până este marcat nodul final sau până când nu mai poate fi marcat nici
un vârf;
Pasul 7. Dacă nodul final a fost marcat atunci fluxul este maxim şi algoritmul se opreşte, în caz
contrar trecându-se la pasul 8;
Pasul 8. Construim un lanţul L = x k1 , x k 2 , ..., x k r unde x k1 = s, x k r = t şi marcajul oricărui vârf
x k i +1 este + x k i sau – x k i . Se calculează:
∆L = min( min (c(x k , x k ) − ϕ (x k , x k )) , (x min,x
(x k i ,x k i +1 ) i i +1 i i +1 )
ϕ (x k i , x k i +1 ) )
k i +1 ki

care se adaugă la fluxul fiecărui arc al lanţului de tipul ( x k i , x k i +1 ) şi se scade din


fluxul fiecărui arc de tipul ( x k i +1 , x k i ).
Pasul 9. Se şterge marcajul şi se reia algoritmul de la pasul 4.

În final, tăietura de valoare minimă este cea în care V = mulţimea nodurilor marcate iar W =
mulţimea nodurilor nemarcate.

Observaţia 1. Algoritmul nu asigură întotdeauna găsirea fluxului maxim, deoarece se poate


ca creşterea fluxului la fiecare iteraţie să se facă cu cantităţi din ce în ce mai mici astfel încât suma
lor să nu atingă niciodată marginea superioară dată de valoarea tăieturii minime, algoritmul având o
infinitate de paşi. Teorema de mai jos dă o condiţie suficientă pentru ca algoritmul să se termine
într-un număr finit de paşi:

Teoremă Dacă toate capacităţile rutelor reţelei sunt numere raţionale atunci algoritmul lui
Ford-Fulkerson are un număr finit de paşi.

Demonstraţie Prin înmulţirea tuturor acestor capacităţi cu cel mai mic multiplu comun al
numitorilor se obţine o reţea cu toate capacităţile numere naturale. Ţinând cont de formula de
calcul, la fiecare iteraţie cantitatea adăugată ∆ va fi număr natural şi cum valoarea fluxului maxim
este mărginită de capacitatea tăieturii minime Cmin, care este de asemenea număr natural, algoritmul
va avea nevoie de cel mult Cmin paşi pentru a o atinge.

Observaţia 2. Teorema de mai sus asigură doar o limitare superioară a numărului de iteraţii
ale algoritmului, faţă de capacitatea tăieturii minime. Această valoare poate fi însă, în anumite

147
Elemente de teoria grafurilor 80

cazuri, foarte mare şi, dacă nu se iau precauţii suplimentare, algoritmul nu va da soluţia în timp util.
Depăşirea acestei situaţii este asigurată de următoarea teoremă:

Teoremă Dacă la fiecare iteraţie se alege drumul (lanţul) de lungime minimă atunci
1
algoritmul va avea cel mult ⋅m⋅n iteraţii, unde n = numărul de noduri iar m = numărul de muchii.
2

Observaţia 3. Există probleme în care se doreşte găsirea fluxului minim într-o reţea, valorile
fluxului pe arce fiind limitate inferior de capacităţile acestora. În acest caz se aplică de asemenea
algoritmul lui Ford-Fulkerson astfel:

Pasul 1. Se calculează M = maximul capacităţilor arcelor


Pasul 2. Se construieşte reţeaua R', care este fosta reţea, în care au fost modificate doar
capacităţile arcelor, acestea devenind c ′u = M – cu
Pasul 3. Se găseşte cu algoritmul Ford-Fulkerson fluxul ϕ, de valoare maximă, în această
reţea
Pasul 4. Fluxul de valoare minimă în reţeaua iniţială va avea valorile ϕ' = M – ϕ

Observaţia 4. Există şi alte tipuri de probleme asemănătoare celor de mai sus. Astfel, se
poate pune problema:
− găsirii capacităţilor minime ale arcelor cu care se poate asigura transportarea întregii
cantităţi de la surse la destinaţii
− fluxului minim(maxim) într-o reţea în care capacităţile rutelor sunt limitate atât superior
cât şi inferior;
− În cazul în care rutelor li se asociază şi costuri unitare de parcurgere, putem căuta fluxul
maxim de cost minim;

148
Bazele cercetării operaţionale 81

TEORIA ORDONANŢĂRII
O problemă de ordonanţare constă în stabilirea unei ordini de efectuare a operaţiilor
(activităţilor) unui proiect, astfel ca interdependenţele dintre ele să fie respectate în cadrul
resurselor disponibile şi durata totală de execuţie a acestuia să fie minimă.
Pentru a putea concretiza definiţia de mai sus, trebuie clarificate noţiunile de proiect,
operaţii (activităţi) ale acestuia, interdependenţe între operaţii şi resursă a proiectului.

1. Prin proiect vom înţelege o acţiune de mare amploare sau un proces complex destinat
atingerii unui scop bine precizat. La un proiect deosebim următoarele caracteristici:

− un obiectiv, care poate fi un produs, o cantitate de informaţii sau un rezultat de natură


organizatorică;
− un ansamblu de activităţi (subacţiuni, subprocese, operaţii), corelate logic şi tehnologic,
a căror realizare permite atingerea scopului propus;
− un proces tehnologic prin care se precizează intercondiţionărilor între activităţi,
interesând în special ordinea de execuţie a acestora.

Proiectele pot fi clasificate după natura lor în:

− proiecte industriale şi proiecte de investiţii, prin care se obţine un produs material (de
exemplu construcţia unei clădiri, pod, tunel, etc);
− proiecte organizatorice al căror scop este de a obţine un rezultat de natură informaţională
sau organizatorică (de exemplu un proiect de cercetare ştiinţifică).

Pentru a permite o analiză amănunţită a desfăşurării lui, o alegere a variantelor optime de


execuţie şi un control continuu al evoluţiei sale, trebuie să descompunem proiectul în părţi
componente la un nivel care să permită tratarea unitară a fiecărei părţi şi stabilirea conexiunilor
între acestea. Aceste componente se numesc operaţii sau activităţi.
O activitate este o parte distinctă dintr-un proiect, un subproces precis determinat, care
consumă timp şi resurse. Vom presupune în continuare că activităţile au următoarele proprietăţi:

− fiecare activitate este indivizibilă (nu se mai descompune în subactivităţi);


− fiecare activitate are o durată cunoscută;
− o activitate, odată începută, nu mai poate fi întreruptă.

Dintre intercondiţionările (interdependenţele) dintre activităţi, ne interesează, în special,


cele temporale, numite relaţii de precedenţă, care pot fi de trei tipuri:

1. de tip "terminare – început". Acest tip este cel mai frecvent întâlnit şi spunem că o
activitate A precede activitatea B printr-o interdependenţă de tip "terminare – început"
dacă activitatea B nu poate începe decât după un interval de timp tAB de la terminarea
activităţii A. Acest interval poate fi egal şi cu zero, caz în care spunem că activitatea A
precede direct activitatea B;
2. de tip "început – început". Acest tip este frecvent întâlnit şi spunem că o activitate A
precede activitatea B printr-o interdependenţă de tip "început – început" dacă activitatea
B nu poate începe decât după un interval de timp tAB de la începerea activităţii A. Acest
interval poate fi chiar mai mare decât durata activităţii A, caz în care avem de fapt o
dependenţă de tipul "terminare – început", putând chiar privi primul tip ca un caz
particular al celui de-al doilea;

155
Teoria ordonanţării 82

3. de tip "terminare – terminare". Spunem că o activitate A precede activitatea B printr-o


interdependenţă de tip "terminare – terminare" dacă activitatea B nu se poate termina
decât după un interval de timp tAB de la terminarea activităţii A sau că activitatea A
trebuie terminată cu cel puţin tAB unităţi de timp înaintea terminării activităţii B.

Prin durată totală de execuţie a unui proiect înţelegem intervalul de timp în care se
efectuează toate activităţile acestuia, respectând toate interdependenţele dintre activităţi.
A programa un proiect înseamnă a stabili termenele de începere pentru fiecare activitate în
parte, ţinând seama de restricţiile impuse de procesul tehnologic, duratele activităţilor şi resursele
disponibile. Pentru un proiect dat, există un număr enorm de programări admisibile. Un interes
deosebit prezintă programul optim, adică acel program care, pe de o parte, satisface restricţiile
impuse iar, pe de altă parte, optimizează un anumit criteriu de eficienţă economică.
Criteriul de optimizare nu este acelaşi pentru toate proiectele, el este stabilit pentru fiecare
caz în parte şi defineşte obiectivele majore ale conducerii proiectului. În funcţie de aceste obiective,
criteriul poate fi durata totală minimă, costul total minim, folosirea cât mai uniformă a resurselor
sau o sinteză a acestora. Deci, programul optim este acea desfăşurare a proiectului, precizată prin
termenele de începere ale activităţilor, care conduce la o eficienţă maximă.
Deoarece, aşa cum se vede şi din cele spuse mai sus, situaţiile din practică ce necesită
rezolvarea unei probleme de ordonanţare sunt foarte variate, s-au propus numeroase modele pentru
rezolvarea lor. În continuare vor fi prezentate câteva dintre modelele cele mai frecvent utilizate în
practică.

1. Modele de analiză a drumului critic (ADC)


Principiul analizei drumului critic constă în divizarea unui proiect (acţiuni complexe) în
părţi componente, la un nivel care să permită corelarea logică şi tehnologică a acestora, adică să
facă posibilă stabilirea interacţiunilor între părţile componente. Aceste părţi componente sunt
activităţile acţiunii complexe.
La definirea listei de activităţi specialistul sau specialiştii care participă la această operaţie
folosesc experienţa lor pentru a răspunde pentru fiecare activitate la întrebările: ”ce alte activităţi
succed sau preced în mod necesar această activitate ?”; ”care este durata activităţii ?”. Ia naştere în
acest fel un tabel care conţine activităţile proiectului, intercondiţionările între activităţi şi duratele
acestora.
Un astfel de tabel trebuie să conţină cel puţin următoarele elemente:

− activităţi: în această coloană se enumeră activităţile proiectului, fiind puse în evidenţă


printr-o denumire sau printr-un simbol (codul activităţii);
− condiţionări: se precizează, pentru fiecare activitate, activităţile imediat precedente, prin
simbolurile lor; activităţile de start nu au activităţi precedente, în căsuţă fiind trecută o
liniuţă;
− durata: pentru fiecare activitate se precizează durata de execuţie, într-o anumită unitate
de măsură. Durata unei activităţi este o constantă.

Modelele de analiză a drumului critic se bazează pe reprezentarea proiectului printr-un graf,


elementele tabelului asociat acestuia fiind suficiente pentru a construi graful corespunzător.
În tabelul 1 este prezentat un proiect, activităţile fiind notate prin litere mari A, B, C, ….
Activităţile A şi B sunt activităţile de început ale proiectului. Activitatea A este direct precedentă
activităţii C. De asemenea, activitatea C este direct precedentă activităţilor E şi F.

156
Bazele cercetării operaţionale 83

Tabelul 1
Activităţile
Nr. Activităţile
direct precedente Durate
crt. proiectului
(condiţionări)
1 A - 3
2 B - 2
3 C A 2
4 D B 6
5 E B 4
6 F C,D,E 4
7 G E 1

Există mai multe moduri de a reprezenta un proiect printr-un graf, cele mai cunoscute fiind
prezentate mai jos:

A. Metoda CPM (Critical Path Method)


Metoda CPM este un procedeu de analiză a drumului critic în care singurul parametru
analizat este timpul şi în reprezentarea graficului reţea se ţine seama de următoarele convenţii:
− fiecărei activităţi i se asociază un segment orientat numit arc, definit prin capetele sale,
astfel fiecare activitate identificându-se printr-un arc;
− fiecărui arc i se asociază o valoare egală cu durata activităţii pe care o reprezintă;
− condiţionarea a două activităţi se reprezintă prin succesiunea a două arce adiacente.
Nodurile grafului vor reprezenta momentele caracteristice ale proiectului, reprezentând
stadii de realizare a activităţilor (adică terminarea uneia sau mai multor activităţi şi/sau începerea
uneia sau mai multor activităţi).
Procedeul CPM se bazează pe existenţa unei corespondenţe bipartide între elementele unui
proiect (activităţi, evenimente) şi elementele unui graf (arce şi noduri). Se obţine o relaţie model-
obiect, care pune în evidenţă particularităţile de o mare însemnătate practică, în special, proprietăţile
de succesiune temporală.
Pentru reprezentarea corectă a proiectului (respectarea interdependenţelor, claritatea
desenului etc), cât şi pentru o standardizare a reprezentării (pentru a putea fi înţeles şi de altcineva
decât cel care l-a desenat) în desenarea grafului se respectă următoarele reguli:

1. fiecare activitate se reprezintă printr-un arc a cărui orientare indică, pentru activitate,
desfăşurarea ei în timp;
2. un arc este limitat prin două noduri (reprezentate prin cerculeţe) care simbolizează
momentele de început şi de sfârşit ale executării activităţii corespunzătoare;
3. lungimea fiecărui arc, în general, nu este proporţională cu lungimea activităţii;
4. activităţile vor fi reprezentate prin arce de forma:

sau sau sau

sau sau sau

esenţială fiind porţiunea orizontală, pe care se vor trece informaţiile despre activitate,
porţiunile oblice fiind la 45°.

157
Teoria ordonanţării 84

Lungimea şi înclinarea arcului au în vedere numai considerente grafice, pentru urmărirea


uşoară a întregului graf.
5. deoarece respectarea tuturor regulilor nu se poate face doar cu arce care corespund doar
activităţilor proiectului, vor exista şi arce care nu corespund nici unei activităţi, care vor
fi reprezentate punctat şi care, pentru unitatea prezentării, vor fi numite activităţi fictive,
ele neconsumând resurse şi având durata 0.
6. pentru reprezentarea unor dependenţe de tipul "terminare – început" în care tAB > 0, vom
introduce nişte arce reprezentate prin linii duble, care corespund intervalului tAB, având
semnificaţia unor aşteptări (în acest interval se "consumă" doar timp, nu şi resurse) şi
care vor fi numite activităţi de aşteptare.
Dacă se presupune că o activitate A este precedentă activităţii B, în funcţie de tipul de
interdependenţă, în graficul reţea arcele corespunzătoare activităţilor A şi B vor avea următoarea
reprezentare:

A tAB B A B
sau (pentru tAB = 0)

terminare - început

A A1 A2
tAB sau tAB
B B

început - început

B A
sau
A tAB B1 tAB
B2
terminare - terminare

Figura 1

7. în graf nu sunt admise circuite (existenţa unuia ar însemna că orice activitate a acestuia
ar fi precedentă ei însuşi). Deoarece, pentru un proiect foarte mare graful va avea foarte
multe arce, se poate întâmpla să creăm un circuit fără să ne dăm seama. Pentru a evita
acest lucru, vom introduce o regulă mai uşor de respectat, care o implică pe cea dinainte:
8. nodurile vor fi numerotate, numerotarea făcându-se în aşa fel încât, pentru fiecare
activitate, numărul nodului de început să fie mai mic decât numărul nodului de final al
activităţii.
9. graful are un singur nod iniţial (semnificând evenimentul "începerea proiectului") şi un
singur nod final (semnificând evenimentul "sfârşitul proiectului");
10. orice activitate trebuie să aibă cel puţin o activitate precedentă şi cel puţin una care îi
succede, exceptând bineînţeles activităţile care încep din nodul iniţial al proiectului şi pe
cele care se termină în nodul final al proiectului;
11. deşi există activităţi care se execută în paralel, care pot începe în acelaşi moment şi se
pot termina în acelaşi moment, este interzis ca cele două arce corespunzătoare să aibă
ambele extremităţi comune, altfel desenul care rezultă nu mai e graf. În desenul de mai
jos se arată care este reprezentarea corectă, F fiind o activitate fictivă:

158
Bazele cercetării operaţionale 85

A A F A
B sau
B B F

incorect corect

Figura 2

12. nu trebuie introduse dependenţe nereale (neprevăzute în tabelul de condiţionări). Astfel,


dacă în tabelul de condiţionări vom avea situaţia:
Tabelul 2
Activitate direct precedentă
Activitate
(condiţionări)
A -
B -
C A,B
D A

atunci reprezentarea:
A C

B D

Figura 3
este incorectă, deoarece introduce condiţionarea, inexistentă în tabel, a activităţii D de activitatea B.
Reprezentarea corectă este:
A C

B D

Figura 4

13. să se folosească, pe cât posibil, numărul minim de activităţi fictive, pentru a nu complica
excesiv desenul. De exemplu acelaşi efect ca în figura 4 putea fi obţinut şi prin
reprezentarea:
A

B D

Figura 5

159
Teoria ordonanţării 86

dar am fi folosit o activitate fictivă în plus, inutilă.

Dacă două sau mai multe activităţi au aceeaşi activitate direct precedentă, de exemplu A
precede B şi A precede C, reprezentarea în graful-reţea va avea forma din figura 5 (a). Arcele B şi C
simbolizează două activităţi care nu pot începe decât după ce s-a terminat activitatea A. Activităţile
B şi C pot fi executate simultan. De asemenea execuţia unei activităţi poate depinde de terminarea
mai multor activităţi direct precedente, de exemplu A precede C şi B precede C ca în figura 5 (b). În
această situaţie, activitatea C nu poate începe, logic, decât după ce s-au terminat activităţile A şi B.
B A

A C

C B

(a) (b)

Figura 6

Proiectul dat prin tabelul 1, poate fi modelat, în reprezentarea activităţilor pe arce, prin
graful-reţea din figura 6, numerotat secvenţial.
A C
2
F
5
1 D
B 6
3
E G
4

Figura 7

Numerotarea nodurilor permite să identificăm fiecare activitate prin perechea de noduri (de
început şi sfârşit). De exemplu, activitatea D se identifică prin perechea (3,5), activitatea E prin
(3,4) etc.

Analiza proiectului

Analiza proiectului constă în determinarea duratei minime a proiectului, determinarea


intervalelor de timp în care poate avea loc fiecare din evenimentele reprezentate prin noduri şi
determinarea intervalelor de timp în care pot fi plasate activităţile, astfel încât să se respecte toate
condiţionările şi să obţinem timpul minim de execuţie al proiectului.
Este evident că durata minimă de execuţie a proiectului este cel mai mic interval de timp în
care pot fi efectuate toate succesiunile de activităţi din proiect. O succesiune de activităţi
corespunde unui drum în graf şi deci, durata minimă de execuţie a proiectului este cel mai mic
minorant al lungimilor tuturor drumurilor din graf. Cum există un număr finit de drumuri, mulţimea
lungimilor acestora este finită şi cel mai mic minorant al ei este maximul acesteia, adică durata
drumului de lungime maximă. Deoarece graful nu are circuite şi are un singur punct iniţial şi unul

160
Bazele cercetării operaţionale 87

singur final, este evident că cele mai lungi drumuri vor fi cele dintre nodul iniţial şi cel final. Avem
deci de găsit drumul de lungime maximă dintr-un graf fără circuite, caz în care se poate aplica
algoritmul lui Ford simplificat.
Conform acestui algoritm, se calculează pentru fiecare nod al grafului:

A. Termenul cel mai devreme de realizare a evenimentului j. Acest termen reprezintă


momentul cel mai devreme posibil de terminare a tuturor activităţilor care converg în nodul j şi este
egal cu valoarea maximă a drumurilor dintre evenimentul iniţial 1 şi evenimentul j, pe care îl vom
nota cu t mj = dmax(1,j). Termenul cel mai devreme (numit şi termenul minimal) a evenimentului j,
conform algoritmului lui Ford în grafuri G = (X,Γ) fără circuite, se calculează astfel:

(
t mj = max t im + d ij
(i, j)∈Γ
) , 1< j≤ n

Vom presupune, fără a restrânge generalitatea, că t1 = 0, pentru evenimentul iniţial 1 şi, în


acest caz, termenul de realizare cel mai devreme al unui eveniment oarecare j va fi dat de formula:

0 j=1
t mj =  max t m + d
(i, j)∈Γ i
(ij ) 1< j≤ n

Această formulă permite calculul termenelor pentru evenimente, prin parcurgerea grafului-
reţea în sens-înainte (parcursul înainte) şi durata minimă de execuţie a proiectului va fi termenul cel
mai devreme de realizare al nodului final al grafului.
Acest termen devine termenul impus de realizare al proiectului şi el nu mai poate fi depăşit,
depăşirea lui însemnând doar o proastă organizare a lucrului.

B. Termenul cel mai târziu de realizare a evenimentului i. Acest termen (numit şi termen
maximal) reprezintă momentul cel mai târziu posibil de începere a activităţilor care pleacă din
nodul i astfel încât toate succesiunile de activităţi dintre acest nod şi nodul final să mai poată fi
efectuate până la termenul final de realizare al proiectului şi este egal cu diferenţa între durata
minimă de realizare a proiectului şi durata drumului de lungime maximă dintre evenimentul i şi n.
Acest termen se notează cu t iM = dmax(1,n) – dmax(i,n).
Pentru calcularea acestor momente trebuie calculate duratele drumurilor de la nodul final
spre nodul iniţial şi apoi scăzute din durata minimă a proiectului, calcul care va fi făcut aplicând, de
asemenea, algoritmul lui Ford simplificat.
Conform celor de mai sus, termenul cel mai târziu de realizare a unui eveniment, cu
respectarea duratei minime a proiectului (notată T= dmax(1,n) = t mn ), este dată de formula:

T j=1
t iM =  min t M − d
(i, j)∈Γ j
(ij ) 1≤ i < n

Intervalul [ t mj , t M
j ] se numeşte intervalul de fluctuaţie al evenimentului j. Evenimentul j
se poate plasa în orice moment al acestui interval de fluctuaţie, fără a periclita durata totală a
întregului proiect. Acest interval îl putem defini ca pe o rezervă de timp R(j) a evenimentului j:

R(j) = t M m
j – tj

161
Teoria ordonanţării 88

Dacă R(j) = 0 evenimentul j trebuie să aibă loc la termenul fixat t M m


j = t j , pentru că orice
întârziere va duce la prelungirea duratei întregului proiect.

Exemplu: Vom arăta în continuare modul cum se calculează aceste termene, pentru proiectul
dat de tabelul 1. Pentru o bună organizare a datelor vom reprezenta fiecare eveniment al proiectului
printr-un cerc divizat în trei părţi (vezi figura 7), în care vom trece în partea de sus numărul
evenimentului i, în partea inferioară-stânga termenul cel mai devreme de realizare t mj şi în partea
inferioară-dreapta termenul cel mai târziu de realizare t M
j .

t mj tM
j

Figura 8

În figura 8 a fost desenat graful asociat proiectului.


A 2 C 5 F
3 3 6 2 8 8 4

1 D 6
0 0 6 12 12

B 3 E 4 G
2 2 2 4 6 8 1

Figura 9

Primul eveniment se consideră a avea loc la momentul t1 = 0. Calculul termenelor minimale


porneşte de la primul eveniment, având în vedere că se poate calcula termenul cel mai devreme al
unui eveniment numai dacă acesta a fost calculat pentru toate evenimentele precedente:

t 1m = 0
t 2m = max ( t 1m + d 12) = max (0 + 3) = 3
t 3m = max ( t 1m + d13) = max (0,2) = 2
t 4m = max ( t 3m + d34) = max (2 + 4) = 6
t 5m = max ( t 2m + d25, t 3m + d35, t 4m + d45) = max (3 + 2, 2 + 6, 6 + 0) = 8
t 6m = max ( t 4m + d46, t 5m + d56) = max (6 + 1, 8 + 4) = 12

162
Bazele cercetării operaţionale 89

Calculul termenelor maximale se face considerând durata minimă a proiectului T = 12,


începând de la ultimul nod, având în vedere că se poate calcula termenul cel mai târziu al unui
eveniment numai dacă acesta a fost calculat pentru toate evenimentele succesoare. Pentru aceasta
se ia t 6M = 12 şi se calculează:

t 5M = min ( t 6M – d56) = min (12 – 4) = 8


t 4M = min ( t 6M – d46, t 5M - d45) = min (12 – 1, 8 – 0) = 8
t 3M = min ( t 5M – d35, t 4M – d34) = min (8 – 6, 8 – 4) = 2
t 2M = min ( t 5M – d25) = min (8 – 2) = 6
t 1M = min ( t 2M – d12, t 3M – d13) = min (6 – 3, 2 – 2) = 0

Următoarea etapă în analiza proiectului constă în aflarea termenelor între care trebuie să se
efectueze activităţile, calculându-se în acest sens, pentru fiecare activitate (i,j), momentul minim de
î t
începere: t m (i,j), momentul minim de terminare: t m (i,j) , momentul maxim de începere: t îM (i,j) şi
momentul maxim de terminare: t tM (i,j).

1. Momentul (termenul minim) de începere cel mai devreme a activităţii ( i.j). Deoarece
o activitate nu poate începe decât după ce se termină toate cele precedente, momentul
minim de începere este evident termenul cel mai devreme de realizare al evenimentului i:

î
tm (i,j) = t im

2. Momentul (termenul minim) de terminare cel mai devreme a activităţii (i.j) este egal
cu suma dintre termenul cel mai devreme de începere şi durata activităţii:

t î
tm (i,j) = t m (i,j) + dij

3. Momentul (termenul maxim) de terminare cel mai târziu a activităţii (i,j) este definit
de termenul cel mai târziu de realizare a evenimentului j:

t tM (i,j) = t M
j

4. Momentul (termenul maxim) de începere cel mai târziu a activităţii (i,j) este egal cu
diferenţa dintre termenul cel mai târziu de terminare şi durata activităţii:

t îM (i,j) = t tM (i,j) - dij

Aceste momente spun doar în ce interval poate fi situată o activitate, dar nu spun care este
diferenţa între o plasare posibilă sau alta. În acest scop vom calcula, pentru fiecare activitate (i,j),
următoarele repere de timp:

a) Rezerva totală de timp (Rt) a unei activităţi (i,j), ca fiind diferenţa dintre termenul cel
mai târziu de terminare şi termenul cel mai devreme de terminare:

Rt(i,j) = t tM – t m
t
= t tM – t m
î
– dij = t M m
j – t i – dij

163
Teoria ordonanţării 90

Rezerva totală de timp a unei activităţi (i,j) reprezintă timpul maxim cu care se poate
amâna sau se poate mări durata activităţii, fără depăşirea termenului final de execuţie al
proiectului.
b) Rezerva liberă de timp (Rl) a unei activităţi (i,j):

Rl(i,j) = t mj – t im – dij

Diferenţa între rezerva totală şi rezerva liberă:

Rt(i,j) - Rl(i,j) = t M m
j – tj

pentru o activitate (i,j), este egală cu fluctuaţia evenimentului final j al activităţii. De aici
rezultă că rezerva liberă a unei activităţi (i,j) reprezintă intervalul de timp ca parte a
rezervei totale de timp, cu care o activitate se poate amâna (sau se poate mări durata
activităţii) fără a perturba termenul cel mai devreme de realizare al termenului final j
(adică fără a consuma din rezervele de timp ale activităţilor care o succed).
c) Rezerva independentă de timp (Rs) a unei activităţi (i,j):

Ri(i,j) = t mj – t iM – dij

Rezerva independentă de timp a unei activităţi (i,j) există dacă Ri(i,j) > 0 şi dacă există,
ea reprezintă timpul maxim cu care se poate amâna (sau se poate mări durata activităţii)
astfel încât să nu perturbe fluctuaţia evenimentelor de la extremităţilor activităţii. Dacă
Ri(i,j) ≤ 0 atunci activitatea (i,j) nu are rezervă independentă de timp. Rezerva inde-
pendentă de timp arată intervalul în care poate fi plasată o activitate fără a consuma nici
din rezervele de timp ale activităţilor ce o preced, nici din cele ale celor ce o succed.
Diferenţa între rezerva liberă şi rezerva independentă:

Rl(i,j) – Ri(i,j) = t iM – t im

este egală cu fluctuaţia evenimentului i (cu care începe activitatea).

Intervalele de fluctuaţie pentru evenimente şi rezervele libere de timp pentru activităţi


caracterizează elasticitatea unui program de ordonanţare. Cu cât acestea sunt mai mici cu atât
programul este mai rigid.
Drumul (drumurile) a cărui lungime este egală cu durata minimă de execuţie a proiectului se
numeşte drum critic. Este clar că orice amânare a unei activităţi a acestuia duce la lungirea duratei
de execuţie a proiectului, deci nici una din aceste activităţi nu dispune de rezervă de timp.
Activităţile de pe drumul critic şi prin extensie, orice activitate care nu dispune de rezervă de timp,
se numeşte activitate critică.
O activitate critică (i,j) este caracterizată prin:

t im = t iM , t mj = t M m m
j , t j – t i = dij

De aici rezultă că, pentru o activitate critică, avem:

Rt(i,j) = Rl(i,j) = Ri(i,j) = 0

Termenele calculate pentru evenimente sunt utile în primul rând pentru calculul termenelor
164
Bazele cercetării operaţionale 91

pentru activităţi, dar ele servesc şi pentru evaluarea stadiului de realizare al proiectului, verificând
dacă termenele de realizare pentru fiecare eveniment se află în intervalul de fluctuaţie.
În practică este nevoie de mai multe ori să ne interesăm de activităţi, în ceea ce priveşte
stadiul realizării acestora, decât de evenimente. În primul rând interesează activităţile critice (cele
situate de-a lungul drumului critic), ele trebuind să fie realizate la datele calculate. Aceste activităţi
nu dispun de rezervă de timp, deci trebuie să înceapă şi să se termine exact la termenele calculate,
pentru a nu depăşi termenul de finalizare al proiectului. Celelalte activităţi pot fi amânate cu
rezervele lor de timp, dar consumarea acestora face ca proiectul să devină rigid.
Pentru activităţile proiectului analizat mai sus, termenele activităţilor şi rezervele de timp
sunt date în tabelul de mai jos:
Tabelul 3
î t î t
Activităţi Cond. Durate t m tm tM tM Rt Rl Ri
A = (1,2) - 3 0 3 3 6 3 0 0
B = (1,3) - 2 0 2 0 2 0 0 0
C = (2,4) A 2 3 5 6 8 3 3 0
D = (3,4) B 6 2 8 2 8 0 0 0
E = (3,5) B 4 2 6 4 8 2 0 0
F = (4,6) C,D,E 4 8 12 8 12 0 0 0
G = (5,6) E 1 6 7 11 12 5 5 0

Conform tabelului 3 proiectul este foarte rigid, nici o activitate nedispunând de rezervă
independentă de timp.
Examinarea reperelor de timp permite cunoaşterea posibilităţilor pe care le are un
management de program de a interveni la timp pentru executarea la termenele calculate a tuturor
activităţilor unui proiect dat. Durata proiectului calculată prin această metodă nu poate fi redusă
prin micşorarea rezervelor.
Printre avantajele metodei CPM (şi în general ale analizei drumului critic) evidenţiem:
− determinarea cu anticipaţie a duratei de execuţie a proiectelor complexe;
− pe timpul desfăşurării proiectului permite un control permanent al execuţiei acestuia;
− explicitarea legăturilor logice şi tehnologice dintre activităţi;
− evidenţierea activităţilor critice;
− evidenţierea activităţilor necritice, care dispun de rezerve de timp;
− permite efectuarea de actualizări periodice fără a reface graful;
− oferă posibilitatea de a efectua calcule de optimizare a duratei unui proiect, după criteriul
costului;
− reprezintă o metodă operativă şi raţională care permite programarea în timp a activităţilor
ţinând seama de resurse.

Dezavantajele acestei metode sunt în principal:

− greutatea desenării grafului, fiind foarte greu de reprezentat exact toate condiţionările din
proiect, în condiţiile în care acestea sunt foarte complicate iar desenul trebuie să fie
destul de simplu şi clar încât să fie inteligibil şi deci util;
− chiar dacă se respectă toate regulile de construire a grafului, rămân încă destule variante
de desenare astfel încât două reprezentări ale aceluiaşi proiect făcute de doi indivizi pot
să nu semene aproape deloc.
− din cele de mai sus se vede că reprezentarea este greoaie chiar dacă toate condiţionările
ar fi de tipul "terminare – început" cu precedenţă directă, încercarea de a forma graful în
condiţiile existenţei şi a celorlalte tipuri de interdependenţe ducând foarte repede la un
desen extrem de încărcat şi greu de folosit.

165
Teoria ordonanţării 92

B. Metoda MPM (Metro Potenţial Method)

Metoda potenţialelor sau MPM este un procedeu de analiză a drumului critic care încearcă
să depăşească neajunsurile metodei CPM, în care, ca şi în metoda CPM, se analizează parametrul
timp, diferenţa constând în felul în care se construieşte graful reţea:
− fiecărei activităţi A i se asociază un nod A;
− fiecărui nod i se asociază o valoare dată de durata activităţii pe care o reprezintă;
− condiţionarea (succesiunea) a două activităţi se reprezintă printr-un arc, orientat de la o
activitate la alta;
− fiecărui arc dintre două activităţi A şi B i se asociază un număr reprezentând valoarea
tAB.

Reprezentarea activitate – nod permite ca între activităţile unui proiect să avem mai multe
tipuri de legături de precedenţă. Cele trei tipuri de precedenţă se vor reprezenta astfel:

1) Legătura "terminare - început" se reprezintă grafic în fig. 10.

A tAB
B

Fig. 10

Activitatea B începe după ce s-a terminat activitatea A. Putem considera că arcul (A,B)
are el însuşi o durată tAB ≥ 0, ceea ce înseamnă că activitatea B poate începe după ce s-au
scurs tAB unităţi de timp de la terminarea activităţii A. În general, nu toate legăturile
"terminare - început" au durată, cele mai multe având durata tAB = 0.

2) Legătura "început-început" poate fi utilizată pentru a arăta simultaneitatea executării a


două activităţi prin puncte de început. Aceasta este reprezentată în fig. 11.

tAB B

Fig. 11

Activitatea B poate începe cu cel puţin tAB unităţi de timp după începerea activităţii A.
Dacă tAB = 0 activităţile pot începe în acelaşi timp.

3) Legătura "terminare – terminare" poate fi, de asemenea, utilizată pentru a indica


simultaneitatea executării a două activităţi prin punctul de terminare (fig. 12). Această
tAB
A

Fig. 12
166
Bazele cercetării operaţionale 93

legătură arată că activitatea A este terminată cu cel puţin tAB unităţi de timp înaintea
terminării activităţii B.
Vom numi activitate de bază orice activitate folosită ca bază de referinţă, faţă de care este
format timpul de aşteptare. În figura 11 activitatea de bază este A iar în figura 12 activitatea de bază
este B. Durata de aşteptare tAB se raportează la activitatea de bază.
Proiectului dat prin tabelul 2 îi corespunde în reprezentarea activitate nod graful-reţea din
figura 13.

Tabelul 4 E
Activităţi Dependenţe
A - A C H
B -
C A F t
D B s
E C
F C B D G
G F,D
H E,F
Fig. 13

Graficul reţea în reprezentarea activitate – nod nu conţine activităţi fictive, eventual cu


excepţia unei activităţi de începere şi/sau a unei activităţi de terminare a proiectului, necesare în
cazul în care există mai multe activităţi care nu sunt condiţionate de nici o activitate a proiectului
(acestea devenind toate noduri iniţiale ale proiectului, deşi trebuie să fie un singur nod iniţial) sau,
analog, în cazul în care sunt mai multe activităţi care nu au nici o activitate succesoare.
Între un graf reţea în reprezentarea activitate – nod şi un graf reţea în reprezentarea activitate
– arc se pot defini următoarele corespondenţe (vezi figura 14):

MPM CPM

tAB = 0 A B
A B ⇔

A tAB > 0 A tAB B


B ⇔

A A1 A2
⇔ tAB
tAB B B

tAB A
A

B1 tAB
B
B2

Figura 14

167
Teoria ordonanţării 94

Calculul termenelor şi rezervelor

Calcularea termenelor în reprezentarea activitate – nod este asemănătoare cu cea din


reprezentarea activitate – arc. În această reprezentare un nod al grafului se reprezintă printr-un
dreptunghi compartimentat în şase părţi, care vor fi completate astfel:

− centru – sus: numărul sau simbolul activităţii: i, A, …


− centru – jos: durata activităţii: d(i), d(A), …
î
− stânga – sus: termenul cel mai devreme al începerii activităţii: t m (i ) , t mî (A ) , …
t
− dreapta – sus: termenul cel mai devreme al terminării activităţii: t m (i ) , t mt (A ) , …
− stânga – jos: termenul cel mai târziu al începerii activităţii: t îM (i ) , t îM (A ) , …
− dreapta – jos: termenul cel mai târziu al terminării activităţii: t tM (i ) , t tM (A ) , …

Aceste elemente pot fi urmărite în figura 15.

î t î t
tm i tm tm A tm

t îM d(i) t tM t îM d(A) t tM

Figura 15

Ne vom referi în continuare la cazul a două activităţi A şi B, considerând cele trei tipuri de
relaţii între activităţi. Pentru uşurinţa calculului vom urmări figurile 16 şi 17.
î t
tm A tm tAB
t îM d(A) t tM

î t tAB î t
tm A tm tm B tm
t îM d(A) t tM tAB t îM d(B) t tM

î t
tm A tm
t îM d(A) t tM

Figura 16

1. Termenul cel mai devreme al începerii activităţii B, conform figurii 16 va fi dat de


formula:
(
 0 daca B este o activitate de început
 t mt
(A ) + t AB terminare - început

t m (B ) = 
î
 î
max t (A ) + t AB început - început
 A  m
 t m (A ) + t AB − d (B) terminare - terminare
  t

168
Bazele cercetării operaţionale 95

unde activitatea A este precedentă activităţii B şi tAB este o durată de aşteptare ≥ 0.


2. Termenul cel mai devreme al terminării activităţii B este egal cu suma dintre
termenul cel mai devreme al începerii activităţii B şi durata sa:

t
tm (B) = t mî (B) + d(B)
3. Termenul cel mai târziu de terminare a activităţii A, conform figurii 17 va fi dat de
formula:
( (
 T daca A este o activitate finala
  t îM (B) − t AB terminare - început

t M (A ) = 
t
 î
min t (B) − t AB + d (A ) început - început
 B  M
  t tM (B) − t AB terminare - terminare

unde activitatea A este direct precedentă activităţii B şi tAB este o durată de aşteptare ≥ 0.

4. Termenul cel mai târziu de începere al activităţii A este egal cu diferenţa dintre
termenul cel mai târziu de terminare al activităţii A şi durata sa:

t îM (A ) = t tM (A ) – d(A)

î t
tAB tm B tm
t îM d(B) t tM

î t î t
tm A tm tAB tm B tm
t îM d(A) t tM tAB t îM d(B) t tM

î t
tm B tm
t îM d(B) t tM

Figura 17

Pentru fiecare activitate vom defini următoarele rezerve de timp:

a) Rezerva totală de timp (Rt) a unei activităţi A:

Rt(A) = t tM (A ) – t m
t
(A ) = t tM (A ) – t îM (A ) – d(A)
b) Rezerva liberă de timp (Rl) a unei activităţi A:

î
Rl(A) = max t m
B
( )
(B) − t mî (A ) − d(A )

unde activitatea A este direct precedentă activităţii B.


Modul cum se calculează termenele şi rezervele de timp pentru activităţile unui proiect prin
169
Teoria ordonanţării 96

metoda MPM este pus în evidenţă de exemplul dat prin tabelul 1 şi reprezentat în figura 18.

0 A 3 3 C 5
3 3 6 6 2 8
8 F 12
8 4 12
0 s 0 2 D 8 12 t 12
0 0 0 2 6 8 12 0 12
0 B 2 6 G 7
0 2 2 E 11 1 12
2 6
4 4 8

Figura 18

Din acest graf reţea se formează tabelul 5 cu termenele şi rezervele de timp pentru
activităţile proiectului:
Tabelul 5
î t î t
Activităţi Cond. Durate t m tm tM tM Rt Rl
A - 3 0 3 3 6 3 0
B - 2 0 2 0 2 0 0
C A 2 3 5 6 8 3 3
D B 6 2 8 2 8 0 0
E B 4 2 6 4 8 2 0
F C,D,E 4 8 12 8 12 0 0
G E 1 6 7 11 12 5 5

2. Grafuri ADC integrate şi condensate

În practica managementului acţiunilor economice complexe prim metodele ADC, nivelul de


detaliere în activităţi a proiectelor depinde de scopul urmărit (coordonare de ansamblu sau
conducere de detaliu), de timpul avut la dispoziţie pentru elaborarea grafurilor, de specialiştii
disponibili etc.
Dacă graful sumar care se întocmeşte pentru orientarea generală a echipei de conducere a
acţiunii (să-l numim graf director) este totdeauna necesar, când se face trecerea la conducerea de
amănunt, sunt tot atât de necesare grafurilor detaliate.
În general grafurile detaliate se fac pe părţi din acţiunea complexă, numite obiective sau
obiecte. Astfel, dacă ne referim de exemplul la un proiect de construcţii, graful corespunzător
întregului proiect poate fi divizat în grafuri pe obiect, cum ar fi:

− graful proiectării;
− graful organizării şantierului;
− unul sau mai multe grafuri pentru lucrări de drumuri;
− mai multe grafuri pentru lucrări de reţele (apă, canal abur, electrice etc.);
− mai multe grafuri pentru lucrări de construcţii-montaj (câte unul pentru fiecare hală sau
clădire) etc.

170
Bazele cercetării operaţionale 97

Grafurile pe obiect au individualitatea lor şi se tratează ca entităţi de programare distincte; în


acelaşi timp însă, trebuie gândită coordonarea lor în cadrul acţiunii complexe din care fac parte. În
acest scop, după întocmirea separată a grafurilor pe obiect apare necesitatea asamblării lor într-un
tot, care constituie graful integrat.
În continuare vom arăta cum se obţine graful integrat al mai multor grafuri pe obiect.
Fie P1, P2,...,Pn mai multe grafuri ADC pe obiect şi presupunem că între activităţile
diferitelor grafe există condiţionări logice şi tehnologice. Presupunem de asemenea că fiecare din
grafuri are o numărătoare proprie a evenimentelor, cunoscută.

Pasul 1. se desenează cele n grafuri alăturat;


Pasul 2. se reprezintă prin activităţi fictive (în reprezentarea activitate-arc) sau săgeţi (în
reprezentarea activitate-nod) toate condiţionările logice şi tehnologice existente
între activităţi din proiecte diferite;
Pasul 3. se introduce un nod suplimentar fictiv I (activitate fictivă) care va fi legat la toate
nodurile (activităţile) iniţiale ale grafurilor P1, P2, ..., Pn prin activităţi fictive
(săgeţi), acesta fiind nodul (activitatea) iniţial al grafului integrat;
Pasul 4. se introduce un alt nod suplimentar fictiv F (activitate fictivă), de care se vor lega
toate nodurile (activităţile) finale ale grafelor specificate, prin activităţi fictive
(săgeţi), acesta fiind nodul (activitatea) final al grafului integrat.
Pasul 5. se găseşte drumul critic în graful integrat şi se recalculează termenele activităţilor
întregului graf.

De exemplu, dacă grafurilele din figurile 13 şi 18 ar fi grafurile obiect ale unui proiect
complex, atunci integrarea acestora ar avea reprezentarea din figura de mai jos:

A C H

F t
s

B D G

I F
0 A 3 3 C 5
3 3 6 6 2 8
8 F 12
8 4 12
0 s 0 2 D 8 12 t 12
0 0 0 2 6 8 12 0 12
0 B 2 6 G 7
0 2 2 2 E 11 1 12
6
4 4 8

Am reprezentat cu linii groase drumurile critice din cele două grafuri şi cu linii dublate
condiţionările dintre activităţi din grafuri diferite.
Dacă la nivelul conducerii operative interesează construirea şi urmărirea grafurilor pe
obiecte, deci determinarea drumului critic pentru fiecare graf în parte, la nivelul coordonării întregii
acţiuni va fi necesară cunoaşterea drumului critic pentru graful integrat. Acesta, de regulă, diferă de
fiecare din drumurile critice ale grafelor componente şi de aceea trebuie calculat separat.

171
Teoria ordonanţării 98

Graful integrat trebuie să respecte toate condiţiile de construcţie enumerate (de exemplu,
prin legăturile integrate să nu apară circuite).
În foarte multe cazuri din practică, numărul activităţilor care rezultă prin integrarea mai
multor grafuri pe obiect este considerabil, putând ajunge la zeci de mii, ceea ce depăşeşte de multe
ori posibilitatea de a le calcula şi urmări, chiar cu ajutorul calculatoarelor puternice.
Cu atât mai puţin ar fi posibilă cuprinderea sintetică a unui asemenea graf la nivelul
conducerii întregii acţiuni.
Pentru aceste motive a fost necesară găsirea unui mijloc de a reduce graful integrat,
păstrându-i în acelaşi timp principalele caracteristici. Această operaţie poartă numele de
condensare iar rezultatul aplicării acesteia asupra unui graf se numeşte graf condensat.
Condensarea se face după următoarele reguli:

a) graful condensat va conţine în mod obligatoriu nodurile de început şi de sfârşit ale


grafului şi ale fiecăruia din grafurile pe obiect componente;
b) el va cuprinde de asemenea toate activităţile şi nodurile de pe drumul critic al grafului
integrat;
c) în graful condensat se vor reprezenta toate activităţile considerate deosebit de
importante şi care trebuie explicitate;
d) din restul activităţilor nu se reprezintă decât activităţi sau grupe de activităţi strict
necesare pentru a nu lăsa activităţi sau noduri "în aer", adică nelegate de alte activităţi
precedente sau succesoare.

În cazul grafurilor mari şi foarte mari, condensarea poate face ca numărul activităţilor
păstrate să reprezinte 10-20% din totalul celor din graful integrat, ceea ce reprezintă, evident, o
simplificare considerabilă.
Legătura dintre diferitele grafuri care alcătuiesc graful integrat se poate evidenţia cu ajutorul
aşa-numitelor noduri de conexiune. Acestea au, în primul rând, rolul de a permite desenarea
grafurilor cu foarte multe activităţi, care nu încap pe a singură foaie de hârtie, prin împărţirea unui
astfel de graf în mai multe componente, ce se reprezintă pe câte o foaie, legătura dintre ele făcându-
se prin nodurile de conexiune. Un exemplu este dat în desenul de mai jos, în care nodurile de
conexiune au fost desenate prin puncte negre

Fiecare graf se poate calcula independent, ţinând seama, atât la calculul termenelor minime
cât şi la cel al termenelor maxime, de influenţa termenelor din celălalt graf, cu ajutorul arcelor care
intră în nodurile de conexiune.

172
Bazele cercetării operaţionale 99

3. Actualizarea grafurilor ADC


În practica realizării acţiunilor complexe, sunt numeroase cazurile când estimările iniţiale de
durată ale activităţilor nu pot fi respectate. Apare astfel necesitatea ca, periodic, să se examineze
modul cum se realizează termenele calculate, în scopul punerii în evidenţă a eventualelor întârzieri
şi a luării măsurilor de recuperare a acestora.
Această activitate poartă numele de actualizare a grafurilor iar noul graf se numeşte graf
actualizat.
Tehnica de actualizare a grafurilor poate fi descrisă succint astfel:

− la data actualizării se examinează care activităţi sunt terminate, care sunt în curs de
execuţie şi care sunt încă neîncepute. Cu această ocazie se reestimează duratele acţiunilor
în curs de execuţie precum şi cele neîncepute;
− se trece la recalcularea noilor termene considerând duratele activităţilor executate ca
având durate nule, iar pentru restul activităţilor duratele reestimate;
− se calculează noul drum critic; fie durata sa Dca. Dacă momentul în care se face
actualizarea este Ta, noua estimare a duratei proiectului va fi Da = Ta + Dca. Dacă această
nouă durată este egală sau mai mică decât cea iniţială (D), nu sunt necesare măsuri
speciale, deoarece lucrarea se va încadra în termenul stabilit. Dacă, dimpotrivă, Da > D
se vor lua măsuri de scurtare a lui Dca, prin suplimentări sau redistribuiri de resurse.

Tehnica de actualizare descrisă mai sus este, evident, valabilă când la momentul Ta al
actualizării, succesiunile şi condiţionările dintre activităţile neexecutate nu se modifică. Când apar
astfel de modificări, odată cu reevaluarea datelor, se stabilesc noile condiţionări, operând
modificările respective în graful refăcut. Întrucât, însă, astfel de situaţii sunt relativ rare, procedeul
de actualizare a grafelor rămâne foarte operativ, incomparabil mai simplu decât reactualizarea
grafelor tip Gantt, care necesită de fiecare dată refacerea integrală a graficului.

4. Optimizări cost-durată
Estimarea duratelor acţiunilor complexe (problema ADC/TIMP) prin metodele expuse mai
înainte, deşi reprezintă o problemă deosebit de importantă din punct de vedere economic, nu este
nici pe departe singurul aspect care poate fi urmărit cu ajutorul acestor metode.
O altă problemă în care pot fi utilizate instrumentele ADC sunt cele de analiză a costului
execuţiei acţiunilor complexe, în funcţie de durata de execuţie a acesteia.
Este evident că, în funcţie de pregătirea celor care efectuează lucrarea, de tehnologia
folosită, de oportunităţile momentului etc, durata de execuţie a unei acţiuni complexe poate varia,
existând totuşi o durată minimă posibilă Tmin şi una maximă Tmax acceptabilă.
Evident, durata lucrării are numeroase implicaţii asupra costului, drept pentru care prezintă
un deosebit interes determinarea acelei durate de execuţie, intermediare lui Tmin şi Tmax, căreia îi
corespunde costul minim. În cele ce urmează vom prezenta succint această problemă.

Costurile unei activităţi

Vom considera că o activitate oarecare A, din cadrul unei acţiuni complexe, se poate efectua
cu o durată dA care, din punct de vedere tehnologic, se situează între o limită inferioară dmin şi una
superioară dmax (dmin ≤ dA ≤ dmax).
De asemenea, este evident că mărimea costului activităţii (cA) depinde de durata de execuţie
a acesteia: cA = f(dA). Vom numi durată normală de execuţie a activităţii durata care corespunde
costului minim de execuţie. O durată de execuţie mai mare decât durata normală este
173
Teoria ordonanţării 100

dezavantajoasă atât din punct de vedere al timpului cât şi al costului, astfel încât durata normală va
fi şi durata maximă acceptabilă de execuţie dmax. O durată mai scurtă de execuţie va costa mai mult
din cauza eforturilor de urgentare (efectuarea de ore suplimentare care sunt plătite mai scump,
aplicarea unor tehnologii mai costisitoare, folosirea unor substanţe mai scumpe etc), dar activitatea
se va termina mai repede, cu beneficiile corespunzătoare. Dependenţa funcţională între cA şi dA
poate fi foarte complexă (pătratică, neliniară, concavă sau chiar discretă), însă ea poate fi
aproximată cu o funcţie liniară. S-a observat de asemenea că, în general, costul este descrescător în
funcţie de durată pe intervalul (dmin, dmax). Ţinând cont de toate acestea, rezultă că graficul lui cA =
f(dA) este o dreaptă, ca în figura de mai jos:
cA
cmax

cmin
dA
dmin dmax

Din ipoteza liniarităţii costului rezultă că, costul urgentării cu o zi al proiectului este acelaşi,
indiferent de a câta zi este vorba; acest cost este costul unitar al urgentării. El se calculează cu
c − c min
formula evidentă: cu = max şi cu ajutorul lui se poate calcula foarte uşor costul oricărei
d max − d min
durate intermediare lui dmin şi dmax, cu una din formulele:

c(dA) = cmin + cu⋅ (dA – dmin) sau c(dA) = cmax – cu⋅ (dmax – dA)

Costul total al acţiunilor complexe

În general, costul total al unei acţiuni complexe are o structură identică cu acela al unei
investiţii, fiind format din:

− costuri directe (CD) - legate nemijlocit de realizarea activităţilor (costul resurselor,


manoperei etc.);
− costuri indirecte (CI) - cheltuieli generale, salariile personalului tehnic-administrativ, alte
cheltuieli de regie;
− costul imobilizării fondurilor CIF - pe perioada când investiţia nu intră în funcţiune.

Dintre aceste costuri, costurile directe se calculează pentru fiecare activitate în parte, depind
de durata de execuţie a fiecărei activităţi şi vor face obiectul analizei cost-durată, iar ultimele două
reprezintă cheltuieli globale ale proiectului şi depind doar de durata totală a proiectului.
Toate aceste costuri sunt evident, funcţie de durata de execuţie a investiţiei. În figura de mai
jos se reprezintă forma generală a graficului funcţiilor CD, CI, CIF, în care t reprezintă durata totală
a investiţiei.

174
Bazele cercetării operaţionale 101

C CT

CT minim
CI

CD

CIF

t
tmin topt tmax
Curba CT reprezintă graficul funcţiei – sumă a celor trei funcţii luate în considerare iar pe
grafic se poate citi timpul optim de execuţie al proiectului (topt) corespunzător costului total minim
(min CT).
În practică, CI şi CIF se calculează la nivel contabil şi nu pun probleme deosebite de calcul,
iar CD se găseşte în urma unei analize cost-durată. CD(t) reprezintă costul direct minim cu care se
poate obţine o durată t ∈ [tmin, tmax] de execuţie a întregului proiect. Aflarea funcţiei CD(t)
presupune aflarea valorilor costului direct pentru orice durată de efectuare a proiectului, ceea ce în
cazul discret presupune un volum de calcule imens iar în cazul continuu este imposibil. De aceea se
calculează de fapt doar un număr suficient de valori, celelalte obţinându-se prin interpolarea
acestora. Cum se vede din desen, graficul lui CT are forma aproximativă a unei parabole, deci
numărul minim de valori pentru găsirea acesteia este 3, din care două sunt calculate pentru tmin şi
tmax, acestea fiind cele mai importante.
În cele ce urmează vom prezenta un algoritm pentru determinarea aproximativă a lui topt
folosind 3 puncte ca suport al interpolării.

Algoritm pentru determinarea aproximativă a duratei optime


de execuţie a unei acţiuni complexe

Etapa 1

Se construieşte graful asociat proiectului conform condiţionărilor dintre activităţi.

Etapa 2

Se găseşte durata minimă de execuţie şi drumul critic pentru cazul în care toate activităţile ar
fi efectuate la durata lor maximă (normală). Acesta este durata maximă acceptabilă de execuţie a
proiectului (tmax)şi îi corespunde costul direct minim (CD(tmax) = CDmin) de execuţie a proiectului,
care se calculează adunând costurile minime ale tuturor activităţilor.

Etapa 3

Se găseşte durata minimă de execuţie şi drumul critic pentru cazul în care toate activităţile ar
fi efectuate la durata lor minimă. Aceasta este durata minimă posibilă de realizare a proiectului
(tmin). Totuşi, costul aferent acestei durate nu este suma costurilor maxime ale activităţilor, deoarece

175
Teoria ordonanţării 102

este evident că nu are sens să fie urgentate la maxim activităţile necritice (cele care dispun de
rezervă de timp), aceasta neaducâd decât o scumpire inutilă a proiectului.

Etapa 3

Se relaxează activităţile necritice, în limita rezervei disponibile de timp a fiecăreia,


alegându-se acea variantă de relaxare care duce la cea mai mare scădere a costului total, apoi se
calculează costul proiectului pentru această variantă. Acesta este CD(tmin) = CDmax.

Etapa 4

În acest moment avem deja două puncte ale graficului. Pentru al găsi pe al treilea alegem o
durată intermediară t între tmin şi tmax, relaxăm activităţile drumului critic obţinut la etapa 2 cu un
total de t – tmin zile şi apoi şi celelalte activităţi în limita rezervelor de timp disponibile ale lor,
alegând acea variantă de relaxare care duce la cea mai mare scădere a costului total, în final
calculându-se costul proiectului pentru această variantă. Rezultă al treilea punct al graficului, de
coordonate (t, CD(t)).

Etapa 5

Se găseşte ecuaţia parabolei care trece prin cele trei puncte, se adună expresiile funcţiilor
corespunzătoare celor trei tipuri de costuri obţinându-se funcţia costului total şi se găseşte cu
ajutorul derivatei întâi valoarea topt în care se obţine minimul acesteia.

Etapa 6

Se găseşte, ca la etapa 4, costul direct minim cu care se poate executa proiectul în timpul topt
care se adună la valorile celorlalte două costuri în topt şi rezultă CTmin.

5. Graficul Gantt
Un instrument de mare utilitate în analiza drumului critic îl constituie graficul calendaristic
tip Gantt, apărut la începutul secolului. Graficul (diagramă) Gantt exprimă la scara timpului, prin
linii orizontale, durata activităţilor, şi prin linii întrerupte (de exemplu) rezervele de timp. Graficul
Gantt presupune divizarea acţiunii complexe pe care o reprezintă proiectul, în părţi componente
(activităţi) şi eşalonarea acestora în timp, ţinând seama de succesiunea tehnologică, termene
impuse, resurse etc.
Dacă este întocmit în urma unei analize temeinice, graficul Gantt oferă informaţii bogate şi
extrem de sugestiv prezentate, privind desfăşurarea lucrărilor, precum şi o serie de informaţii
derivate, privind eşalonarea resurselor (forţă de muncă, materii prime, materiale, fonduri băneşti).
Aceste avantaje scad dacă, datorită fie amplorii acţiunii considerate, fie nivelului de detaliere dorit,
numărul activităţilor ce compun graficul Gantt creşte mult, ajungând la câteva sute sau mii.
Graficul Gantt exprimă la scara timpului un program de ordonanţare. Astfel, avem graficul
Gantt la termenele cele mai devreme sau graficul Gantt la termenele cele mai târzii.
Pentru trasarea graficului Gantt se procedează astfel:

Pasul 1. Se ordonează activităţile proiectului crescător conform unui program de


ordonanţare.
Pasul 2. Se reprezintă activităţile prin bare orizontale de lungimi egale cu duratele
activităţilor (axa orizontală fiind axa timpului), fiecare bară începând de la
176
Bazele cercetării operaţionale 103

momentul de începere al activităţii corespunzătoare;


Pasul 3. Se marchează fiecare activitate prin simbolul asociat sau prin numerele de ordine
ale evenimentelor de la extremităţi deasupra barei corespunzătoare.
Pasul 4. Rezerva totală de timp se figurează cu linie întreruptă, adiacent cu durata
activităţii, după sau înainte (după tipul programului).
Pasul 5. Pe fiecare linie orizontală se obişnuieşte să se figureze o singură activitate, iar
aceasta să fie imprimată de sus în jos şi de la stânga la dreapta.

Pentru proiectul dat prin tabelul 1 şi calculat prin grafurile din fig. 9 sau fig. 18 se desenează
graficul Gantt din fig. 19, corespunzător programului de ordonanţare minorant (activităţile încep la
termenele cele mai devreme) şi din fig. 20, corespunzător programului de ordonanţare majorant
(activităţile încep la termenele cele mai târzii).

1 2 3 4 5 6 7 8 9 10 11 12
A
(1,2) = A
B
(1,3) = B
D
(3,4) = D
(3,5) = E E

(2,4) = C C

(5,6) = G G

(4,6) = F F

Figura 19

1 2 3 4 5 6 7 8 9 10 11 12
B
(1,3) = B
D
(3,4) = D
A
(1,2) = A
(2,4) = C C

(3,5) = E E
F

(5,6) = G G

Figura 20

177
Teoria ordonanţării 104

6. Analiza resurselor
Dacă din punct de vedere al condiţionărilor de tip precedenţă (temporale) existenţa
activităţilor paralele este corectă din punct de vedere logic, putând exista oricâte activităţi care se
desfăşoară în acelaşi timp, dacă nu se intercondiţionează între ele, neexistând nici o diferenţă între
zilele proiectului, din punct de vedere practic, este clar că o zi în care se desfăşoară în acelaşi timp
10 activităţi este mult mai intensă din punct de vedere al organizării şi aprovizionării cu resurse
decât o zi în care se desfăşoară o singură activitate. Deci, dacă se ţine cont doar de condiţionările
temporale pot apărea dezechilibre foarte mari în desfăşurarea proiectului şi/sau pot apărea zile în
care necesarul de resurse ar fi mai mare decât disponibilul acestora.
Din cele spuse mai sus, se desprinde faptul că există cel puţin două probleme importante
legate de resursele unui proiect:

− problema alocării resurselor, în care se încearcă programarea activităţilor în aşa fel


încât în nici o zi să nu se depăşească disponibilul din nici o resursă;
− problema nivelării resurselor, în care se încearcă programarea activităţilor în aşa fel
încât în toate zilele să se folosească cam aceiaşi cantitate de resurse (sau, altfel spus,
suma variaţiilor de la o zi la alta să fie minimă).

Trebuie făcută şi observaţia că analiza în cele două probleme de mai sus se face în general
pentru resurse refolosibile, care nu se consumă în timp, adică cele care, după terminarea activităţii
la care au fost alocate, se pot folosi la altă activitate. Resursele de acest tip sunt în principal forţa de
muncă şi maşinile şi utilajele.
Pentru expunerea celor două probleme este necesară şi introducerea noţiunilor de intensitate
a unei resurse şi de profil a unei resurse.

1. Intensitatea unei resurse este cantitatea necesară sau disponibilă din acea resursa, la un
moment dat;
2. Profilul unei resurse este diagrama în care se figurează variaţia intensităţii unei resurse
în timp.

A. Problema alocării resurselor

Soluţia acestei probleme se poate obţine, în cazurile foarte simple (puţine activităţi şi puţine
resurse), prin glisarea activităţilor în limitele termenelor lor maxime de începere şi de terminare,
aceasta făcându-se cel mai uşor pe baza graficului Gantt.
Dar, în practică, problemele au de cele mai multe ori sute sau chiar mii de activităţi şi este
necesară luarea în considerare a zeci de resurse importante, ceea ce face imposibilă rezolvarea
problemei prin mijloace empirice, de tipul încercărilor de a glisa activităţile "după ochi" şi obligă la
căutarea unor metode riguroase, programabile pe calculator.
Formularea riguros-matematică a problemei alocării resurselor conduce la modele de
dimensiuni şi complexităţi foarte mari, imposibil de rezolvat chiar cu calculatoarele cele mai
puternice.
Din aceste motive se utilizează procedee heuristice, care, fără a da întotdeauna soluţia
optimă, oferă soluţii cel puţin satisfăcătoare.
În cele ce urmează vom examina unele aspecte ale folosirii procedeelor heuristice de
rezolvare a problemelor de alocare a resurselor.
Mersul operaţiilor este, în general următorul∗:

*
În prezentarea noastră ne referim la rezolvarea mintală a problemelor, evident însă că toate operaţiile se transferă corespunzător
sistemelor de calcul (de altfel mintal nu se pot rezolva decât probleme foarte mici, cu caracter de exemplu).
178
Bazele cercetării operaţionale 105

a) se rezolvă problema ADC - timp, construindu-se graful corespunzător acţiunii complexe


considerate şi se calculează termenele activităţilor, rezervele şi drumul critic;
b) se încearcă plasarea tuturor activităţilor la momentul cel mai devreme de începere şi se
trasează profilul disponibilului resurselor considerate;
c) începând cu activităţile care încep la termenul minim de începere zero şi apoi în ordinea
crescătoare a termenelor minime de începere, se examinează posibilitatea de a programa
aceste activităţi, astfel ca să nu apară depăşiri ale necesarului faţa de disponibil, pentru
nici a resursă;
d) când se ajunge în situaţia ca, la un anumit moment să apară o astfel de depăşire, se
încearcă rezolvarea ei prin operaţii de "amânare" a unora din activităţi (evident, nu
întotdeauna acest procedeu dă rezultate: este posibil ca necesarul dintr-o resursă, pentru o
anumită activitate, să depăşească el singur disponibilul, caz în care, evident, problema
alocării nu are soluţii;
e) când, la un anumit moment, apar necesităţi de amânare şi operaţia de amânare poate fi
aplicată la două sau mai multe activităţi care încep la acelaşi termen, se introduce o
regulă de prioritate, care permite să se stabilească, care anume dintre activităţi se
programează şi care se amână: teoria şi practica drumului critic menţionează următoarele
criterii de amânare folosite de diverşi autori:
− Prioritatea după rezerva totală cea mai mică (se amână activitatea cu rezerva cea mai
mare de timp);
− Prioritatea după durata cea mai mică;
− Prioritatea după termenul minim de începere (se preferă activitatea cu termenul cel
mai devreme de începere cel mai mic);
− Prioritatea după termenul maxim de începere (se preferă activitatea cu termenul cel
mai târziu de începere cel mai mic);
− Prioritatea după termenul maxim de terminare (se preferă activitate cu termenul cel
mai târziu de terminare cel mai mic);
− Prioritatea după intervalul corespunzător activităţii (se preferă activitatea cu
termenul cel mai devreme de terminare minim).
− Prioritate după cantitatea din resurse consumată (se preferă activitatea care consumă
cel mai mult din resurse), etc
Nu se poate vorbi despre a concluzie generală privind valabilitatea unora sau altora dintre
criteriile de amânare deoarece, în anumite cazuri, apare eficientă folosirea unuia dintre ele, în alte
cazuri a altuia etc.
f) pentru fiecare activitate care s-a decis să fie amânată se încearcă plasarea ei la primul
moment posibil, acesta fiind primul moment când se disponibilizează din resurse, adică
primul moment când se termină una din resursele în curs de desfăşurare;
g) pentru fiecare activitate amânată se analizează toate activităţile care o succed şi, dacă
este nevoie, se amână şi acestea, încât să se respecte toate intercondiţionările existente
(în fapt, se face reactualizarea grafului);
h) Se reia procedeul, de la primul moment la care ar putea să înceapă o activitate
neplanificată încă, până când toate activităţile sunt programate şi toate resurse1e a1ocate
nu depăşesc disponibilul; în multe cazuri sunt necesare amânări care conduc chiar la
depăşirea termenului final al proiectului calculat în faza ADC-timp; ca urmare, în aceste
cazuri, noţiunea de drum critic suferă o modificare, devenind echivalentul duratei
minime în care poate fi executată o acţiune complexă în limita resurselor disponibile.

În general, procedeele heuristice de rezolvare a problemei alocării resurselor iau în


considerare durate fixe pentru activităţi şi nu admit întreruperea acestora. Există însă şi procedee
care recomandă scurtarea (lungirea) duratelor după nevoie, prin alocare suplimentară, sau retragere
de resurse, precum şi posibilitatea de a întrerupe anumite activităţi.
179
Teoria ordonanţării 106

B. Problema nivelării resurselor

După cum am arătat, această problemă constă în planificarea activităţilor cu limitarea


termenului final de execuţie a acţiunii complexe, astfel încât profilul necesarului resurselor să fie
cât mai uniform.
Există mai multe moduri de a exprima obiectivul uniformizării profilului necesarului,
putându-se urmări:

− minimizarea sumei variaţiilor absolute ale profilului;


− minimizarea sumei creşterilor;
− minimizarea deviaţiilor absolute de la medie;
− minimizarea valorii maxime;
− minimizarea variaţiei maxime;
− minimizarea sumei pătratelor diferenţelor între profilul necesarului şi un profil ideal (de
obicei o linie paralelă cu axa timpului) etc.

Utilizând criteriul minimizării sumei pătratelor diferenţelor, Burgens şi Killebrew au


elaborat un algoritm de nivelare pentru o singură resursă, ale cărui operaţii sunt următoarele:

a) Se întocmeşte graficul-reţea şi se calculează drumul critic;


b) Se programează activităţile la termenul minim de începere, se întocmeşte profilul
necesarului şi se calculează suma pătratelor diferenţelor (pe fiecare unitate de timp) între
profilul necesarului şi profilul disponibilului;
c) Începând de la sfârşitul graficului-reţea se ia prima activitate care dispune de rezervă şi se
găseşte poziţia cea mai avantajoasă posibilă a ei, din punct de vedere al criteriului
enunţat; când sunt mai multe poziţii egal avantajoase se alege cea mai din dreapta;
d) Se trece la următoarea activitate, spre început, care dispune de rezervă şi se procedează la
fel şi tot aşa, pentru toate activităţile;
e) Se calculează valoarea criteriului corespunzător noii planificări obţinute, apoi se aplică
din nou algoritmul de la pasul c, până nu mai sunt posibile îmbunătăţiri.

În cazul problemelor de nivelare după mai multe resurse este posibilă adaptarea algoritmului
Burgess-Killebraw după cum urmează:

− se ierarhizează importanţa relativă a resurselor stabilindu-se nişte coeficienţi de pondere;


− se începe aplicarea algoritmului, urmărindu-se simultan pentru toate rezervele efectul
deplasării unei activităţi în limita intervalului ei aferent; se pot ivi următoarele cazuri:
1. deplasarea unei activităţi îmbunătăţeşte valoarea criteriului pentru toate resursele
considerate; în acest caz nu se face nici un calcul, deplasarea efectuându-se cât mai
avantajos;
2. deplasarea unei activităţi îmbunătăţeşte valoarea criteriului pentru o parte din resurse
şi o înrăutăţeşte pentru altele din ele; în acest caz se urmăreşte acea poziţie a
activităţilor care face ca suma sumei pătratelor diferenţelor pentru fiecare resursă,
ponderată cu coeficienţii de pondere stabiliţi, să fie minimă.

180
Bazele cercetării operaţionale 107

7. Metoda PERT
Metodele CPM şi MPM analizate anterior furnizează, aşa cum s-a văzut, informaţii care sunt
utile în procesul de conducere, însă ele nu ţin seama de posibilele variaţii ale duratelor de execuţie
ale activităţilor.
Metoda PERT încearcă să corecteze acest lucru. În acest scop metoda permite calcularea
timpului mediu de terminare a unui proiect, identificarea activităţilor critice, precum şi estimarea
probabilităţilor de realizare a termenelor planificate. Pentru că în practică, în foarte multe programe
din domeniul cercetării şi dezvoltării, duratele activităţilor sunt insuficient cunoscute sau chiar
incerte prin considerarea conceptelor statistice, duratele activităţilor sunt considerate variabile
aleatoare caracterizate prin media şi dispersia lor.
Metoda PERT porneşte de la următoarele considerente:

a) Pentru fiecare activitate (i,j) se estimează trei durate:


− durata optimistă (aij), care este considerată durata minimă de execuţie pentru
activitate, în condiţii generale normale de execuţie;
− durata cea mai probabilă (mij) ca fiind estimaţia cu cea mai mare şansă de realizare
în condiţii normale;
− durata pesimistă (bij) ca fiind durata maximă de realizare a activităţii, atunci când
există împrejurările cele mai defavorabile de execuţie.
Un graf reţea înzestrat cu cele trei tipuri de durate pentru activităţile sale este numit reţea
PERT.
b) Durata fiecărei activităţi a proiectului are o distribuţie β. Se propune distribuţia beta
pentru că aceasta satisface condiţii care au un suport practic:
− intersectează axa abciselor în două puncte aij şi bij, care corespund duratei minime şi
duratei maxime;
− este unimodală, adică are o singură valoare maximă, care corespunde duratei cele
mai probabile mij.
− valoarea bij – aij este intervalul de variaţie a distribuţiei şi poate indica gradul de
împrăştiere a duratelor posibile.
c) Durata medie de execuţie ( t ij ) a unei activităţi (i,j) este dată de formula:

a ij + 4 ⋅ m ij + b ij
t ij =
6

d) Dispersia duratei de execuţie ( σ ij2 ) a activităţii (i,j) se calculează cu formula:

2
 b ij − a ij 
σ ij2 =  

 6 

Dispersia σ ij2 este o măsură a gradului de nesiguranţă în estimarea duratei activităţii


(i,j); o valoare mare a dispersiei înseamnă o mare nesiguranţă în privinţa duratei sale de
execuţie.
e) Durata totală a proiectului este o variabilă aleatoare cu distribuţie normală având media
şi dispersia:

tn = ∑ t ij
(i, j ∈Dcrit
)
σ n2 = ∑ σ
(i, j ∈Dcrit
)
2
ij

181
Teoria ordonanţării 108

unde Dcrit reprezintă mulţimea tuturor arcelor grafului care sunt pe drumul critic.
f) Probabilitatea de realizare a duratei planificate Tplan a unui proiect se determină
calculând, mai întâi, factorul de probabilitate z, după relaţia:

Tplan − t n
z=
σ n2

şi apoi se deduce din tabelul valorilor funcţiei Laplace probabilitatea p( t n ≤ Tplan).


g) Graful trebuie să conţină un număr suficient de mare de activităţi pentru a se întruni toate
condiţiile aplicării teoremei limită centrală iar duratele activităţilor să fie variabile
aleatoare independente. Se recomandă, de asemenea, să nu existe mai multe drumuri
critice.

Metoda PERT se utilizează, în general, pentru descrierea unui proiect atât pe reţele CPM cât
şi MPM.
Algoritmul pentru calcularea unui program PERT este următorul:

Pasul 1. Se calculează durata medie a fiecărei activităţi din reţeaua PERT, utilizând relaţiile de la
punctul c);
Pasul 2. Se calculează termenele activităţilor reţelei PERT, considerând duratele activităţilor
deterministe şi egale cu mediile lor, utilizând una din metodele CPM sau MPM;
Pasul 3. Se calculează dispersia duratei fiecărei activităţi cu formula de la punctul d);
Pasul 4. Se calculează durata totală de execuţie a întregului proiect ( t n ) şi dispersia ( σ n2 ) cu
formulele de la punctul e);
Pasul 5. Se determină probabilitatea de realizare a duratei planificate a proiectului după relaţia de
la punctul f) folosind tabelul funcţiei Laplace;
Pasul 6. Se face analiza proiectului, conform probabilităţilor de realizare a duratei a proiectului:
− dacă p( t n ≤ Tplan) este mai mică decât 0,25 există un mare risc ca proiectul să nu se
realizeze la termenul planificat şi este necesară revizuirea duratelor de execuţie ale
activităţilor în sensul urgentării acestora;
− dacă p( t n ≤ Tplan) ≥ 0,5 programarea este justă;
− dacă p( t n ≤ Tplan) este mai mare decât 0,6, programarea utilizează excesiv de multe
resurse
Pasul 7. Dacă se doreşte să se urmărească anumite activităţi (i,j) pentru care sunt date termenele
planificate de execuţie Tij, atunci se calculează probabilităţile ca fiecare activitate să fie
executată la termenul planificat utilizând relaţia:

Tij − t î
zij =
σ ij2
şi tabelul valorilor funcţiei lui Laplace.
− dacă pij(tî ≤ Tij) < 0,6 atunci trebuie luate măsuri de urgentare a executării activităţii
(i,j) în vederea realizării ei în termenul planificat;
− dacă pij(tî ≤ Tij) ≥ 0,6 activitatea (i,j) se execută în termenul planificat.

Exemplu: Fie G un graf reţea definit de elementele din tabelul 8.7 în care, pentru fiecare
activitate, sunt definite trei estimări ale duratei (în săptămâni) corespunzătoare duratelor aij, mij, bij.
Se rezolvă reţeaua PERT ştiind că Tplanificat = 24 săptămâni:

182
Bazele cercetării operaţionale 109

tabelul 8.7
Activităţi Condiţionări Durate Durata medie t î σ
tm t tM
a m b
A – 2 5 8 5 0 7
B – 2 5 8 5 0 5 1,00
C B 1 2 3 2 5 7 0,11
D A 2 3 4 3 5 13,16
E A 1 3 5 3 5 11,33
F A,C 3 6 10 6,16 7 14,50
G A,C 4 6 7 5,83 7 12,83 0,25
H A,C 3 4 6 4,16 7 16,66
I D 1 2 3 2 8 15,16
J I 3 5 6 4,83 10 19,99
K F 2 4 5 3,83 13,16 18,33
L G 2 4 5 3,83 12,83 16,66 0,25
M E 4 6 11 6,50 8 17,83
N M 4 5 7 5,16 14,50 22,99
Q K 2 5 6 4,66 15,99 22,99
R L,H 5 6 9 6,33 16,66 22,99 0,44
S J 2 3 4 3 14,83 22,99

Rezolvarea este dată în acelaşi tabel, din care se observă că activităţile critice (fără rezervă
de timp) sunt B, C, G, L şi R iar după efectuarea calculelor obţinem:

tn = 22,99 săptămâni
σ n2 = 1,00 + 0,11 + 0,25 + 0,25 + 0,44 = 2,05
24 − 22,99
Z= = 0,70
2,05

Din tabelul cu valorile funcţiei Laplace găsim, corespunzător valorii 0,70, probabilitatea
0,758. Avem, astfel, o situaţie în care se face risipă de resurse, deci este necesar să se redefinească
duratele în vederea obţinerii unei planificări juste.

183
Bazele cercetării operaţionale 110

GESTIUNEA STOCURILOR

1. Introducere în problematica stocurilor

1.1. Stocurile într-un sistem de producţie

În activitatea curentă a agenţilor economici apar probleme operative de producţie, de


planificare sau proiectare, care se cer rezolvate în aşa fel încât ele să corespundă unui anumit scop,
de exemplu: un program de producţie realizat cu beneficii cât mai mari, cu cheltuieli cât mai mici
sau într-un timp cât mai scurt etc.
Pornind de la anumite date cunoscute, caracteristice procesului economic, respectiv:
beneficii unitare, coeficienţi tehnologici, disponibil de resurse, cheltuieli unitare, consumuri
specifice etc., se pot formula probleme care să ţină seama de scopul agenţilor economici atunci când
porneşte procesul tehnologic.
Teoria stocurilor a apărut din necesitatea asigurării unei aprovizionări ritmice şi cu cheltuieli
minime a stocurilor de materii prime şi materiale în procesul de producţie, sau a stocurilor de
produse finite şi bunuri de larg consum în activitatea de desfacere a mărfurilor.
STOCURILE reprezintă cantităţi de resurse materiale sau produse (finite sau într-un stadiu
oarecare de fabricaţie) acumulate în depozitele de aprovizionare ale unităţilor economice într-un
anumit volum şi o anumită structură, pe o perioadă de timp determinată, în vederea unei utilizări
ulterioare.
Pe perioada respectivă resursele materiale sunt disponibile, dar nu sunt utilizate, deci sunt
neactive, scoase din circuitul economic, sau care prelungesc acest circuit (aspect considerat
negativ).
Stocul este o rezervă de material destinat să satisfacă cererea beneficiarilor, aceştia
identificându-se, după caz, fie unei clientele (stoc de produse finite), fie unui serviciu de fabricaţie
(stocuri de materii prime sau de semifabricate), fie unui serviciu de întreţinere (articole de consum
curent sau piese de schimb), fie unui serviciu de după vânzare (piese detaşate).
Tratarea procesului de stocare ca proces “obiectiv necesar” se impune, nu numai ca urmare a
naturii economice a acestuia, ci şi pentru că realizarea lui atrage cheltuieli apreciabile, concretizate
în afectarea unor importante spaţii de depozitare-păstrare, de utilaje pentru transport-depozitare, de
fonduri financiare etc.
Deşi diferite, procesele de stocare au totuşi o serie de caracteristici comune, dintre care
esenţială este acumularea unor bunuri în scopul satisfacerii cererii viitoare. O problemă de teoria
stocurilor există doar atunci când cantitatea resurselor poate fi controlată şi există cel puţin o
componentă a costului total care scade pe măsură ce cantitatea stocată creşte.
Evoluţia nivelului stocului este interesantă din două puncte de vedere:
a) din punctul de vedere al producătorului, care este preocupat de valoarea medie a
nivelului stocului, deoarece această valoare permite cunoaşterea imobilizării totale a stocului şi
scopul producătorului va fi reducerea imobilizării la valoarea sa minimă;
b) din punctul de vedere al beneficiarului, care dorind să fie satisfăcut imediat, apreciază
că trebuie să evite, în măsura posibilităţilor, rupturile de stoc. Obiectivul beneficiarului va fi
reducerea la minim a riscului de ruptură de stocuri.
Aceste două puncte de vedere sunt contradictorii: riscurile de ruptură de stocuri nu sunt
reduse decât dacă imobilizările sunt foarte mari. Este deci necesar să se stabilească un echilibru,
obiectivul conducerii stocului constând în căutarea acestui echilibru.

191
Gestiunea stocurilor 111

1.2. Importanţa stocurilor în procesul de producţie

Procesul de producţie propriu-zis este supus în mod aleator unei sume de perturbaţii cum ar
fi: instabilitatea personalului, prezenţa rebuturilor, existenţa timpilor morţi datoraţi defectării
utilajelor etc.
În felul acesta, producţia devine un rezultat aleator al unei combinaţii de fenomene care au
loc în conformitate cu legile probabilităţii. Nici un proces de producţie nu e fiabil dacă este supus
direct acţiunii perturbatoare a parametrilor ce apar în mod aleator. Este deci absolut necesar de a
elimina aceste influenţe directe, adică să se deconecteze sistemul de la fluctuaţiile externe.
Elementul care asigură deconectarea şi care joacă rolul de tampon, de amortizor al variaţiilor îl
reprezintă stocurile.
Ca proces economic complex, gestiunea stocurilor are o sferă largă de cuprindere, aceasta
incluzând atât probleme de conducere, dimensionare, de optimizare a amplasării stocurilor în
teritoriu, de repartizare a lor pe deţinători, de formare şi evidenţă a acestora, cât şi probleme de
recepţie, de depozitare şi păstrare, de urmărire şi control, de redistribuire şi mod de utilizare.
Cu toate că stocurile sunt considerate resurse neactive, este necesar, în mod obiectiv, să se
recurgă la constituirea de stocuri (de resurse materiale) bine dimensionate, pentru a se asigura
ritmicitatea producţiei materiale şi a consumului.
Obiectivitatea formării de stocuri este justificată de acţiunea mai multor factori care le
condiţionează existenţa şi nivelul de formare, le stabilizează funcţia şi scopul constituirii. Între
aceştia amintim:
• contradicţia dintre specializarea producţiei şi caracterul nespecializat al cererii;
• diferenţa spaţială dintre producţie şi consum;
• caracterul sezonier al producţiei sau al consumului; pentru majoritatea produselor producţia
este continuă, în timp ce consumul este sezonier; la produsele agricole situaţia este inversă;
• periodicitatea producţiei şi consumului, a transportului;
• necesitatea condiţionării materialelor înaintea intrării lor în consum;
• punerea la adăpost faţă de dereglările în procesul de aprovizionare-transport sau faţă de
factorii de forţă majoră (stare de necesitate, calamităţi naturale, seisme, caracterul deficitar
al resurselor);
• necesitatea executării unor operaţii specifice pentru a înlesni procesul de livrare sau consum
al materialelor (recepţie, sortare, marcare, ambalare – dezambalare, formarea loturilor de
livrare, pregătirea materialelor pentru consum ş.a.m.d.);
• necesitatea eficientizării procesului de transport etc.

Ţinând seama de această dublă influenţă a procesului de stocare, este necesară găsirea de
modele şi metode în vederea formării unor stocuri, care prin volum şi structură, să asigure
desfăşurarea normală a activităţii din economie, dar în condiţiile unor stocări minim necesare şi a
unor cheltuieli cât mai mici.
Rolul determinant al stocurilor este evidenţiat de faptul că acestea asigură certitudine,
siguranţă şi garanţie în alimentarea continuă a producţiei şi ritmicitatea desfacerii rezultatelor
acesteia. Altfel spus, procesul de stocare apare ca un regulator al ritmului aprovizionărilor cu cel al
producţiei, iar stocul reprezintă acel “tampon inevitabil” care asigură sincronizarea cererilor pentru
consum cu momentele de furnizare a resurselor materiale.
Alte motive pentru crearea stocurilor ar putea fi:
• investirea unei părţi din capital în stocuri pentru a reduce cheltuielile de organizare;
• capitalul investit în stocuri e uşor de evidenţiat;
• asigurarea desfăşurării neîntrerupte a procesului de producţie;
• asigurarea unor comenzi de aprovizionare la nivelul consumului imediat nu este
întotdeauna posibilă şi eficientă din punct de vedere economic;

192
Bazele cercetării operaţionale 112

• comenzile onorate de către furnizorii din alte localităţi nu pot fi introduse imediat în
procesul de fabricaţie;
• anticiparea unei creşteri a preţurilor (exceptând speculaţiile) etc.

1.3. Tipuri de stocuri

În cadrul gamei foarte largi de stocuri, se disting cu deosebire:


A. din punct de vedere al producţiei stocurile pot fi de trei feluri:
a) cel de materii prime şi materiale destinat consumului unităţilor de producţie; este vorba
de stocul de producţie, stoc în amonte;
b) cel de produse finite, destinate livrării către beneficiari; este vorba de stocul de
desfacere, stoc în aval;
c) cel destinat asigurării funcţionării continue a unor maşini sau a unor linii de fabricaţie;
este vorba de stocul interoperaţional.
Ponderea cea mai mare o deţine stocul de producţie.
B. din punct de vedere al rolului jucat pe plan economic stocurile pot fi:
a) stocuri cu rol de regulator; au ca rol reglarea fluxurilor de intrare şi de ieşire ale
produselor între două stadii succesive ale procesului tehnologic;
b) stocuri cu rol strategic; sunt formate din piese sau din subansamble folosite de serviciul
de întreţinere , necesare înlocuirii rapide a lor în caz de avarie la instalaţiile vitale ale
întreprinderii;
c) stocuri speculative; sunt mai puţin legate de activitatea agenţilor economici şi se referă
în general la produse şi materiale rare, a căror valoare nu este fluctuantă.
C. Din punct de vedere al modului de depozitare, care ţine seama şi de unele proprietăţi
fizico-chimice ale elementelor. Aşa avem: produse periculoase, voluminoase, fragile etc.
D. Din punct de vedere al modului de gestionare avem:
a) stocuri cu gestiune normală;
b) stocuri cu “afectare directă” (comandate special pentru o anume comandă);
c) stocuri “fără gestiune” (din magaziile intermediare, cu o supraveghe-re globală);
d) stocuri de produse consumabile;
E. Din punct de vedere al caracteristicilor formării şi destinaţiei lor stocurile pot fi:
a) stoc curent;
b) stoc de siguranţă;
c) stoc de pregătire sau de condiţionare;
d) stoc pentru transport intern;
e) stoc de iarnă;

1.4. Obiective şi rezultate ale gestiunii ştiinţifice a stocurilor

Având în vedere particularităţile diferitelor procese de stocare, activitatea de conducere a


acestora are totuşi unele trăsături comune; aşa de pildă, orice proces de stocare necesită prevederea
desfăşurării lui şi a condiţiilor în care urmează a se efectua.
Formarea stocurilor este predeterminată de o anumită comandă, iar desfăşurarea procesului
de stocare poate avea loc în baza organizării sale raţionale. Realizarea în condiţii de eficienţă
economică maximă şi de utilitate impune o coordonare permanentă a procesului de stocare şi un
control sistematic al modului de derulare al acestuia.
Obiectivele principale ale conducerii proceselor de stocare pot fi sintetizate astfel:
• asigurarea unor stocuri minim necesare, asortate, care să asigure desfăşurarea normală a
activităţii economico-productive a agenţilor economici prin alimentarea continuă a
punctelor de consum şi în condiţiile unor cheltuieli cât mai mici;
• prevenirea formării de stocuri supranormative, cu mişcare lentă sau fără mişcare şi
valorificarea operativă a celor existente (devenite disponibile);
193
Gestiunea stocurilor 113

• asigurarea unor condiţii de depozitare-păstrare corespunzătoare în vederea prevenirii


degradãrilor de materiale existente în stocuri;
• folosirea unui sistem informaţional simplu, operativ, eficient, util şi cuprinzător care să
evidenţieze în orice moment starea procesului de stocare;
• aplicarea unor metode eficiente de urmărire şi control care să permită menţinerea stocului
în anumite limite, să prevină imobilizările neraţionale.
Soluţionarea oricărei probleme de stoc trebuie să conducă la obţinerea răspunsului pentru
următoarele două chestiuni (şi care constituie de fapt obiectivele principale ale gestiunii):
1) determinarea mărimii optime a comenzii de aprovizionare;
2) determinarea momentului (sau frecvenţei) optime de aprovizionare.
Desigur, pentru unele probleme particulare (de exemplu cele statice) este suficient un singur
răspuns şi anume la prima problemă.
Se realizează următoarele deziderate:
• reducerea frecvenţei fenomenului de rupere a stocului şi prin aceasta satisfacerea în mai
bune condiţii a cererii către beneficiari;
• reducerea cheltuielilor de depozitare;
• mărirea vitezei de rotaţie a fondurilor circulante ale agenţilor economici;
• reducerea imobilizărilor de fonduri băneşti;
• reducerea unor riscuri inerente oricărui proces de stocare;
• obţinerea de economii la nivelul cheltuielilor generale ale întreprinderii (de exemplu, la
produsele cu o durată de depozitare a stocului de materii prime mai mare decât durata
ciclului de fabricaţie);
• descoperirea şi valorificarea rezervelor interne etc.

1.5. Elementele principale ale unui proces de stocare

Stabilirea politicii de gestiune a stocurilor este nemijlocit legată de cunoaşterea elementelor


prin care se caracterizează procesele de stocare şi care determină nivelul de formare al stocurilor:
A. CEREREA DE CONSUM, element de bază în funcţie de care se determină nivelul şi
ritmul ieşirilor, volumul şi ritmul necesar pentru intrări şi nivelul stocului. Cererea de consum
reprezintă numărul de produse solicitate în unitatea de timp. Acest număr nu coincide întotdeauna
cu cantitatea vândută deoarece unele cereri pot rămâne nesatisfăcute datorită deficitului în stoc sau
întârzierilor în livrare. Evident, dacă cererea poate fi satisfăcută în întregime, ea reprezintă
cantitatea vândută.
După natura ei, cererea poate fi:
a) determinată - cererea pentru o perioadă e cunoscută şi poate fi constantă pentru toate
perioadele sau variabilă pentru diferite perioade;
b) probabilistă - cererea e de mărime sau frecvenţă necunoscute, dar previzibile şi
reprezentată printr-o repartiţie de probabilitate dată. Caracteristicile şi tipul cererii se stabilesc pe
bază de observaţii, prin studii asupra perioadelor trecute. Stabilirea caracteristicilor şi tipului de
cerere pe baza observaţiilor, prin studii asupra perioadelor trecute, nu este satisfăcătoare, din cel
puţin două motive:
- presupunând că şi în viitor cererea ar urma aceeaşi repartiţie de probabilitate ca în
perioadele trecute, parametrii ei nu se menţin întotdeauna;
- se exclude posibilitatea influenţei unor fluctuaţii sezoniere asupra cererii.
Cererea probabilistă poate fi stabilă din punct de vedere statistic sau nestabilă din punct de
vedere statistic (sezonieră).
c) necunoscută - cererea pentru care nu dispunem nici de datele necesare stabilirii unei
repartiţii de probabilitate (este cazul, de exemplu, al produselor noi).
B.COSTURILE reprezintă cheltuielile ce trebuie efectuate pentru derularea procesului de
aprovizionare-stocare (respectiv cele cu comandarea, contractarea, transportul, depozitarea, stocarea
materialelor etc.).
194
Bazele cercetării operaţionale 114

În calculul stocurilor se au în vedere:


a) Costurile de stocare care cuprind suma cheltuielilor ce trebuie efectuate pe timpul
staţionării resurselor materiale în stoc şi anume:
- cheltuieli cu primirea-recepţia;
- cheltuieli de transport intern;
- cheltuieli de manipulare, care cuprind costul forţei de muncă nece-sare pentru
deplasarea stocurilor, a macaralelor, cărucioarelor, elevatoarelor şi a celorlalte utilaje
necesare în acest scop;
- cheltuieli de depozitare propriu-zisă: chiria spaţiului de depozitare sau amortizările, în
cazul unui spaţiu propriu;
- cheltuieli de conservare;
- cheltuieli cu paza;
- cheltuieli de evidenţă care apar datorită faptului că stocurile sunt practic inutilizabile
fără o evidenţă bine pusă la punct, care să ne spună dacă produsul necesar se găseşte
sau nu în stoc;
- cheltuieli administrative;
- impozite şi asigurări;
- cheltuieli datorate deprecierii, deteriorării, uzurii morale care sunt caracteristice pentru
produsele “la modă” sau pentru cele care se modifică chimic în timpul stocării (alimente, de
exemplu); la care se adaugă costul capitalului investit; acest cost reprezintă un anumit procent din
capitalul investit, însă determinarea cifrei exacte necesită o analiză atentă. Procentul exact depinde,
în primul rând de ce alte utilizări ce se pot găsi pentru capitalul ”imobilizat” în stocuri.
Capitalul investit în stoc este neproductiv, costul său este dat de mărimea beneficiului ce s-ar
putea obţine dacă acest capital ar fi fost investit într-un mod productiv sau de dobânda ce trebuie
plătită dacă ar fi fost împrumutat.
Costul stocării depinde de mărimea stocului şi durata stocării. Aceste cheltuieli se pot grupa
după cum urmează:
- cheltuieli constante pentru durata totală a procesului de gestiune (amortismentul clădirii,
cheltuieli pentru întreţinerea depozitului, iluminat, încălzit etc.;
- cheltuieli variabile proporţionale cu cantitatea depozitată şi cu durata depozitării (deci cu
stocul mediu), exprimate prin dobânda pentru fondurile imobilizate în stoc;
- cheltuieli variabile neproporţionale cu mărimea lotului (salarii ale forţei de muncă, pierderi
datorate uzurii reale şi demodării, cheltuieli pentru chirie etc.) şi cu durata de stocare.
La cheltuielile de existenţă a stocului în depozit, prezentate mai sus, se pot adăuga şi
cheltuielile pentru surplus de stoc (excedent), care intervin atunci când, după satisfacerea cererii,
rămâne o anumită cantitate nevândută (de exemplu, desfacerea unor articole de sezon). În modelele
dinamice unde se lansează mai multe comenzi în timpul unui sezon, penalizarea pentru surplus se
ataşează numai ultimei comenzi nedesfăcute complet.
b) Costul de penurie sau costul ruperii stocului este definit atunci când volumul cererii
depăşeşte stocul existent. Referitor la acest stoc, există trei situaţii. Prima apare atunci când stocul
(de materii prime sau semifabricate) este nul la primirea comenzii şi firma se reaprovizionează de
urgenţă pentru a produce cantităţile solicitate.
Componentele cheltuielilor de penurie sunt, în acest caz, următoarele:
- cheltuieli suplimentare pentru satisfacerea cererii în condiţii neobişnuite;
- penalizări primite de către firmă din partea beneficiarului, dacă termenele de livrare
prevăzute în contracte nu se respectă;
- cheltuieli suplimentare pentru manipulare, ambalare, expediţie etc.
A doua situaţie are loc atunci când desfacerea nu se poate realiza (pierderea beneficiarului)
din cauza nelivrării imediate a unui articol. Estimarea cheltuielilor de penurie este aici destul de
dificilă şi adesea imposibilă.
A treia, şi cea mai dificilă, apare atunci când firma este în lipsă de materii prime (sau piese
de schimb) ce afectează întregul proces de producţie, cu toate consecinţele sale, reflectate în penali-

195
Gestiunea stocurilor 115

zări şi uneori chiar în costul producţiei care ar fi rezultat în timpul stagnării.


c) Cheltuieli datorate variaţiilor ritmului de producţie. Din această categorie fac parte:
- cheltuielile fixe legate de creşterea ritmului de producţie, de la nivelul zero, la un
anumit nivel dat. Dacă este vorba de achiziţii, aici vor intra cheltuielile administrative
legate de lansarea comenzilor;
- cheltuieli de lansare care includ toate cheltuielile care se fac cu: întocmirea comenzii,
trimiterea acesteia la furnizor, pregătirea livrării unei partizi de materiale, cheltuieli de
transport a lotului, deplasării la furnizori, telefoane, poştă etc.; în general aceste
cheltuieli sunt fixe pentru o comandă.
- cheltuieli legate de angajarea şi instruirea unui personal suplimentar sau de concediere a
unor salariaţi.
d) Preţul de achiziţie sau cheltuielile directe de producţie. Preţurile pe unitatea de produs
pot depinde de cantitatea achiziţionată, dacă se acordă anumite reduceri de preţ în funcţie de
mărimea comenzii. Cheltuielile de producţie pe unitatea de produs pot fi şi ele mai scăzute, datorită
unei eficienţe superioare a muncitorilor şi maşinilor într-o producţie de serie mare.
C) CANTITATEA DE REAPROVIZIONAT reprezintă necesarul de aprovizionat care se
stabileşte în funcţie de necesarul pentru consum pentru întreaga perioadă de gestiune.
Cantitatea de aprovizionat (cantitatea intrată în stoc) poate fi din producţia proprie sau
obţinută prin alte mijloace şi se poate referii la fiecare resursă separat sau la ansamblul lor.
Această cantitate e limitată de capacităţile de depozitare.
D) LOTUL reprezintă cantitatea cu care se face aprovizionarea la anumite intervale în cadrul
perioadei de gestiune stabilită (trimestru, semestru, an) şi care este în funcţie de caracterul cererii.
E) PARAMETRII TEMPORALI sunt specifici dinamicii proceselor de stocare. Aceştia
sunt:
a) perioada de gestiune - determină şi orizontul procesului de gestiune. De obicei se
consideră a fi un an;
b) intervalul de timp între două aprovizionări consecutive;
c) durata de reaprovizionare - reprezintă timpul ce se scurge din momentul calendaristic
la care s-a emis comanda de reaprovizionare până la sosirea în întreprindere a cantităţii de
reaprovizionat;
d) momentul calendaristic la care se emit comenzile de reaprovi-zionare. (data de
reaprovizionare);
e) coeficientul de actualizare.
Dacă în modelele probabiliste folosirea tuturor parametrilor temporali este obligatorie, unii
dintre ei (de exemplu, durata de reaprovizionare sau data de reaprovizionare) nu prezintă nici o
importanţă în modelele deterministe. De asemenea durata de aprovizionare poate fi o constantă sau
o variabilă aleatoare, determinând în baza legăturii pe care o are cu volumul şi frecvenţa cererii,
cheltuielile de penurie.
F) GRADUL DE PRELUCRARE A PRODUSELOR. Cu cât bunurile păstrate în stoc
sunt într-un stadiu mai avansat de finisare, cu atât mai repede pot fi satisfăcute comenzile, dar cu
atât mai mari vor fi cheltuielile de stocare. Cu cât produsele sunt mai puţin finisate (cazul limită îl
constituie materia primă), cu atât mai mici sunt cheltuielile de stocare, dar timpul necesar pentru
livrarea unei comenzi este mai mare. În plus, erorile de previziune tind să crească pe măsură ce
gradul de prelucrare a produselor este mai avansat; pentru a reduce influenţa factorilor nefavorabili
este necesar de aceea să crească şi stocul tampon. Numărul tipurilor de produse ce trebuie stocate
creşte rapid, pe măsură ce gradul de finisare este mai avansat.
Variabilele care influenţează stocurile sunt de două feluri:
− variabile controlabile: cantitatea intrată în stoc, frecvenţa sau momentul achiziţiilor,
gradul de prelucrare a produselor;
− variabile necontrolabile: costurile, cererea, durata de reaprovizionare, cantitatea
livrată.

196
Bazele cercetării operaţionale 116

2. Modele de gestiune a stocurilor


2.1. Modelul Willson

Ipotezele modelului:

1. cerere constantă în timp (cereri egale pe intervale egale de timp);


2. perioadă fixă de aprovizionare (aprovizionarea se face la intervale egale de timp);
3. cantităţi egale de aprovizionare;
4. aprovizionarea se face în momentul în care stocul devine 0 (nu se admit intervale de timp
pe care stocul să fie 0);
5. aprovizionarea se face instantaneu (durata dintre momentul lansării comenzii şi intrarea
mărfii în depozit este zero)

Datele modelului:

− T = perioada totală de timp pe care se studiază stocarea;


− N = cererea totală pe perioada T;
− cs = costul unitar de stocare (costul stocării unei unităţi de marfă pe o unitate de timp)
− cl = costul lansării unei comenzi

Variabilele modelului:

− τ = intervalul dintre două aprovizionări succesive;


− n = cantitatea comandată şi adusă la fiecare aprovizionare;
− s(t) = nivelul stocului din depozit la momentul t

Obiectivul modelului

− minimizarea costului total de aprovizionare CT

Relaţiile dintre mărimile modelului

n N
Ipoteza 1 ⇒ = = cererea pe unitatea de timp ⇒ s(t) = liniară
τ T
Ipoteza 2 ⇒ τ acelaşi între oricare două comenzi
Ipoteza 3 ⇒ n acelaşi pentru toate comenzile
Ipoteza 4 ⇒ s(t) ≥ 0 pentru orice t
Ipoteza 5 ⇒ la sfârşitul unei perioade τ s(t) are un salt de la 0 la n

Rezolvare

Situaţia de mai sus poate fi vizualizată prin trasarea graficului variaţiei stocului în timp:

197
Gestiunea stocurilor 117

s(t)

n
τ T

Figura 1
În figura 1 a fost reprezentată evoluţia stocului, dacă toată cantitatea necesară ar fi adusă la
începutul perioadei (graficul de deasupra) sau dacă s-ar aduce câte n unităţi din τ în τ unităţi de
timp (graficul de jos). Se observă că evoluţia este periodică, de perioadă τ. În concluzie vom calcula
costul total cu aprovizionarea calculând costul pe o perioadă şi înmulţind apoi cu numărul de
perioade:

− pe o perioadă avem o lansare, deci un cost cl şi cheltuieli de stocare pe o durată τ, stocul


n
variind liniar de la n la 0. Din acest motiv costul cu stocarea va fi: cs · · τ (În general
2
τ
costul de stocare se calculează cu formula c S ⋅ ∫ s(t )dt ).
0
N T
− numărul de perioade este egal cu =
n τ
n N
− costul total cu aprovizionarea va fi CT = (cl + cs · · τ) ·
2 n

În concluzie rezolvarea problemei se reduce la a găsi minimul funcţiei:

n N
CT(n,τ) = (cl + cs · · τ) ·
2 n

N T
dacă variabilele n şi τ verifică = şi n şi τ sunt strict pozitive şi n ∈ (0,N], τ ∈ (0,T]. Pentru
n τ
N T
rezolvare vom scoate pe τ în funcţie de n din relaţia = :
n τ
T
τ=n·
N
şi înlocuim în expresia costului total cu aprovizionarea obţinând:

n T N 1 c ⋅T
CT(n) = (cl + cs · ·n· )· = cl ⋅ N ⋅ + S ⋅n
2 N n n 2

198
Bazele cercetării operaţionale 118

Cei doi termeni în care a fost separat costul total reprezintă cheltuielile totale cu lansările
respectiv cheltuielile totale cu stocarea, observându-se că primele sunt descrescătoare în n iar
celelalte liniar crescătoare. În concluzie, dacă vom aduce toată cantitatea într-o singură tranşă vor fi
foarte mari costurile de stocare iar dacă vom aduce de foarte multe ori câte foarte puţin vor fi foarte
mari cheltuielile cu lansarea. Soluţia optimă n* va fi deci foarte probabil undeva între 0 şi N. Pentru
a o determina facem tabloul de variaţie al costului total în funcţie de n pe intervalul (0,N].
Calculăm derivata costului total:

cl ⋅ N c S ⋅ T 2 ⋅ cl ⋅ N
C ′T = − + care are zerourile: n1,2 = ± ⇒
n2 2 cS ⋅ T

2 ⋅ cl ⋅ N
n1 = − ∉ (0, N ]
cS ⋅ T
2 ⋅ cl ⋅ N 2 ⋅ cl ⋅ N c N ⋅T
n2 = ∈ (0, N ] ⇔ ≤N⇔ l ≤
cS ⋅ T cS ⋅ T cS 2

În concluzie:

cl N ⋅T N ⋅T
a) dacă ≥ adică dacă costul de lansare este de mai mult de ori mai mare
cS 2 2
decât costul de stocare tabloul de variaţie va fi:
n 0 N
CT’(n) - - - - - -
CT(n) T⋅N
cl + c S ⋅
2

şi deci se va face o singură aprovizionare la începutul perioadei T în care se va aduce toată


T⋅N
cantitatea N, costul total fiind de cl + c S ⋅ .
2
c N ⋅T
b) dacă l < obţinem tabloul:
cS 2
2 ⋅ cl ⋅ N
n 0 N
cS ⋅ T
CT’(n) - - - - - 0 + + + +
CT(n) 2 ⋅ cl ⋅ c S ⋅ T ⋅ N

N c ⋅T ⋅ N 2 ⋅ cl ⋅ T
în concluzie se vor face = S aprovizionări la intervale de topt = în
n 2 ⋅ cl cS ⋅ N
2 ⋅ cl ⋅ N
care se va aduce câte nopt = , variantă prin care se va face aprovizionarea cu costul
cS ⋅T
total minim posibil:
CT = 2 ⋅ cl ⋅ c S ⋅ T ⋅ N

Obs. Dacă nu se acceptă decât soluţii în numere întregi pentru n sau t se va calcula costul
pentru:
199
Gestiunea stocurilor 119

 2 ⋅ cl ⋅ N   2 ⋅ cl ⋅ N 
n=   şi n =  +1
 c S ⋅ T   c S ⋅ T 
 2 ⋅ cl ⋅ T   2 ⋅ cl ⋅ T 
t=   şi t =   +1
 c S ⋅ N   c S ⋅ N 

alegându-se dintre toate variantele cea mai ieftină. ( [x] = partea întreagă lui x).

2.2. Modelul Willson cu ruptură de stoc

Ipotezele modelului:

1. cerere constantă în timp (cereri egale pe intervale egale de timp);


2. perioadă fixă de aprovizionare (aprovizionarea se face la intervale egale de timp);
3. cantităţi egale de aprovizionare;
4. aprovizionarea nu se face în momentul în care stocul devine 0, admiţându-se scurgerea
unui interval de timp în care depozitul va fi gol şi cererea nu va fi satisfăcută;
5. aprovizionarea se face instantaneu (durata dintre momentul lansării comenzii şi intrarea
mărfii în depozit este zero)

Datele modelului:

− T = perioada totală de timp pe care se studiază stocarea;


− N = cererea totală pe perioada T;
− cs = costul unitar de stocare (costul stocării unei unităţi de marfă pe o unitate de timp)
− cl = costul lansării unei comenzi
− cp = costul unitar de penalizare (pierderea cauzată de nesatisfacerea unei unităţi din
cerere timp de o zi)

Variabilele modelului:

− τ = intervalul dintre două aprovizionări succesive;


− τ1 = durata de timp în care în depozit se află marfă;
− τ2 = durata de timp în care în depozitul este gol;
− n = cantitatea comandată şi adusă la fiecare aprovizionare;
− s = cantitatea maximă de marfă aflată în depozit;
− s(t) = nivelul stocului din depozit la momentul t

Obiectivul modelului

− minimizarea costului total de aprovizionare CT

200
Bazele cercetării operaţionale 120

s(t)

s τ2
n
τ1 T
τ
Figura 2

Relaţiile dintre mărimile modelului

n Ns
Ipoteza 1 ⇒ = =
= cererea pe unitatea de timp ⇒ s(t) = liniară
τ τ1 T
Ipoteza 2 ⇒ τ, τ1, τ2, aceiaşi între oricare două comenzi şi τ = τ1 + τ2.
Ipoteza 3 ⇒ n, s aceiaşi pentru toate comenzile.
Ipoteza 4 ⇒ pe intervalul τ2 depozitul este gol (deci stocul zero); totuşi graficul a fost
desenat în prelungirea perioadei τ1 (deci cu valori negative) deoarece în
această perioadă se presupune că cererea este aceeaşi ca în perioadele în care
există marfă în depozit, nivelul cererii nesatisfăcute fiind privit ca stocul care
s-ar fi consumat dacă aveam marfă în depozit.
Ipoteza 5 ⇒ la sfârşitul unei perioade τ este livrată instantaneu cantitatea n – s în contul
cererii nesatisfăcute în perioada τ2 şi introdusă în depozit cantitatea s.

Rezolvare
Situaţia de mai sus poate fi vizualizată prin trasarea graficului variaţiei stocului în timp din
figura 2:
În figură a fost reprezentată evoluţia stocului dacă toată cantitatea necesară ar fi adusă la
începutul perioadei (graficul de deasupra) sau dacă s-ar aduce câte n unităţi din τ în τ unităţi de
timp (graficul de jos). Se observă că evoluţia este periodică, de perioadă τ. În concluzie vom calcula
costul total cu aprovizionarea calculând costul pe o perioadă şi înmulţind apoi cu numărul de
perioade:

− pe o perioadă avem o lansare, deci un cost cl, cheltuieli de stocare pe o durată τ1, stocul
variind liniar de la s la 0 şi cheltuieli de penalizare, cererea neonorată variind liniar de la
s
0 la n - s. Din acest motiv costul cu stocarea va fi: cs · · τ1 iar costul de penalizare va
2
n -s
fi: cp · · τ2 (În general costul de penalizare, ca şi cel de stocare, se calculează cu
2
τ
formula c p ⋅ ∫ − s (t )dt ).
0

201
Gestiunea stocurilor 121

N T
− numărul de perioade este egal cu =
n τ
s n -s N
− costul total cu aprovizionarea va fi CT = (cl + cs · · τ1 + cp · · τ2 ) ·
2 2 n

În concluzie rezolvarea problemei se reduce la a găsi minimul funcţiei:

s n -s N
CT(n,s,τ,τ1,τ2) = (cl + cs · · τ1 + cp · · τ2 ) ·
2 2 n

unde variabilele n, s, τ, τ1 şi τ2 verifică următoarele condiţii şi relaţii:

Condiţii Relaţii

1. 0<n≤N 1. τ1 + τ2 = τ
2. 0≤s≤n n N
2. =
3. 0<τ≤T τ T
4. 0 ≤ τ1 ≤ τ s n−s
5. 0 ≤ τ2 ≤ τ 3. =
τ1 τ2

În concluzie, din cele 5 variabile doar două sunt independente şi din cele trei relaţii vom
scoate trei dintre ele ca fiind variabile secundare în funcţie de celelalte două ca fiind principale. Fie
cele două variabile principale n şi s. În acest caz avem rezolvând sistemul de relaţii:

T
τ1 = s ⋅
N
T
τ2 = (n - s ) ⋅
N
T
τ = n⋅
N

Acestea se înlocuiesc în expresia costului total şi obţinem în final o problemă de minim a


unei cu două variabile:

s T n -s T N
min CT(n,s) = (cl + cs · · s⋅ + cp · · (n - s ) ⋅ )·
n,s 2 N 2 N n
unde 0 < n ≤ N şi 0 ≤ s ≤ n.

Pentru rezolvare vom calcula derivatele parţiale ale funcţiei CT(n,s) pe domeniul D = {(n,s)/
0 < n ≤ N şi 0 ≤ s ≤ n}. Obţinem:

∂C T (n, s ) T 1 T 1 T N
= cp⋅(n – s)⋅ - [cl + ⋅cs⋅s2⋅ + ⋅cp⋅(n – s)2⋅ ]⋅ 2
∂n n 2 N 2 N n
∂C T (n, s ) T
= [(cs + cp)⋅s - cp⋅n]⋅
∂s n

202
Bazele cercetării operaţionale 122

 ∂C T (n, s )
 =0
Rezolvăm sistemul:  ∂n scoţându-l pe s în funcţie de n din a doua ecuaţie (s =
∂C T (n, s )
 =0
 ∂s
cp 1 csc p N
⋅n) şi înlocuindu-l în prima obţinând: ⋅ ⋅T - cl⋅ 2 = 0 de unde rezultă n2 =
cs + c p 2 cs + c p n
2 ⋅ c l ⋅ (c s + c p ) N 2 ⋅cl ⋅ N cs + cp
⋅ şi în final unica soluţie pozitivă: n0 = ⋅ şi s0 =
csc p T cs ⋅ T cp

2⋅cl ⋅ N cp
⋅ . Această soluţie este soluţia optimă doar dacă 0 < n0 ≤ N şi sunt îndeplinite
cs ⋅ T cs + cp
 ∂ 2 C T (n, s ) ∂ 2 C T (n, s )
 2
(n 0 , s 0 ) > 0, (n 0 , s 0 ) > 0
 ∂ n ∂ 2s
condiţiile de ordinul 2:  2 2
∂ C (n, s ) ∂ 2
C (n, s )  ∂ 2
C (n, s ) 
 T
(n 0 , s 0 ) ⋅ T
(n 0 , s 0 ) −  T
(n 0 , s 0 ) > 0
 ∂2n ∂ 2
s  ∂n ∂ s 

Evident n0 > 0 şi avem:
∂ 2 C T (n, s ) T
(n 0 , s 0 ) = (c s + c p )⋅ >0
∂ 2s n0
∂ 2 C T (n, s )
2
(n 0 , s 0 ) = 2c l + (c s + c p )⋅ s 02 ⋅ T  ⋅ N3 >0
∂ n  N n0
2c (c + c )⋅ T ⋅ N
2
∂ 2 C T (n, s ) ∂ 2 C T (n, s ) ∂ 2 C T (n, s ) 
(n ,
0 0s ) ⋅ (n ,
0 0s ) − 

(n 0 , s 0 ) = l s 4 p >0
 ∂n∂s
2 2
∂ n ∂ s  n0
2 ⋅cl cp
n0 ≤ N este echivalentă cu: ⋅ ≤ N⋅T.
cs cs + c p
2 ⋅cl cp
În concluzie, dacă ⋅ ≤ N⋅T atunci problema admite soluţia optimă:
cs cs + c p
2 ⋅ cl ⋅ N cs + cp
n0 = ⋅
cs ⋅ T cp

2⋅cl ⋅ N cp
s0 = ⋅
cs ⋅ T cs + cp

2 ⋅ cl ⋅T cp
τ1 = ⋅
cs ⋅ N cs + c p

2⋅cl ⋅T  cs + c p cp 
τ2 = ⋅ − 
cs ⋅ N  cp cs + cp 
 
2 ⋅ cl ⋅T cs + c p
τ = ⋅
cs ⋅ N cp
cp
CT maxim = CT(n0,s0) = 2 ⋅ cl ⋅ c S ⋅ T ⋅ N ⋅
cs + cp
203
Gestiunea stocurilor 123

cp
Expresia ρ = măsoară intensitatea lipsei de stoc şi din expresia lui CT maxim se
cs + cp
observă că admiterea lipsei de stoc duce la micşorarea costului total cu stocarea, explicaţia constând
în micşorarea numărului de lansări pentru că, deşi cp este mult mai mare decât cs, cl este şi mai mare
c
decât cp. Dacă cp este mult mai mare decât cs ( s ≈ 0 ) atunci se obţin aceleaşi soluţii ca în modelul
cp
Willson fără ruptură de stoc.
2 ⋅cl cp
Dacă ⋅ > N⋅T atunci se va face o singură lansare (deci n0 = N) şi vom avea s0 =
cs cs + c p
N
n0, τ1 = τ = T şi τ0 = 0 iar CT = cl + cs⋅ ⋅T exact ca şi în modelul Willson fără ruptură de stoc.
2

2.3. Generalizări ale modelului Willson

În practică ipoteza că cs (costul unitar) este acelaşi, indiferent de cantitatea stocată, nu este în
general îndeplinită decât pentru variaţii mici ale stocului sau ale duratei de stocare, fiind mult mai
realistă ipoteza că acesta depinde (invers proporţional) de cantitatea stocată s, de durata de stocare
(direct sau invers proporţional) etc, dependenţele fiind exprimate prin funcţii mai mult sau mai
puţin complicate. Aceleaşi consideraţii sunt valabile şi pentru cp (dependent de mărimea cererii
neonorate sau mărimea întârzierilor). În concluzie putem imagina modele în care: cs = f(s,ts) şi/sau
cp = f(p,tp) unde am notat cu:
− s = cantitatea stocată
− ts = durata de stocare
− p = cererea neonorată
− tp = durata întârzierii onorării cererii

sau şi mai complicate, neexistând evident limite în acest sens. Motivele care ne opreşte totuşi în a
discuta teoretic aceste modele sunt următoarele:

− orice complicare a modelelor anterioare duce la ecuaţii matematice complicate, ale căror
soluţii nu mai pot fi scrise cu operatorii matematici obişnuiţi (de exemplu, chiar dacă am
presupune că unul singur dintre cs sau cp este funcţie liniară în variabilele expuse mai sus
s-ar ajunge în rezolvare la ecuaţii de gradul patru ale căror soluţii încap pe o foaie
întreagă (cititorul poate încerca singur analiza acestor variante); ele ar fi practic de
nefolosit şi oricum scopul studierii gestiunii stocurilor nu este găsirea unor modele cât
mai impunătoare;
− aceste modele mai complicate pot apărea şi pot fi aplicate evident în practică, existând
algoritmi matematici de rezolvare (cel puţin aproximativi) pentru orice model matematic,
dar acesta ar fi doar un pur calcul matematic;
− modelele mai complicate nu ar adăuga nimic ideii teoretice, desprinse din modelul
Willson clasic, că în orice model de stocare există întotdeauna două tipuri de costuri,
indiferent de variabilele de decizie şi anume: unele direct proporţionale şi celelalte invers
proporţionale cu variabilele de decizie, fapt care face ca soluţia să fie una de mijloc, şi nu
o valoare extremă evidentă şi deci banală.
− în foarte multe cazuri un model de stocare presupune şi multe alte variabile, care sunt de
obicei aleatoare, caz în care devine nerealizabilă dorinţa de a găsi o soluţie matematică
simplă. În aceste cazuri sunt chemate spre rezolvare alte ramuri ale analizei matematice şi
economice, cum ar fi, de exemplu, simularea, algoritmii genetici etc.
204
Bazele cercetării operaţionale 124

2.4. Model de producţie – stocare

Presupunem că o unitate economică fabrică un singur tip de produse cu un ritm al producţiei


de β produse în unitatea de timp pentru care are o cerere de N bucăţi într-o perioadă T. Presupunem
că β⋅T > N (adică dacă întreprinderea ar lucra non-stop întreaga perioadă T ar produce mai mult
decât ceea ce poate efectiv să vândă) motiv pentru care perioadele de producţie sunt alternate cu
perioade de oprire a producţiei astfel încât producţia totală să devină egală cu cererea totală N.
Pentru simplificarea calculelor se va presupune că cererea este constantă în timp, adică în fiecare
N
unitate de timp este egală cu α = . Deoarece β > α este evident că pe parcursul perioadelor de
T
producţie se va acumula o cantitate de produse care trebuie stocate într-un depozit, acest stoc
epuizându-se în perioadele în care producţia este oprită. De asemenea este evident că oprirea şi
repornirea producţiei implică o serie de costuri. Pentru formalizarea modelului vom face şi
următoarele ipoteze:
1. duratele ciclurilor de producţie sunt egale între ele;
2. intervalele de staţionare sunt egale între ele;
3. costul stocării este direct proporţional cu cantitatea stocată şi durata stocării cu un factor
de proporţionalitate cs (costul unitar de stocare)
4. costul unei secvenţe oprire-pornire a producţiei este acelaşi pentru toate secvenţele;
5. se admite ruptura de stoc;
6. valoarea penalizării este direct proporţională cu mărimea cererii neonorate şi cu durata
întârzierii cu un factor de proporţionalitate cp (costul unitar de penalizare)
Se cere în aceste condiţii găsirea acelor intervale de producţie şi staţionare care duc la un
cost total pe unitatea de timp minim.
Situaţia de mai sus poate fi vizualizată foarte bine desenând graficul evoluţiei stocului în
timp în figura 3.

Ciclu de s(t)
producţie
deficitului în paralel
cu satisfacerea
cererii curente

s Acumulare
Lichidarea

de comenzi
n neonorate

T
t4 t1 t2 t3
Formarea Consumarea stocului
stocului
Figura 3

În acest desen am notat cu:

− n = cantitatea produsă peste cerere într-un ciclu de producţie;


205
Gestiunea stocurilor 125

− s = cantitatea maximă acumulată în depozit;


− t1 = intervalul de timp în care se formează stocul;
− t2 = intervalul de timp în care se epuizează stocul ca urmare a opririi producţiei;
− t3 = intervalul de timp în care se acumulează comenzi neonorate ca urmare a faptului că
nu se produce şi s-a epuizat stocul;
− t4 = intervalul de timp în care este lichidat deficitului în paralel cu satisfacerea cererii
curente.

Se observă că avem de-a face cu un fenomen ciclic în care o perioadă poate fi aleasă ca
intervalul dintre două porniri succesive ale producţiei. Într-o perioadă costul va fi format din:
− costul unei secvenţe lansare-oprire a producţiei cl;
s
− cheltuieli de stocare pe intervalele t1 şi t2, cs · · (t1 + t2);
2
n -s
− cheltuieli de penalizare pe intervalele t3 şi t4: cp · · (t3 + t4)
2

Costul total unitar va fi:


s
(t 1 + t 2 ) + c p n − s ( t 3 + t 4 )
cl + cs
CT(n,s,t1,t2,t3,t4) = 2 2
t1 + t 2 + t 3 + t 4
şi vom avea de rezolvat problema de minim cu legături:

cl + cs
s
(t 1 + t 2 ) + c p n − s ( t 3 + t 4 )
min 2 2
n,s, t1 , t 2 , t 3 , t 4 t1 + t 2 + t 3 + t 4
n − s s
 t = t = β −α
 4 1
 n −s = s =α
 t t2
 3
 0<s≤n
 0< t , 1≤ i ≤ 4
 i

Pentru rezolvare vom scoatem din sistemul de restricţii patru variabile în funcţie de celelalte,
de exemplu variabilele n, s, t1 şi t4 în funcţie de t2 şi t3 şi le vom înlocui în CT.
Avem:
− s = t2 ⋅ α
− n = (t2 + t3)⋅ α
α
− t1 = t2
β −α
α
− t4 = t3
β −α
şi înlocuind în funcţia obiectiv obţinem:

CT(t2,t3) =
(
2c l (β − α ) + αβ c s t 22 + c p t 32 )
2 β (t 2 + t 3 )

206
Bazele cercetării operaţionale 126

Se calculează ca şi în modelul Willson cu ruptură de stoc derivatele parţiale în t2 şi t3 şi din


condiţia ca ele să se anuleze în punctul de minim obţinem un sistem în t2 şi t3 care are soluţia:

2c l (β − α ) cp 2c l (β − α ) cs
t2 = ⋅ , t3 = ⋅
αβc s cs + cp αβc p cs + c p
şi în continuare:
2αc l cs 2αc l cp
t1 = ⋅ , t4 = ⋅
βc p (β − α ) c s + c p βc s ( β − α ) c s + c p

2αc l (β − α ) cp 2αc l (β − α )  c p c s 
s= ⋅ , n= ⋅ +
βc s cs + c p β (c s + c p )  c s cp 

 α  cp
CTminim = 2 ⋅ α ⋅ c s ⋅ c p 1 − 
 β  cs + c p

Soluţia de mai sus verifică evident şi celelalte restricţii, deci este unica soluţie optimă.
Observaţie Dacă ritmul producţiei este mult mai mare decât intensitatea cererii (β mult mai
α
mare decât α sau echivalent spus ≅ 0 ) se obţine soluţia din modelul Willson cu ruptură de stoc.
β

2.5. Model de gestiune cu preţuri de achiziţie sau cu cheltuieli de producţie variabile

În modelul anterior, cu excepţia cheltuielilor de lansare (presupuse fixe), cheltuielile de


producţie erau ignorate. Acest lucru este valabil dacă cheltuielile de producţie pe unitatea de produs
nu variază cu volumul producţiei iar cererea este satisfăcută în întregime (sau, în modelele de
aprovizionare, cheltuielile de aprovizionare pe unitatea de produs nu variază cu volumul comenzii).
Cheltuielile de producţie depind de volumul producţiei, notat cu q, şi anume printr-o funcţie
nedescrescătoare f(q) care se anulează în origine şi are un salt egal cu cl în aceasta, pentru cheltuieli
de lansare cl ≠ 0 . Uneori funcţia f(q) are şi alte salturi care trebuie luate în consideraţie când se
determină cantitatea optimă q ce trebuie achiziţionată (produsă).
Caz 1 Să presupunem acum că intensitatea cererii de produse este α şi să presupunem că
preţul unitar al produsului este p când volumul comenzii este mai mic decât o cantitate Q şi p' când
volumul comenzii este mai mare sau egal cu Q, cu p' < p.
Atunci f(q) are expresia:
0 q=0

f(q) = c l + p ⋅ q 0 < q < Q
c + p ′ ⋅ q q ≥ Q
 l

Dacă presupunem că nu se admite neonorarea comenzilor şi că aprovizionarea se face


s
instantaneu, atunci ne aflăm în situaţia de la modelul anterior în care t1 = t3 = t4 = 0, = β şi s = q.
t2
Formula cheltuielilor medii pe unitatea de timp va deveni:
1
cs ⋅ q ⋅ t 2 + cl
2 1 β ⋅ cl
CT = = cs ⋅ q +
t2 2 q

207
Gestiunea stocurilor 127

f (q )
Adăugând la acestea şi cheltuielile unitare de producţie obţinem:
t2

1 β ⋅cl
 2 c s ⋅ q + pβ + q 0<q<Q
C(q) = 
1 β ⋅cl
 c s ⋅ q + p ′β + q≥Q
 2 q

Pentru a calcula minimul acestei funcţii vom calcula derivata:

1 β ⋅c
C'(q) = c s − 2 l pentru q ≠ Q
2 q

2⋅ β ⋅cl
care se anulează în q0 = . Punctul de minim este q0 sau Q, punctul în care funcţia nu e
cs
continuă. Rămâne doar să mai comparăm valorile funcţiei C(q) în q0 şi Q:

1 β ⋅ cl
 2 cs ⋅ q 0 + pβ + q 0 < q0 < Q
0
C(q0) = 
1 β ⋅ cl
 cs ⋅ q 0 + p′β + q0 ≥ Q
 2 q0

Dacă q0 < Q atunci soluţia optimă este q0 iar dacă q0 > Q se compară valorile
1 β ⋅cl 1 β ⋅cl
c s ⋅ q 0 + p ′β + şi c s ⋅ Q + pβ + .
2 q0 2 Q
1 β ⋅cl 1 β ⋅cl
Dacă: c s ⋅ q 0 + p ′β + < c s ⋅ Q + pβ + se alege q0 altfel se alege Q.
2 q0 2 Q
Caz 2 Să presupunem acum că intensitatea cererii de produse este α şi să presupunem că
preţul unitar al produsului este p pentru primele Q produse şi este cu p' mai mare pentru produsele
fabricate peste cantitatea Q.
Atunci f(q) are expresia:
0 q=0

f(q) = c l + p ⋅ q 0<q<Q
c + p ⋅ q + p ′ ⋅ (q - Q ) q ≥ Q
 l
şi vor rezulta cheltuielile totale în unitatea de timp:

1 β ⋅cl
 2 c s ⋅ q + pβ + q 0<q<Q
C(q) = 
1 c − ( p ′ − p )Qβ
 c s ⋅ q + p ′β + l q≥Q
 2 q
şi în continuare se găseşte soluţia optimă ca şi la cazul 1.

208
Bazele cercetării operaţionale 128

2.6. Modele de gestiune cu cerere aleatoare

Presupunem că un produs este stocat într-un depozit intermediar, care este aprovizionat
dintr-un depozit mai mare la intervale egale de timp t. Se presupune că cererea pe un interval este
aleatoare cu o distribuţie de probabilitate cunoscută din observaţii statistice:

 0 1 L n L
β =  
 p(0) p(1) L p(n ) L
ea realizându-se uniform pe fiecare interval.
Pentru simplificarea aprovizionării se decide ca la fiecare aprovizionare să se aducă aceeaşi
cantitate de produse, care trebuie aleasă astfel încât, în timp, să se minimizeze cheltuielile.
Cheltuielile legate de aprovizionare pot fi privite cel puţin din două puncte de vedere:

a) cu costuri de stocare şi costuri de penalizare unitare

Presupunem că se cunosc cheltuielile unitate de stocare cs şi cheltuielile unitare de


penalizare cp. Atunci, dacă vom aduce de fiecare dată α bucăţi, vom avea într-o perioadă cu cererea
β ≤ α doar cheltuieli cu stocarea iar într-o perioadă cu β > α atât cheltuieli cu stocarea cât şi
penalizări.
Dacă β ≤ α evoluţia stocului va fi cea din figura 4a) şi costul unitar de stocare va fi:
α + (α − β )
cs ⋅ ⋅t
2  β
C(α,β) = = c s ⋅ α − 
t  2
iar dacă β > α evoluţia stocului va fi cea din figura 4b) şi costul unitar de stocare va fi:
α β −α
cs ⋅ ⋅ t1 + c p ⋅ ⋅ t2
C(α,β) = 2 2
t1 + t 2
α β −α
unde = . Înlocuind t1 în funcţie de t2 din această relaţie în expresia costului unitar vom
t1 t2
obţine:

C(α,β) = cs⋅
α2 (β − α ) 2
+ cp ⋅
2β 2β

β α
α
β

t t1
t2
t

a) b)
Figura 4
209
Gestiunea stocurilor 129

În concluzie, pentru o valoare aleasă a lui α costul mediu va fi o variabilă aleatoare cu


aceleaşi probabilităţi ale evenimentelor ca şi cererea β:

 cs ⋅  α − β  L cs ⋅ α L cs ⋅ α + c p ⋅ (β − α ) 
  2 2

C(α) =   2 2 2β 2β 
 p( β ) L p(α ) L p (β ) 
 

Al alege pe acel α astfel încât, în timp, să se minimizeze cheltuielile este echivalent cu a găsi
acel α pentru care media variabilei aleatoare C(α) este minimă.
Avem:
α
 β α2 ( β − α ) 2 ⋅ p( β )
C (α ) = ∑
β =0
c ⋅  α −  ⋅ p( β ) +
s  2 ∑
β ≥α +1
cs ⋅
2β ∑
⋅ p( β ) +
β ≥α +1
cp ⋅

unde α ∈ R şi valorile C (α ) formează un şir real. Pentru a găsi minimul acestui şir observăm că
funcţia cu valori reale C (α ) este o funcţie de gradul doi cu coeficientul lui α2 pozitiv, deci are un
singur punct de minim local, care este şi global şi deci valoarea α întreagă care dă minimul lui
C (α ) este cea care îndeplineşte simultan relaţiile:

C (α − 1) > C (α ) < C(α + 1)

sistem care, după efectuarea unor calcule simplificatoare, este echivalent cu:

L(α - 1) < ρ < L(α)


unde:
 1 p(β ) cp
L(α) = p(β ≤ α) + α + 


2  β ≥α +1 β
iar ρ=
cs + c p
.

Practic, pentru găsirea lui α vom calcula toate valorile lui L(α) într-un tabel ca cel de mai
jos şi vom alege acel α pentru care se obţine valoarea lui L(α) imediat superioară lui ρ.

1 p( β ) p( β )  p(β )

1
α β p(β) p(β ≤ α) α +
2 β β ≥α +1
β 
α +  ∑
2  β ≥α +1 β L(α)
0 0 p(0)
1 1 p(1)
2 2 p(2)
M M M

În final, pentru α0 găsit, se calculează costul mediu minim C (α 0 )

Generalizări

Caz 1 Sunt situaţii în care cererea de produse se poate situa într-un interval foarte mare
(produse de valoare mică), caz în care calcularea probabilităţilor pentru fiecare valoare a cererii ar
cere un efort prea mare, acesta nefiind justificat şi prin faptul că probabilitatea pentru o anumită
cerere este practic aceeaşi pentru un întreg interval de valori din vecinătatea acesteia. Din acest
motiv se împart valorile cererii în intervale egale, se presupune că cererile din fiecare interval au
210
Bazele cercetării operaţionale 130

aceeaşi probabilitate de manifestare şi vom avea de estimat doar atâtea probabilităţi câte intervale
posibile există (sau se presupune că numai anumite valori ale cererii sunt posibile, de exemplu
mijloacele acestor intervale).
Cererea este o variabilă aleatoare de forma:

 [a , a + l ) [a + l , a + 2l ) L [a + (n - 1)l , a + nl ) L
β =  
 p1 p2 L pn L
sau:

a+
l
a+
3l
L a+
(2n − 1)l L
β=  
 2 2 2 
 1p p2 L p(n ) L

unde a este valoarea minimă a cererii iar l lungimea intervalelor. Vom presupune În acest caz costul
mediu va avea forma:

α
 β l α2

l (β − α ) ⋅ p(β )
∞ 2


C (α ) = l ⋅ c ⋅ α −  ⋅ p(β ) +
β =0
s  2 2 β =α +l β∑
c s ⋅ ⋅ p(β ) +
2 β =α +l
cp ⋅
β ∑
iar minimul acesteia va fi dat de acea valoare α0 pentru care:

p(β )

cp  l
L(α0 – l) <
cs + c p
< L(α0) unde L(α) = p(β β α) + α + 
 2  β =α + l β ∑

Caz 2 Sunt de asemenea cazuri când cererea poate lua valori într-o mulţime continuă, fiind
o variabilă aleatoare continuă cu densitatea de repartiţie f(β). În acest caz valoarea medie a costului
este:

α
 β ∞α2 ∞ (β − α )2 f (β )dβ
C (α ) = c s ⋅ ∫
0
α −  ⋅ f (β )dβ + c s ⋅
 2 ∫ α 2β
f (β )dβ + c p ⋅ ∫
α 2β

care este o funcţie continuă în α. Pentru rezolvare vom deriva această funcţie (folosind şi formula
de derivare a integralelor cu parametru:

 b( y )  b( y )
 ∫
 f ( x, y ) =
 ∫
f y/ ( x, y ) + b ′( y ) ⋅ f (b( y ), y ) − a ′( y ) ⋅ f (a ( y ), y )
a ( y )  a( y )
fiind îndeplinite condiţiile care permit aplicarea acesteia.) şi apoi vom găsi punctul în care se
anulează aceasta: α0 = soluţia căutată.

b) cu pierderi

Presupunem că cheltuielile de stocare sunt neglijabile. În acest caz pentru fiecare piesă
stocată peste cererea manifestată se face o cheltuială inutilă c1 iar pentru fiecare piesă lipsă, în cazul
unei cereri mai mare decât stocul, o penalizare c2 (în general c2 > c1). În acest caz, costul mediu va
fi:

211
Gestiunea stocurilor 131
α ∞
C (α ) = c 1 ⋅ ∑ (α − β )⋅ p(β ) + c 2 ⋅
β =0
∑ (β − α ) ⋅ p(β )
β =α +1

Valoarea α întreagă care dă minimul lui C (α ) este cea care îndeplineşte simultan relaţiile:

C (α − 1) > C (α ) < C(α + 1)

sistem care, după efectuarea unor calcule simplificatoare, este echivalent cu:

cp
p(β ≤ α - 1) < < p(β ≤ α)
cs + c p

din care va fi aflat αoptim şi apoi C (α optim ) .

Observaţie. Şi în acest caz se pot analiza variantele cu cerere împărţită în intervale sau cu
cerere continuă, cazuri care sunt lăsate ca exerciţii cititorului.

3 Modalităţi practice de aplicare a modelelor teoretice

3.1. Modelul S-s

Gestiunea de tip S-s sau cu două depozite se caracterizează prin faptul că reaprovizionarea
se face în momentul în care nivelul curent al stocului a atins o anumită valoare notată generic cu
“s”. Acest lucru este echivalent unei gestiuni cu două depozite, în cadrul căreia reaprovizionarea se
face în momentul în care primul depozit s-a golit. În perioada de reaprovizionare (de avans)
consumul se va realiza din cel de-al doilea depozit, care joacă rolul stocului de siguranţă.
În acest model considerăm:

• cererea totală pentru perioada T este R, aleatorie;


• costul stocării este cS;
• costul lansării unei comenzi de reaprovizionare este cL;
• termenul de livrare τ poate fi:

a) neglijabil; în acest caz obţinem costul total pentru intervalul T ca fiind:

Rc L cS
C= + q,
q 2

unde q reprezintă cantitatea de reaprovizionat.

b) cvasiconstant. Fie nivelul minim de reaprovizionare Ns; când stocul atinge acest nivel
se lansează o comandă de q piese. Mărimile date sunt: T, τ, R, cS, cL şi ne propunem să determinăm
pe Ns şi pe q astfel încât costul stocului pentru perioada T să fie minim. O metodă aproximativă
constă în a admite că ritmul mediu al cererii este constant; în acest caz optimul cantităţii q0 este
independent de Ns:
212
Bazele cercetării operaţionale 132

2R cL 2T c L
q0 = T0 = C 0 = 2 RTc L c S
T cS R cS
Dacă τ este durata medie a termenului de reaprovizionare (cu o abatere medie pătratică
mică) se va evalua legea de probabilitate a cererii pentru acest interval de timp.
Fie Fτ (r) probabilitatea cererii de r produse în intervalul τ: Fτ (r) = P(R ≤ r) = probabilitatea
cumulată.
Impunem condiţia ca probabilitatea epuizării stocului să fie mai mică sau egală cu valoarea
dată α (0 ≤ α < 1); α reprezintă probabilitatea de penurie.
Trebuie să avem: 1 - Fτ (r) = α. Fie Q soluţia ecuaţiei: 1 - Fτ (r) = α, de unde rezultă Q =
Ns.
Această metodă este aproximativă, deoarece implică ipoteze de lucru distincte pentru
stocurile fiecărui depozit. Calculele pot fi efectuate fără ipoteze restrictive cu metoda Monte - Carlo
(nu face obiectul lucrării de faţă).

3.2 Metoda A.B.C.

Metoda A.B.C. este un procedeu rapid pentru analiza aprovizionării şi gestiunii economice a
materialelor. Această analiză clasifică mărfurile achiziţionate în funcţie de valorile de aprovizionare
ale acestora şi de ponderea achiziţiilor. Prin aceasta pot fi văzute punctele de plecare pentru
realizarea unei politici raţionale a achiziţiilor; pe aceasta se pot baza mai multe măsuri, începând cu
simplificarea procedeelor de comandă, până la numărul de salariaţi folosiţi în depozite.
Factorul esenţial în folosirea metodei A.B.C. constă în alegerea unui criteriu corespunzător
pe baza căruia se efectuează împărţirea materialelor în cele trei grupe A, B, C. Un asemenea criteriu
poate fi valoarea de consum a materialului dat, în timpul stabilit, valoarea specială a materialului cu
privire la folosirea lui în producţie, provenienţa din import etc.
O dată criteriul ales şi împărţirea în grupe efectuată, metoda A.B.C. poate fi utilizată în
diferite domenii ale gestiunii stocurilor:

Controlul selectiv al stocurilor

Metoda A.B.C. permite o gestiune selectivă a stocurilor.


Stocurile tampon ale articolelor de valoare mare sunt menţinute la un nivel destul de mic.
Aceste articole trebuie să fie supuse unui control de gestiune foarte strâns din partea personalului
aprovizionării (articolele de mare valoare sunt adesea gospodărite cu ajutorul unui sistem de
reaprovizionare periodică şi dacă intervalele sunt suficient de frecvente, un stoc tampon este mai
puţin necesar).
Această metodă dă o atenţie mai mică articolelor de valoare mică, a căror epuizare se evită
prin asigurarea unor stocuri tampon.
Cu ajutorul metodei A.B.C. se pot reduce investiţiile în stocuri, micşorând în acelaşi timp
riscurile de epuizare.
Din analiza structurii materiale a unităţilor economice rezultă că valoarea mare în stoc este
deţinută de un număr relativ mic de materiale, care nu numai că influenţează direct volumul de
mijloace circulante atras, dar joacă şi rolul principal în desfăşurarea procesului de fabricaţie.
Stocurile sunt împărţite în trei clase:

clasa A: în care intră articolele cu valoare mare reprezentând cantitativ 10 % din stoc şi 70
% valoric;
clasa B: în care intră articole reprezentând 20 % atât cantitativ cât şi valoric;

213
Gestiunea stocurilor 133

clasa C: în care intră articole ce reprezintă cantitativ 70 % din stoc şi valoric 10 %.

CLASA PONDEREA NUMERICĂ PONDEREA VALORICĂ


A 10 70
B 20 20
C 70 10

Gruparea materialelor în funcţie de ponderea lor valorică în stocul total, pe baza datelor din
tabelul de mai sus, se prezintă într-o formă expresivă în “graficul de evoluţie al curbei valorilor
cumulate”:
Pondere
valorică

% 100

90

70 C
B

A
10 30 100 Pondere
numerică
%
Datorită importanţei lor pentru procesul de fabricaţie şi datorită influenţei asupra volumului
de mijloace circulante, fiecare grupă se va aborda diferenţiat, atât din punct de vedere a
metodologiei de stabilire a stocurilor cât şi din punct de vedere al conducerii şi desfăşurării
procesului de stocare ca atare.
Deci, metoda A.B.C., pe lângă că oferă o politică diferită pentru articolele din categoria mai
scumpă, permite şi utilizarea unor metode de gospodărire diferită.
Întrucât în categoria A sunt puţine articole, se poate controla zilnic nivelul stocurilor, pentru
a observa variaţia cererii şi a supraveghea de aproape respectarea termenelor de către furnizori. Cu
alte cuvinte, se înlocuieşte o parte din stocul tampon de articole scumpe printr-un control al
gestiunii mai strâns. Această decizie este eficientă întrucât ea aduce la o reducere apreciabilă a
investiţiilor în stocuri.
Se vor folosi, deci, modele economico-matematice exigente, care vor avea în vedere
elemente (factori) concrete ce condiţionează nivelul stocurilor şi care asigură constituirea lor la
dimensiuni cat mai mici, determinând creşterea vitezei de rotaţie a mijloacelor circulante la maxim.
Pentru materialele din categoria C se pot folosi procedee mai puţin exigente (chiar cu
caracter statistic) şi care vor avea în vedere factorii cu acţiune hotărâtoare în optimizarea proceselor
de stocare (cheltuielile de transport, sursa de provenienţă etc.).
Cu articolele din categoria B se poate adopta o politică intermediară, exercitând un oarecare
control, dar baza rămâne tot stocul tampon, spre deosebire de politica dusă pentru categoria A. La
articolele mai ieftine este mai eficient să se suporte sarcina stocurilor, decât să se plătească salariile
personalului care ar fi indispensabil pentru mărirea controlului.
Pentru grupa B se pot aplica două soluţii:

a) stabilirea de modele distincte pentru dimensionarea stocurilor de materiale din această


grupă cu un grad de exigenţă mediu;
214
Bazele cercetării operaţionale 134

b) folosirea pentru materialele care, ca pondere valorică, tind către grupa A de importanţă, a
modelelor precizate pentru această din urmă grupă, iar pentru materialele ce tind ca
valoare către grupa C a modelelor specifice acestora.

Viabilitatea unui sistem de gestiune a stocurilor este determinată, în general, de felul în care
acesta răspunde unor cerinţe de bază, cum ar fi:

• gradul ridicat de utilitate practică;


• adaptabilitatea la utilizarea mijloacelor electronice de calcul;
• supleţea şi operaţionalitatea în derularea şi adaptarea proceselor de stocare;
• aria de cuprindere mare;
• concordanţa cu fenomenele reale ale procesului de formare şi consum a stocurilor;
• reducerea la minim a imobilizărilor de resurse materiale şi creşterea vitezei de rotaţie a
mijloacelor circulante ale agenţilor economici;
• cheltuielile de conducere, organizare şi desfăşurare a proceselor de stocare cât mai mici.

Analizat din aceste puncte de vedere sistemul A.B.C. răspunde în mare măsură cerinţelor.
Acest sistem aplicat la gestiunea stocurilor are în vedere, în primul rând reducerea imobilizărilor la
materialele de bază şi care se consumă în cantităţi mari, aspect asigurat prin exigenţa metodologică
de dimensionare a stocurilor şi de urmărire a derulării proceselor de stocare.

3.3. Strategia IMPACT

IMPACT (Inventory Management Program and Control Techniques) este considerat ca un


model eficient de stabilire a stocurilor de siguranţa. Este o metodă de depozitare economică,
adaptată cerinţelor calculatoarelor electronice. Acest model a fost dezvoltat de IBM.
Estimarea necesarului se face prin extrapolarea valorilor din trecut. Influenţele conjuncturale
şi sezoniere sunt luate în calcul prin metoda de nivelare exponenţială.
Stocul de siguranţă se determină cu ajutorul calculului probabilităţilor.
Conform metodei IMPACT, sortimentelor din depozit se împart în trei grupe:

1. produse cu desfacere mare (vitale);


2. produse cu desfacere mijlocie (importante);
3. produse cu desfacere redusă ( obişnuite).

Mărimea stocului de siguranţă depinde de precizia estimării necesităţilor (cererii). Cu cât va


fi apreciată mai precis în prealabil cererea, cu atât va fi mai mic stocul de siguranţă.
Pentru a putea aplica metoda IMPACT sunt necesare: cunoaşterea cererilor ri (i = 1, 2,..., T),
pe T intervale de timp şi calculul abaterii medii pătratice σ.
Pentru determinarea stocului de siguranţă, metoda IMPACT foloseşte următorii indicatori:

a) cererea medie (necesarul mediu)

1 tT
r= ∑ iri ,
T i =1
(V.3.1)

unde T este numărul de intervale de timp cercetate;


ri este cererea în intervalul i, i = 1, 2,..., T;
b) MAD (Mean Absolut Deviation) reprezintă abaterea absolută de la medie a cererilor, ca
unitate de măsură a “împrăştierii” valorilor efective în jurul valorii medii.

215
Gestiunea stocurilor 135

1 T
MAD = ∑ i ri − r .
T i =1
(V.3.2)

MAD se determină ca valoare medie a valorilor absolute ale abaterilor de la cererea medie.
c) coeficientul de siguranţă exprimă potenţialul de livrare al furnizorilor. Coeficientul de
siguranţă (K) se stabileşte pe bază de tabele ale funcţiei normale, în cadrul căreia sunt date valorile
lui K, corespunzător diferitelor niveluri ale potenţialului de livrare al furnizorilor.
Potenţialul de livrare (Z) exprimă gradul de satisfacere de către furnizor a unei comenzi.
Acest potenţial de livrare se mai numeşte grad de deservire sau nivel de serviciu.
Potenţialul de livrare (Z) se determină după relaţia

C LE
Z= , (V.3.3)
C LC

unde CLE este cantitatea livrată efectiv;


CLC este cantitatea ce trebuie livrată conform comenzii.
Rezultă 0 < Z < 1; Z = 0 înseamnă că se înregistrează lipsa materialelor în stoc, fără o posibilitate
eficientă de acoperire;
Z = 1 înseamnă că avem de-a face cu un serviciu perfect de servire din partea furnizorilor.
Relaţia de determinare a potenţialului de livrare se poate exprima şi sub alte forme, ca de
exemplu:

N UC − N UL N
1. Z = = 1 − UL , (V.3.4)
N UC N UC
unde NUC reprezintă numărul de unităţi (bucăţi) comandate;
NUL reprezintă numărul de unităţi (bucăţi) lipsă.

N ZT − N ZL N
2. Z = = 1 − ZL , (V.3.5)
N ZT N ZT

unde NZT reprezintă numărul total de zile lucrătoare din perioada de gestiune;
NZL reprezintă numărul de zile cu lipsă de stoc.
Când un produs se fabrică din mai multe materii prime, care intră simultan în consum,
potenţialul de livrare se calculează în funcţie de necesitatea prezenţei în acelaşi moment în depozit a
tuturor materiilor prime care concură la obţinerea lui.
Stocul de siguranţă se calculează după formula:

NS = K ⋅ MAD

Între potenţialul de livrare şi costul stocării necesitat de constituirea şi deţinerea stocului de


siguranţă există o corelaţie strânsă. Creşterea potenţialului de livrare determină creşterea costului
total de stocare, dar într-o proporţie mai mică, ceea ce înseamnă că eficienţa este cu atât mai mare
cu cât potenţialul de livrare se apropie de unu.
Trebuie excluse influenţele întâmplătore, însă luate în considerare influenţele conjuncturale
şi sezoniere. IMPACT foloseşte în acest scop metoda nivelării exponenţiale. Această metodă a fost
dezvoltată de Robert Brown şi este cunoscută sub numele de exponential smoothing.
Valoarea medie a cererii se corectează cu eroarea de previziune şi se stabileşte introducând o
anumită parte a erorii în noua valoare a estimaţiei.

216
Bazele cercetării operaţionale 136

Fie V1 estimarea cererii pentru prima perioadă şi r1 cererea reală a primei perioade.
Estimarea cererii pentru următoarele perioade se obţine din relaţiile:
Vi = Vi-1 + α (ri-1 - Vi-1),
unde α reprezintă constanta de nivelare; α ∈ (0,1) şi determină măsura în care valorile din trecut
sunt cuprinse în estimarea cererii.
Constanta de nivelare trebuie astfel aleasă încât să ţină seama suficient de influenţele
conjuncturale şi sezoniere, eliminând totuşi influenţa întregului.

0<α<1
α = 0 înseamnă că erorile de prevedere care apar nu sunt luate în considerare
α = 1 înseamnă că estimarea corespunde exact cererii din perioada anterioară; toate influenţele
întâmplătoare sunt introduse în estimare.
Abaterea absolută de la medie (MAD) poate fi folosită după aceleaşi principii: abaterea
medie a perioadei i va fi dată de relaţia

MADi = MADi-1 + α(| ri-1 - Vi-1 | - MADi-1).

În acest caz | ri-1 - Vi-1 | este valoarea abaterii precedente faţă de valoarea reală.
Cererea medie (necesarul mediu) şi abaterea absolută de la medie (MAD) vor fi apreciate în
prealabil prin metoda nivelării exponenţială, urmând ca abia după aceea să se determine nivelul
stocului de siguranţă (NS).

217