Documente Academic
Documente Profesional
Documente Cultură
Bazele Cercetrii Operaionale
Bazele Cercetrii Operaionale
MODELAREA MATEMATICĂ
ROLUL EI ÎN CERCETAREA OPERAŢIONALĂ
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
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
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
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ă
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
(∗)
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
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
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:
î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:
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
unde cj (coeficienţii funcţiei obiectiv), aij (coeficienţii restricţiilor) şi bi (termenii liberi) sunt
constate reale.
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:
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
Această formă, deşi nenaturală din punct de vedere economic, este cea care se pretează cel
mai bine la rezolvarea cu metodele algebrei clasice.
Demonstraţie. Într-adevăr:
a) orice problemă de maxim poate fi transformată în una de minim şi reciproc folosind relaţia:
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.
α≤β
α = β ⇔
α ≥β
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
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
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:
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.
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.
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.
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.
xB = B-1⋅b – B-1⋅S⋅xS
32
Bazele cercetării operaţionale 22
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)
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.
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ă:
33
Programarea liniară 23
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:
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
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.
35
Programarea liniară 25
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
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
− 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.
(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
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
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
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ă.
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).
(max ) f = c T ⋅ x
A⋅x = b
x≥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.
(max ) f = c T ⋅ x
A⋅x = b
x≥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.
44
Bazele cercetării operaţionale 34
(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:
(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
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
Pentru expunerea acestui algoritm trebuie introduse noţiunile de bază dual admisibilă şi
soluţie dual admisibilă de bază. Prin definiţie numim:
− 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
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ă.
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
(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.
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)
cB xB xB = B-1b B-1
f(xB) π = c TB ⋅B-1
50
Bazele cercetării operaţionale 40
∆j = c TB ⋅B-1⋅Pj - cj = π⋅Pj - cj
− 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.
f(xB) π = c TB ⋅B-1 ∆k
− 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
(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
0 x3 10 1 0
-M x5 2 0 1
-2M 0 -M
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 ¾
θ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
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
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
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.
Î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ă.
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
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).
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.
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.
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
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:
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.
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)
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:
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
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
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ă.
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.
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ă).
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.
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
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
P1 P3
2 P4
3 4
O
3
P6 2 P5 7
P8
P7
Figura 4.4
122
Bazele cercetării operaţionale 55
1 → OP3
2 → OP7
3 → OP6
4 → OP5
5 → P1P6
6 → P1P2
7 → P4P5
8 → P5P8
123
Elemente de teoria grafurilor 56
x1
y1
x2
y2
ym
xn
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 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:
Definiţia 4: Se numeşte valoare a unui cuplaj suma valorilor arcelor care îl formează.
Î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."
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
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:
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
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.
4
M3 O3
M4 7 O4
3
M5 6 O5
M6 O6
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
Observaţia 1. Dacă dorim un cuplaj de valoare maximă atunci vom calcula la pasul 1
matricea M astfel:
129
Elemente de teoria grafurilor 62
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;
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
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.
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ă.
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.
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ă.
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.
î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
Î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:
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.
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
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
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
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:
138
Bazele cercetării operaţionale 71
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
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.
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
Î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:
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
−
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;
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
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.
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:
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.
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).
Următoarele teoreme fac legătura matematică dintre fluxurile unei reţele şi tăieturile sale:
Φ= ∑ ϕ
( )
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).
Φ= ∑
ϕ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.
Φ= ∑ ϕ
( )
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
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:
ş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:
ş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:
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.
În final, tăietura de valoare minimă este cea în care V = mulţimea nodurilor marcate iar W =
mulţimea nodurilor nemarcate.
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:
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:
− 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ă).
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
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ă.
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:
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:
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
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
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
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
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:
(
t mj = max t im + d ij
(i, j)∈Γ
) , 1< j≤ n
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
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
1 D 6
0 0 6 12 12
B 3 E 4 G
2 2 2 4 6 8 1
Figura 9
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
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:
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
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
t im = t iM , t mj = t M m m
j , t j – t i = dij
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.
− 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
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:
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.
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.
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
MPM CPM
tAB = 0 A B
A B ⇔
A A1 A2
⇔ tAB
tAB B B
tAB A
A
⇔
B1 tAB
B
B2
Figura 14
167
Teoria ordonanţării 94
î 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
168
Bazele cercetării operaţionale 95
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
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 )
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
− 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
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:
Î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
− 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ă.
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)
În general, costul total al unei acţiuni complexe are o structură identică cu acela al unei
investiţii, fiind format din:
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.
Etapa 1
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
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:
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:
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.
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
În cazul problemelor de nivelare după mai multe resurse este posibilă adaptarea algoritmului
Burgess-Killebraw după cum urmează:
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 ij + 4 ⋅ m ij + b ij
t ij =
6
2
b ij − a ij
σ ij2 =
6
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
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
191
Gestiunea stocurilor 111
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.
195
Gestiunea stocurilor 115
196
Bazele cercetării operaţionale 116
Ipotezele modelului:
Datele modelului:
Variabilele modelului:
Obiectivul 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:
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
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).
Ipotezele modelului:
Datele modelului:
Variabilele modelului:
Obiectivul modelului
200
Bazele cercetării operaţionale 120
s(t)
s τ2
n
τ1 T
τ
Figura 2
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
s n -s N
CT(n,s,τ,τ1,τ2) = (cl + cs · · τ1 + cp · · τ2 ) ·
2 2 n
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
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
Î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
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
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
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
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.
β
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
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
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:
C(α,β) = cs⋅
α2 (β − α ) 2
+ cp ⋅
2β 2β
β α
α
β
t t1
t2
t
a) b)
Figura 4
209
Gestiunea stocurilor 129
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 ⋅
2β
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:
sistem care, după efectuarea unor calcule simplificatoare, este echivalent cu:
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
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:
sistem care, după efectuarea unor calcule simplificatoare, este echivalent cu:
cp
p(β ≤ α - 1) < < p(β ≤ α)
cs + c p
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.
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:
Rc L cS
C= + q,
q 2
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ţă).
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:
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
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:
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:
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.
1 tT
r= ∑ iri ,
T i =1
(V.3.1)
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
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
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
Î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