You are on page 1of 78

Reprezentarea i construirea algoritmilor

3-1

Capitolul 3. Reprezentarea i construirea algoritmilor


3.1. Generalit i
3.1.1. Algoritmi
Dup cum se tie activitatea noastr zilnic poate fi algoritmizat n anumite situa ii. Algoritmizm de obicei o activitate n urmtoarele cazuri: volumul de calcul necesar este mare activitatea se repet foarte frecvent rezultatele sunt necesare n foarte scurt timp Construirea de algoritmi i utilizarea calculatoarelor pentru rezolvarea acestora, n alte situa ii dect cele amintite, nu este justificat. n continuarea prezentrii, accentul este pus nu pe anumi i algoritmi pentru rezolvarea diferitelor probleme, ci pe modul cum se reprezint i cum se construete un algoritm pentru rezolvarea unor probleme reale i dificile. De asemenea, ne intereseaz dac exist algoritmi pentru rezolvarea unei probleme, iar dac da, care este cel mai bun algoritm, cu complexitate redus n timp sau cu spa iul de memorie redus. Ce este de fapt un algoritm? Un algoritm reprezint descrierea exact a unei activit i i planificarea n amnunt, pe pai, a realizrii ei. Prin algoritm se n elege deci un sistem de reguli care, aplicat la o anumit clas de probleme de acelasi tip, conduce de la o informa ie ini ial la solu ia final, cu ajutorul unor opera ii succesiv ordonate i unic determinate. O informa ie ini ial pentru care un algoritm este definit se va numi informa ie admisibil, iar totalitatea informa iilor de acest gen constitue domeniul algoritmului, D. De exemplu, pentru algoritmul lui Euclid domeniul este dat de multimea ZxZ a perechilor de numere intregi, iar pentru regula lui Cramer este dat de mul imea matricelor sistemelor nedegenerate de n ecua ii cu n necunoscute.

3-2

Reprezentarea i construirea algoritmilor

Dac o informa ie initial apar ine domeniului D, atunci regulile algoritmului f, dup un anumit numr de pai, determin ntotdeauna informa ia final corespunzatoare. Ca urmare, un algoritm f poate fi definit ca o func ie f:DF, unde prin F s-a notat mul imea informa iilor finale. Sistemul de reguli ce constitue algoritmul f arat efectiv cum poate fi calculat aceast func ie. Caracteristicile algoritmilor Un algoritm trebuie s se caracterizeze prin urmtoarele : - generalitate- algoritmul este conceput astfel nct s se rezolve toate problemele din clasa respectiv. De exemplu, nu se concepe un algoritm pentru nmul irea matricelor A2,3 i B3,5 ci pentru nmul irea oricror dou matrice Am,n i Bn,k; - finititudine- numrul de transformri intermediare aplicate informa iei admisibile (ini iale) pentru a ob ine informa ia final (solu ia) este finit. Ca exemplu, s consiredrm algoritmul lui Euclid. Dac se consider dou numere intregi a i b i se noteaz r0=a, r1=b, iar qk este ctul, opera ia de mpr ire cu rest pentru determinarea celui mai mare divizor comun al celor dou numere a si b, se aplic pn cnd identitatea rk=qk*rk+1+rk+2, k=0,1,2,...conduce la rk+2=0; - unicitatea- toate transformrile intermediare fcute asupra informa iei ini iale sunt unic determinate de regulile algoritmului, acesta trebuind s precizeze ordinea strict a transformrilor. De asemenea, regulile precizeaz n ce caz se ob ine informa ia final, dup care activitatea algoritmului se ntrerupe. - automatism- odat construit, algoritmul se aplic n mod automat fr a mai fi necesar demonstrarea corectitudinii sale. Subalgoritmi Orice algoritm de rezolvare a unei probleme sau aplica ii poate fi descompus ntr-o combina ie de algoritmi cu structura mai simpl numi i subalgoritmi. Compunerea sau combinarea acestora se poate face n dou feluri : - compunerea prin suprapunere a algoritmilor f1 si f2 este algoritmul f=f1(f2) in care f2 face parte din etapa de calcul a algoritmului f1. - compunerea prin sucesiune a algoritmilor f1 si f2 este algoritmul f=f1*f2 n care informa ia final a lui f1 face parte din domeniul algoritmului f2.

Reprezentarea i construirea algoritmilor

3-3

Algoritmul compus f este numit algoritm principal in raport cu f1 si f2 care se vor numi subalgoritmi sau proceduri. Evident c pot exista situa ii n care f este rezultatul unei compuneri prin suprapunere i succesiune sau o secven de suprapuneri / succesiuni.

3.1.2. Clase de algoritmi


Din punct de vedere al structurii i al formei de prezentare algoritmii pot fi clasifica i, n: liniari, cu ramifica ii i ciclici. Algoritmii cu ramifica ie presupun o anumit testare a ndeplinirii unor condi ii n urma crora trebuie s se ia o anumit decizie (da sau nu, adevrat sau fals). n cadrul unui algoritm ciclic (iterativ) se alege o aproxima ie ini ial a solu iei care este mbunt it prin iterare, astfel nct irul de solu ii ob inute s convearg ctre solu ia problemei considerate. Din punct de vedere al cantit ii de informa ie prelucrat i al volumului opera iilor de calcul algoritmii pot fi mpr i i n dou categorii: - algoritmi numerici - algoritmi de prelucrare n ultima perioad, progresele din domeniul tehnologiei informa iei impun luarea n considerare, a unor tipuri specifice de algoritmi necesari pentru prelucri de imagini i prelucrarea sunetelor. Algoritmi numerici Algoritmii numerici reprezint o categorie important de algoritmi pe care o regsim n rezolvarea problemelor tehnice, tiin ifice, de optimizare etc. cu volum de date redus i cu volum mare de calcul. Din punct de vedere al realizrii i programrii lor, aceti algoritmi prezint unele caracteristici care i diferen iaz fa de o alt categorie deosebit de important ce apare n rezolvarea problemelor economice: algoritmii de prelucrare. n general, algoritmii numerici au urmtoarele caracteristici mai importante: - preponderen a datelor numerice fa de cele nenumerice; - structurarea datelor n masive: vectori, tablouri, matrici etc; - utilizarea cu preponderen a memoriei interne; - preponderen a opera iilor de calcul; - iterativitatea procesului de calcul;

3-4 -

Reprezentarea i construirea algoritmilor realizarea programelor n limbaje orientate spre procedur: FORTRAN, PL/1, PASCAL , C, C++, DELPHI etc.

O categorie aparte de algoritmi numerici este constituit de algoritmii recursivi. Recursivitatea algoritmilor poate fi definit astfel: Fie urmtoarea secven : u1,u2,u3,...un de numere reale / complexe sau, mai scurt ,{un}, n 1. Dac pentru () k N n calculul tuturor numerelor {un}, n 1 se folosete rela ia: un+k=a1un+k-1+a2un+k-2+...+akun, (1) atunci irul este numit secven recursiv de ordin k iar rela ia este numit rela ie recursiv de ordin k. O secven recursiv este caracterizat prin fiecare dintre termenii si, prin valoarea de nceput (start) i prin rela ia recursiv care folosete la determinarea unui termen oarecare. Pentru progresia geometric cu u1=a, u2=a*q, ... un=a*qn-1, rela ia recursiv este un+1=q*un care este rela ie recursiv de ordinul nti. irul de numere 1,1,2,3,5,8,13,21,... reprezint valorile func iei Fibonacci f : N N, definit astfel:

f(n)

, daca n = 0 sau 1 f(n - 2) + f(n - 1), in rest

n = 1
(2)

Rela ia un+2=un+1+un cu u1=1, u2=1 este rela ia recursiv de ordinul doi pentru ob inerea irului Fibonacci. Defini iile recursive se pot clasifica dup modul n care descriu procesul calcului valorilor func iilor pe care le definesc. Cea mai simpla form este recursivitatea liniar definit prin:

if c(x) then g(x) f(x) = else (f(h(x)), f(x)) endif

(3)

Un exemplu ilustrativ de recursie liniar l constitue func ia factorial f : N => N,

Reprezentarea i construirea algoritmilor daca n = 0 1 f(x) = n * f(n 1) daca n > 1

3-5

(4)

Al doilea tip l constituie recursiile n cascad care sunt de forma:

if c(x) then g(x) f(x) = else (f(h(x)), f(i(x))) endif

(5)

Ca exemplu al acestui tip de recursie este func ia Fibonacci din (2). Al treilea tip de recursii este cel mpachetat, de forma

if c(x) then g(x) f(x) = else (f(...f(...f(...)...)...)...) : endif


Func ia Manna-Pnueli definit prin:

(6)

if x > 10 then x 1 f(x) = else f(f(x + 2)) endif

(7)

constituie un exemplu de recursie neliniar de tip mpachetat. Toate formulele recursive men ionate definesc o singur func ie. Exist ns defin ii pentru sisteme de func ii recursive. Un exemplu concret de recursivitate liniar de ordinul I este problema calculului dobnzii compuse. Se consider un salariu net de 5.500.000 lei care este depus lunar n contul unei persoane ntr-o perioad de n luni. Presupunem c dobnda pe an este de 18% cu capitalizare lunar de 1,5% i c asupra contului nu se efectueaz nici o alt opera ie. n acest caz func ia recursiv pentru calculul dobnzii compuse i al soldului contului este:

3-6 S0=5.500.000

Reprezentarea i construirea algoritmilor

Sk=S0+(1+1.5)*Sk-1 , pentru k=1,n Dk= Sk- S0 , pentru k=1,n unde S0 - suma depus lunar Sk soldul contului n luna k Dk dobnda n luna k Algoritmii de prelucrare Algoritmii de prelucrare reprezint o clas important de algoritmi lega i de opera iile executate asupra structurilor de date. Sunt caracteriza i de prelucrarea unui volum mare de date asupra crora se efectuaz un volum relativ redus de calcule. Aceti algoritmi se refer att la proiectarea programelor, ct i la realizarea schemelor logice corespunztoare i prezint o serie de particularit i: n algoritmii de prelucrare intervin, de obicei, mai multe fiiere care servesc pentru intrare, ieire sau intrare/ieire n programul respectiv. Specificul prelucrrii datelor implic specializarea programelor, deci i a algoritmilor. Distingem deci programe de creare fiiere, de actualizare, de validare, de sortare etc. Rezolvarea problemelor de prelucrare a datelor solicit, n general, un sistem de programe i deci, rezult necesitatea proiectrii acestuia pentru a pune n eviden structurarea pe programe, necesarul de date, informa iile de ieire, etc. Datorit posibili ilor de structurare a datelor care implic o structurare adecvat a opera iilor, algoritmii de prelucrare au o structur modular (procedural) compus dintr-o procedur general numit monitor i cel pu in una din procedurile: de nceput algoritm; de sfrit algoritm; de nceput fiier; de cheie eronat; de acces la fiier; de prelucrare etc. Ca opera ii de prelucrare fiiere se disting: crearea, exploatarea, actualizarea, sortarea, fuzionarea, ventilarea, interclasarea, reorganizarea, inventarierea, tergere etc., pentru fiecare dintre acestea existnd programe de firm sau utilizatorul i poate concepe propriile programe (deci i algoritmi) de prelucrare. Prelucrarea fiierelor se realizeaz la nivel de nregistrare ceea ce conduce la construirea de algoritmi cu structuri repetitive pentru tratarea ntregului fiier sau a unor mul imi de nregistrri ale acestuia. n general, n astfel de probleme intervine un fiier conducator (coordonator).

Reprezentarea i construirea algoritmilor

3-7

Datorit faptului c astfel de probleme implic un volum mare de date, se creaz module (programe) specializate n validarea datelor i/sau cutarea datelor.

Realizarea structurat a algoritmilor cu fiier conductor pune n eviden existen a a trei grupe de opera ii: in iale, de prelucrare i finale. Opera iile in iale se refer la: deschiderea fiierelor, ini ializarea unei variabile asociate sfritului de fiier conducator (SF), citirea primei nregistrri din acest fiier, afiarea capului de tabel, ini ializarea unor date de lucru etc. Opera iile de prelucrare asupra fiierului conductor se refer la prelucrarea nregistrrii anterior citite i citirea unei noi nregistrri. Opera iile finale corespund ncheierii unor tabele, afirii unor statistici, nchiderea fiierelor etc. Dezvoltare progresiv a modulelor referite de modulul monitor urmeaz ordinea propus mai nainte. Specificul diferitelor tipuri de probleme se va manifesta prin dezvoltarea diferit a procedurii de prelucrare a nregistrrii anterior citite din fiierul conductor.

3.1.3. Analiza algoritmilor


Construirea algoritmilor nu se ncheie odat cu elaborarea i cu demonstrarea corectitudinii acestora, ci se continu cu analiza lor. Analiza unui algoritm presupune studiul eficien ei sale, cel pu in din punct de vedere al timpului cerut pentru execu ia sa i al necesarului de memorie. Necesitatea analizei algoritmilor deriv din urmtoarele dou aspecte: Necesitatea de a elabora algoritmi ct mai performan i n condi iile abordrii cu ajutorul calculatorului a unor probleme din ce n ce mai complexe; Necesitatea de a ne asigura c algoritmii construi i nu vor fi elimina i de practic datorit timpului mare i/sau spa iului de memorie mare necesare execu iei. Analiza algoritmilor const deci din: determinarea memoriei suplimentare necesare; determinarea timpului necesar execu iei algoritmilor; determinarea optimalit ii algoritmului. n ceea ce privete memoria suplimentar necesar execu iei algoritmului, datorit progreselor din ultimul timp din domeniul IT, importan a acesteia

3-8

Reprezentarea i construirea algoritmilor

este redus fa de aceea a timpului de execu ie, spa iul de memorie nemaifiind o problem, n anumite limite, evident. Timpul necesar execu iei algoritmului este, la rndul su, diferit pentru seturi diferite de date, mai ales n func ie de volumul datelor din fiecare set, asupra crora se aplic opera iile con inute n algoritm. Din acest motiv timpul de execu ie poate avea una din urmtoarele semnifica ii: timpul n cazul cel mai defavorabil; timpul mediu de execu ie, ca raport ntre suma timpilor necesari pentru toate seturile de date posibile i numrul acestor seturi. n ceea ce privete determinarea optimalit ii algoritmului, aceasta este cea mai dificil problem i foarte rar realizabil. n analiza optimalit ii, are importan criteriul conform cruia judecm algoritmul i care, avnd n vedere cele artate, este,deobicei, timpul de execu ie ntr-una din accep iunile de mai sus. Dar i n aceast privin , datorit vitezei de calcul i performan elor calculatoarelor actuale, problema timpului de execu ie se pune doar pentru valori foarte mari ale numrului de calcule. La rndul su, numrul de calcule este n general variabil n func ie de numrul n al datelor de intrare n algoritm numit i lungimea intrrii n algoritm. Studiul eficien ei algoritmilor pune n eviden deci necesitatea evalurii complexit ii acestora sau, cu alte cuvinte, al ordinului de mrime al complexi ii determinat de timpul de execu ie necesar i de spa iul de memorie, primul factor fiind considerat ca esen ial. Cunoaterea complexit ii i eficien ei algoritmilor depinde, n mare msur, de problema concret supus analizei, ceea ce face posibil, dar nu i facil, clasificarea problemelor i algoritmilor conform acestui criteriu de comparare. Complexitatea problemelor i algoritmilor Complexitatea problemelor i algoritmilor este determinat de timpul de execu ie necesar i de spa iul de memorie ocupat, primul factor fiind considerat esen ial n clasificarea algoritmilor i problemelor. Complexitatea temporal sau complexitatea n timp a programelor deriv din complexitatea algoritmilor care sunt programa i, rar aceasta este n strns legtur cu problema real, concret supus modelrii i rezolvrii.

Reprezentarea i construirea algoritmilor

3-9

Timpul de execu ie este influen at de numrul de opera ii aritmetice i de transfer condi ionat, numr ce depinde de calitatea n a datelor de intrare, sau altfel spus, de lungimea intrrii n algoritm. Fie T(n)-timpul cerut de un algoritm oarecare i fie f(n)-termenul dominant n expresia lui T(n), adic termenul care tinde cel mai rapid spre +. Atunci vom nota T(n)=O(f(n)) i-l vom numi ordin de mrime al complexit ii care exprim faptul c

lim
n

T ( n ) f ( n )

= 1

n general este greu, dac nu chiar imposibil, de determinat o expresie pentru T(n), deci este greu de determinat f(n). Pentru anumi i algoritmi putem fi n una din urmtoarele dou situa ii i deci vom defini ordinul de complexitate n unul din urmtoarele moduri: Se pot determina o valoare minim i o valoare maxim pentru T(n), valori n care termenul dominant f(n) difer doar printr-o constant multiplicativ. Defini ia 1: Spunem c T(n)=O(f(n)) este ordinul de complexitate al unui algoritm dac exist dou numere c1 i c2 precum i n0 astfel nct c1f(n) T(n) c2f(n), ()n n0. n situa ii mai complexe, pentru unii algoritmi se poate determina doar o limit superioar a expresiei timpului necesar.

Defini ia 2: Spunem c T(n)=O(f(n)) este ordinul de complexitate al unui algoritm dac exist dou constante pozitive c,n0, astfel nct T(n) cf(n), ()n n0. n mod evident, se caut cea mai mic func ie f i cea mai mic valoare c. Pentru a ilustra modul de determinare a ordinului de complexitate vom analiza algoritmul de sortare a unui vector folosind arbori binari (metod prezentat n capitolul 2, paragraful 2.2.2). Considernd un vector A(a1, a2, ,an) cu n componente, sortarea prin comparare presupune la prima trecere (n-1) comparri, la a doua trecere (n-2) comparri, .a.m.d. Numrul total de opera ii de comparare care va permite ordonarea cresctoare /descresctoare a componentelor vectorului va fi deci de:
( n 1 ) + ( n 2 ) + ..... + 3 + 2 + 1 = (n 1)n n = 2
2

n 2

3-10

Reprezentarea i construirea algoritmilor

Factorul dominant n acest caz este n2/2 i deci ordinul de complexitate al algoritmului este O(f(n))=O(n2/2). Cunoscnd timpul necesar realizrii unei opera ii de comparare, timpul total de execu ie va fi: T(n)=( n2-n)/2 i, dup cum se observ, dac f(n)= n2/2, atunci:

n T (n ) 2 lim = lim = 1 n n f (n ) n 2 2 Algoritmul considerat se spune c are ordin de complexitate polinomial sau, mai scurt, algoritmul este polinomial, deoarece f(n) este o func ie polinomial n n-lungimea intrrii n algoritm. Posibilii termeni dominan i i importan a lor n calculul ordinului de complexitate rezult i din Fig. 3.1.: n
2

f(n)

n log2n n log2n n2 n3 2n 1 0 0 1 1 2 2 1 2 4 8 4 4 2 8 16 64 16 8 3 24 64 512 256 16 4 64 256 4096 65536 32 5 160 1024 32768 4294967296

Figura 3.1. Valori ale unor func ii uzuale de evaluare a complexit ii

Vom putea da, ca urmare, urmtoarele dou defini ii: Defini ia 3: Un algoritm se numete polinomial dac are o complexitate temporal O(f(n)), unde f(n) este o func ie polinomial n n, lungimea intrrilor. Defini ia 4: Dac un algoritm nu este de complexitate polinomial, atunci el se numete exponen ial; tot exponen iali sunt considera i algoritmii de complexitate nlog n, cu toate c ei nu sunt polinomiali, dar nici exponen iali n sens strict matematic. Men ionm c: practica a impus ca acceptabili numai algoritmii cu comportare n timp polinomial deoarece, chiar pentru valori nu prea mari ale lui n, algoritmii exponen iali devin inutilizabili;

Reprezentarea i construirea algoritmilor

3-11

n acelai timp, pentru valori mici ale lui n, un algoritm exponen ial poate fi mai bun dect unul polinomial; n calculul timpului de execu ie necesar algoritmului, putem considera c toate opera iile elementare ce intervin n algoritm necesit acelai timp.

Pentru a justifica aceste afirma ii vom considera c o opera ie necesit 10-6 secunde pentru a se executa. n acest caz Figura 3.2. furnizeaz timpul de calcul pentru algoritmii polinomiali cu f(n) egal cu n, n2, n3, n5 i exponen iali cu f(n) egal cu 2n,3n, pentru diferite valori ale lungimii n a intrrilor.
N N N2 N3 N5 2n 3n 10 0,0001" 0.0001" 0.001" 0.1" 0.001" 0.059" 20 0.0002" 0.0004" 0.008" 3.2" 1" 38' 30 0.0003" 0.0009" 0.027" 24.3" 17.9" 6.5ani 40 0.0004" 0.0016" 0.064" 1.7' 12.7 zile 38.5 secol 50 0.0005" 0.0025" 0.125" 5.2' 38.7 ani 2*108 secol

Figura 3.2 Timpi de calcul pentru algoritmi polinomiali

Din tabel se observ c: - comparnd viteza de cretere n func ie de n a timpului de execu ie pentru func iile f(n) considerate, constatm c pentru valori ale lui n nu prea mari, timpul de execu ie este inacceptabil n cazul algoritmilor exponen iali care devin astfel inutilizabili; - pentru valori mici ale lui n, un algoritm exponen ial poate fi mai bun dect unul polinomial; astfel, func ia f(n)=2n ne conduce la o valoare a timpului de execu ie mai mic dect n cazul f(n)=n5 pentru n20. - exist algorimi exponen iali care se comport acceptabil pentru rezolvarea majorit ii problemelor particulare, cum este metoda simplex pentru rezolvarea problemelor de programare liniar (metoda este de complexitate exponen ial, dar este eficient n rezolvarea problemelor concrete). Astfel de exemple sunt rare i nu exist o metod care s prevad c un algoritm de complexitate exponen ial este practic acceptabil. Observa ia 1: pentru a justifica faptul c am considerat toate opera iile care intervin ntr-un algoritm cu acelai timp de execu ie, vom lua urmtorul exemplu:

3-12

Reprezentarea i construirea algoritmilor

Presupunem c un algoritm prelucreaz un vector A=(a1, a2, ,an) i c n algoritm intervin dou tipuri de opera ii notate prin (*) i (+). Considerm, de asemenea, c timpul de execu ie al opera iei (*) este de 10.000 mai mare ca al opera iei (+), i c n timp de opera ia (*) se execut de n ori, opera ia (+) se execut de n3 ori.
N Nr opera ii N=1 N=10 N=100 N=200 N=500 (+) n*10000 10.000 10.000 1.000.000 2.000.000 5.000.000 (*) N3 1 1.000 1.000.000 8.000.000 125.000.000

Din tabelul 3.3. se observ c pentru n100 avem n*10.000n3, dar pentru n>100 ob inem n*10.000<n3 sau c
n3 = +. n 10000n lim

Figura 3.3 Timpi de prelucrare pentru opera ii

Rezult deci c, mai ales pentru valori mari ale intrrilor n algoritm, adic ale lui n, este mai important numrul de calcule, de opera ii efectuate, i nu diferen ierea lor pe tipuri, chiar dac timpii de execu ie pentru diferite opera ii difer. Observa ia 2: Nu exist o metod general de deteminare a numrului de opera ii, asfel nct problema complexit ii trebuie rezolvat pentru fiecare program n parte. De exemplu, fie produsul a patru matrice A1, A2, A3 i A4, care au respectiv dimensiunile: (10,20), (20,50), (50,1), (1,100). nmul irea matricelor se poate efectua n mai multe moduri: - Fie ordinea (A1* (A2*( A3* A4))) care necesit 125000 opera ii, deoarece: 50*1*100+20*50*100+10*20*100=125000. - Fie ordinea ((A1* (A2* A3)) *A4) care necesit 2200 opera ii, deoarece: 20*50*1+10*20*1+10*1*100=2200. Rezult deci c timpul de execu ie n cel de-al doilea caz este de aproximativ 60 de ori mai mic dect primul caz. Majoritatea algoritmilor exponen iali constituie variante ale unei enumerri totale a cilor de identificare a solu iilor unei probleme, pe cnd cei polinomiali reprezint rezultatul unei cunoateri detaliate a problemei studiate (de exemplu, metoda backtracking care se va prezenta n

Reprezentarea i construirea algoritmilor

3-13

continuare n acest capitol - conduce la algoritmi exponen iali n cazul n care sunt enumerate toate cile de identificare a solu iei unei probleme). Din acest motiv se spune c o problem este uor rezolvabil sau uoar numai dac s-a elaborat un algoritm polinomial pentru rezolvarea ei. O problem pentru care nu exist un algoritm polinomial se numete dificil. Calitatea algoritmului depinde de polinomialitatea sa i de gradul ct mai mic al polinomului. n ceea ce privete problemele dificile, dificultatea poate avea dou semnifica ii: - Timpul necesar pentru gsirea unei solu ii este exponen ial - Spa iul necesar ob inerii solu iei este att de mare nct nu poate fi exprimat printr-o expresie, mrginit de valoarea unui polinom n lungimea intrrii. Problemele pentru care s-a demonstrat c nu exist algoritmi pentru rezolvarea lor se numesc probleme dificile n sens tare. Problemele dificile se pot mpr i n dou mari categorii: - probleme dificile pentru care exist algoritmi nedeterminiti polinomiali (clasa problemelor NP) - probleme dificile pentru care se poate demonstra c nu pot fi rezolvate cu algoritmi nedeterminiti de complexitate polinomial i care sunt incluse, mpreun cu categoria problemelor pentru care nu exist algoritmi, n clasa problemelor dificile (n sens tare). No iunea de algoritm nedeterminist este preluat prin analogie cu no iunea de main de calcul paralel care este capabil s efectueze un numr orict de mare de calcule independente n mod simultan. Problemele dificile pentru care exist algoritmi nedeterminiti de complexitate polinomial sunt incluse n clasa NP a problemelor dificile nedeterminist polinomiale. Probleme i algoritmi nedeterminist polinomiali(NP) Algoritmii utiliza i n general pentru rezolvarea problemelor sunt determiniti, n sensul c structura lor nu prevede posibilitatea alegerii ntre mai multe ci posibile pentru a ajunge la rezultat. De exemplu, un algoritm backtracking efectueaz calcule pn n momentul cnd se ajunge n situa ia de a alege ntre mai multe alternative.

3-14

Reprezentarea i construirea algoritmilor

Un algoritm nedeterminist este acela n care e permis trecerea necondi ionat dintr-o stare n mai multe stri urmtoare i care poate efectua simultan mai multe calcule independente. Mai exact, un algoritm nedeterminist realizeaz, ori de cte ori ajunge n situa ia de a alege ntre mai multe alternative, orict de multe copii ale sale astfel nct s fie posibil parcurgerea independent a tuturor alternativelor. Dac o copie corespunde unei alegeri ce nu furnizeaz un rezultat, atunci execu ia ei se ntrerupe, dac o copie depisteaz o solu ie a problemei, rezultatele sunt memorate i se ntrerupe parcurgerea tuturor copiilor. Dac s-a ajuns la situa ia n care nici o copie generat anterior nu furnizeaz un rezultat i nici nu mai pot fi generate alte copii, atunci algoritmul semnalizeaz c problema studiat nu are solu ie. Observa ia 3: Nici un sistem de calcul nu se poate comporta nedeterminist un timp nelimitat, ca urmare algoritmii nedeterminiti constituie o no iune abstract care permite s se ignore anumite detalii ale cutrii cu ntoarcere (backtracking), una din consecin e fiind aceea c ei nu con in ntoarceri (reluri). Defini ia 5: Un algoritm se numete nedeterminist polinomial (NP) atunci cnd complexitatea calculelor efectuate de orice copie a sa (deci pe orice drum al arborelui ce descrie ramificrile procesului de cutare a solu iei) este polinomial. n mod analog se definete algoritmul determinist polinomial (P) . Defini ia 6: O problem este NP-dificil dac orice problem din clasa NP se reduce la ea.; o problem este NP-complet dac ea este NP-dificil i n acelai timp apar ine clasei NP. O tratare amnun it a acestor tipuri de probleme i algoritmi este realizat n [GAJ79].

3.2. Reprezentarea algoritmilor


Dup ce un algoritm este elaborat principial el trebuie prezentat ntr-o form accesibil i n mod detaliat. Aceast opera ie este numit reprezentarea algoritmului. Descrierea se poate face n mai multe moduri i anume prin: - limbaj logico-matematic, - limbaje de tip pseudocod,

Reprezentarea i construirea algoritmilor limbaj grafic scheme logice verticale scheme logice orizontale (Chapin), diagrame arborescente (Tabourier sau Mills), tabele de decizie

3-15

Aceste modalita i de reprezentare a algoritmilor pot fi utilizate n orice combina ie, fiecare form avnd avantajele i dezavantajele sale. n continuare vor fi descrise cteva din modalit ile de reprezentare a algoritmilor atat grafice cat i textuale.

3.2.1. Limbajul pseudocod


Limbajul pseudocod este folosit n faza de proiectare a programelor pentru descrierea algoritmilor; el este o alternativ la schemele logice. Limbajul pseudocod nu este un limbaj de programare. Pseudocodul are numeroase variante, practic ele deosebindu-se de la proiectant la proiectant. Chiar la acelai proiectant se pot ntlni varia ii ale formei, existnd n anumite limite impuse de claritatea descrierii algoritmului, libertatea alegerii variantei celei mai adecvate. Toate variantele au ns ca trsturi comune utilizarea enun urilor nestandard, precum i a opera iilor prescrise de programarea structurat. Construc ia de baza a limbajului este propozi ia, un algoritm fiind constituit ca o succesiune de propozi ii. Propozi iile sunt de tipul: propozitii simple, prin care se exprim opera ii ce se vor codifica apoi direct ntr-un limbaj de programare (de exemplu: deschide fisier, citeste inregistrare din fisier etc.); propozi ii complexe, prin care se exprim opera ii ce urmeaza a fi detaliate ulterior. Simbolul # este utilizat pentru a marca astfel de propozi ii care se vor detalia ulterior. Fiecare propozi ie ncepe cu un verb care exprima ct mai fidel opera ia descris. Astfel se definesc urmtoarele construc ii de baz: citete <var> sau citete <l-var> scrie <var> sau scrie <l-var> atribuie <var> <exp> sau

3-16 atribuie

Reprezentarea i construirea algoritmilor <var1> <exp1> <var2> <exp2>,...

sfrit execut <nume-proc>(<l-exp>;<l-var>) stop unde: var este numele unei variabile, exp este o expresie algebric sau logic ce poate folosi variabile din memorie, nume-proc este numele unei proceduri, l-exp este lista expresiilor de intrare iar l-var este lista variabilelor de ieire. Limbajul pseudocod reprezint structurile de control ale programrii structurate: secven a, selec ia, itera ia. Pentru mai mult similitudine cu limbajele de programare TURBO PASCAL sau DELPHI, C++, JAVA, etc. se adopt i varianta n limba englez a cuvintelor cheie ce marcheaz structurile de control. structura secven ial, un bloc format din prelucrrile s1,s2, notat cu (s1,s2) este: nceput begin s1 s1 s2 s2 end sfrit structura alternativ (c,s1,s2): if c dac c atunci s1 then s1 else s2 altfel s2 sfrit end structura repetitiv condi ionata anterior (c,s): ct timp c while c do s execut s sfrit endwhile structura pseudoalternativ '(c,s): dac c if c atunci s then s sfrit endif structura repetitiv condi ionat posterior (c,s):

Reprezentarea i construirea algoritmilor execut s pn cnd c do s until c

3-17

structura alternativ generalizat: ''(i,s1,s2,...,sn) selecteaz i dintre: case i of 1: s1 c1: s1; 2: s2 c2: s2; ......... .......... n: sn cn: sn; sfrit end case

Dac n procesul de definire a structurii programului se detaliaz i structura datelor atunci se pot folosi propozi ii standard i pentru descrierea acestora. De exemplu: pentru variabile simple: var v1,v2,...,vn: {Integer/real/boolean/character[m]} unde v1,v2,...,vn sunt nume de variabile iar integer, real, boolean, character[m] indic tipul acestora; pentru variabilele de tip tablou k-dimensional: unde v este numele tabloului iar n1, n2,...,nk numrul maxim de elemente de pe prima, a doua, ... , a k dimensiune . pentru variabile de tip nregistrare: var v: record of v1:t1; v2:t2; ....... vn:tn end unde v este numele nregistrrii, vi, i=1,n este numele unui cmp iar ti, i=1,n este tipul acestuia (integer, real, logic, ir de caractere, list de valori). pentru declarare fiiere: sequential var f: direct file of v1,v2,...,vn indexed unde f este numele fiierului, vi, i=1,n este numele nregistrrii iar sequential, direct, indexed indic modul de organizare; pentru citire/scriere din/n fiiere:
var v: array [1..n1;1..n2;... ;1..nk] of {integer/real/boolean/character[m]}

3-18

Reprezentarea i construirea algoritmilor citete (nume fiier, nume nregistrare) scrie (nume fiier, nume nregistrare).

Caracteristica principal a limbajului i n acelai timp un mare avantaj este libertatea pe care o ofer utilizatorului n descrierea algoritmului. La fiecare nivel de detaliere, textul are o claritate maxim datorit sintaxei foarte simple ct i a limbajului natural curent. Modul de abordare a unei probleme n pseudocod este de tip "top-down" (de sus n jos). Se pornete de la nivel de maxim generalitate (o prim versiune a programului) i urmeaz o dezvoltare arborescent pe un numr de n nivele (versiuni), variabil n functie de complexitatea problemei ce trebuie rezolvat. Primele (n-1) versiuni ale programului cuprind propozi ii nestandard iar versiunea final Vn este alctuit din propozi ii standard ce vor fi codificate n limbajul de programare ales. S considerm de exemplu problema numrrii elementelor pozitive, negative i zero dintr-un vector A(I), I=1,N. O prima versiune de descriere a programului NUMARARE este:
#nceput NUMARARE #NUMARARE-elemente #Sfrit NUMARARE

Identificand opera iile elementare corespunzatoare fiecareia din cele trei propozi ii complexe se ob ine forma finala compusa numai din propozitii simple
program NUMARARE var I: integer var N: integer var NP: integer var NN: integer var NZ: integer var A: array[1..N] of {integer} nceput citete n ; execut i=1 ; execut NP=0 ; execut NN=0 ; execut NZ=0 ; ct timp iN execut nceput citete A(i) dac A(i) > 0 atunci

Reprezentarea i construirea algoritmilor


executa NP=NP+1; altfel dac A(i)< 0 atunci execut NN=NN+1 altfel execut NZ=NZ+1 sfrit sfrit sfrit sfrit execut scrie NP execut scrie NN execut scrie NN sfrit

3-19

3.2.2. Scheme logice


Schema logic este o reprezentare grafic a algoritmului prin care fiecrei etape din structura sa i se ataeaz un simbol numit bloc iar modul de nln uire a acestor blocuri este dat prin segmente orientate. Se poate arta c orice schem logic se compune din trei tipuri de blocuri (Fig. 3.4.): Bloc de tip func ional : Y=f(X) X Bloc de tip predicativ (decizional) Y Z = c(X) Y X Conectori
C f

Z Z

Figura 3.4 Elemente constitutive ale unei scheme logice

3-20

Reprezentarea i construirea algoritmilor

Mai riguros, o schema logica este un graf orientat in care: exista o unica instructiune START si o unic instruc iune STOP; orice nod este etichetat cu una din urmtoarele informa ii: START sau STOP; o citire sau o scriere; o atribuire; un predicat,etc. pentru orice nod exist cel pu in un drum care ncepe cu START, se termin cu STOP i cuprinde nodul considerat. n general, structura uni program nseamn ordinea de execu ie a instruc iunilor sale, numit i structur de control a programului.n schemele structurate se regsesc urmtoarele structuri fundamentale de control: a) structura liniar notat (s1,s2,...,sn) n care si,i=1,n sunt secven e de instruc iuni (fig.3.5).
s1 s2 s3 s4

Figura 3.5 Structura liniar

Aceasta se poate scrie: (s1,s2,...sn)= particular (s1) = s1

( (s1, s2,...sn-1), sn) i, n

b) structura alternativ notat (c,s1,s2), n care c este condi ia (predicatul) de testat (fig.3.6) nu
s1 C

da
s2

Figura 3.6 Structura alternativ

c) structura repetitiv condi ionat anterior notat (c,s) (fig.3.7). da


s

Figura 3.7. Structura repetitiv condi ionat anterior

Reprezentarea i construirea algoritmilor

3-21

Aceste trei structuri sau diagrame sunt numite structuri de baz. Totui, pentru a putea reprezenta uor diferite situa ii s-au introdus i urmtoarele tipuri de structuri derivate: d) structura repetitiv condi ionat posterior notat '(c,s) (fig.3.8)

Figura 3.8 Structura repetitiv condi ionat posterior

e) structura pseudoalternativ notat '(c,s) (fig.3.9) nu


C

da
s2

Figura 3.9 Structura pseudoalternativ

f) structura alternativ generalizat notat ' '(c,s1,s2,...sn) care realizeaz selec ia parcurgerii unui arc n func ie de valorile naturale ale variabilei i (fig.3.10)
s1 s2 sn

Figura 3.10 Structura alternativ generalizat

g) structura /\ (blocul vid) care este echivalent cu func ia identic, nu execut nici o opera ie.

3-22

Reprezentarea i construirea algoritmilor

Ca nota ie se folosesc i urmtoarele coresponden e pentru a descrie arborele de structur al programului. (s1,s2) = (BLOCK,s1,s2); (c,s1,s2) = (IF-THEN-ELSE, c,s1,s2); (c,s) = (DO-WHILE,c,s) ' (c,s) = (DO-UNTIL,c,s) '(c,s) = (IF-THEN,c,s) ' '(i,s1,s2,...sn) = (CASE-OF,i,s1,s2,...,sn). Propriet ile structurilor fundamentale. 1) Structura este n general necomutativ: (s1,s2)=,/ (s2,s1). Daca s1 i s2 sunt independente, atunci ele pot fi programate ca dou procese concurente. 2) Structura este asociativ: (s1, (s2,s3)= ( (s1,s2),s3). 3) Blocul vid /\ constituie elementul neutru pentru structura secven ial: (s,/\)= (/\,s). 4) Structura este distributiv la dreapta n raport cu structura alternativ: ( (c,s1,s2),s3)= (c, (s1,s3), (s2,s3)). 5) Structura este distributiva la stnga in raport cu structura alternativ : (s1, (c,s2,s3))= (c, (s1,s2), (s1,s3)). 6) Structura este reductibil la structuri alternative incluse: 7) Structurile ', ", ' sunt reductibile la structurile , , '(c,s)= (s, (c,s));, '(c,s)= (c,s,/\); '(c,s)= (c,s, (c,s)); '(c,s1,s2,...sn)= (c1,s1, (c2,s2,...)),
(c,s)= (c, (s, (c,s)),/\)= (c, (s, (c, (s, (c,s) )),/\)),/\)=...

unde c1,c2,...cn sunt derivate din c i sunt condi iile care determin selec ia alternativelor. Toate strucurile prezentate se bucur de proprietatea c au o singur intrare i o singur ieire. Aceste blocuri pot fi din nou interpretate ca opera ii unice mai complexe ntr-un process de calcul secven ial.ca urmare, orice program poate fi construit numai din asfel de structuri

Reprezentarea i construirea algoritmilor

3-23

(blocuri) i poate fi succesiv transformat ntr-un singur bloc cu o intrare i o ieire. Acest proces de transformare poate fi folosit pentru a n elege programul i pentru a-i dovedi corectitudinea. Dac se consider aceste transformri n sens invers, se ob ine o cale sistematic prin care se poate deduce structura de control a programelor. Astfel, ini ial programul este considerat ca un bloc complex cu o intrare i o ieire. Printr-o examinare atent, acest bloc se poate descompune n trei moduri, i anume: a) ca o secven de dou sau mai multe blocuri cu o intrare i o ieire b) ca o selec ie ntre dou sau mai multe alternative c) ca o repetare de mai multe ori a unei secven e de opera ii Acest proces de descompunere, repetat pentru fiecare bloc, poate fi continuat pn cnd acestea corespund unor opera ii executabile pe un calculator real sau virtual luat ca referin . Procesul de transformare descris se numete descompunere top-down sau descompunere n pai succesivi, i constituie principalul mijloc de definire a structurii de calcul a programelor. Defini ie: Se numete program structurat orice program a crui structur de control este realizat folosind doar blocuri cu structur secven ial, alternativ cu dou ramuri i repetitiv condi ionat anterior. De exemplu, schema din figura 3.11 se poate scrie:
C1 S2 C3 S3 S1 C2

Figura 3.11 Exemplu schem structurat

(c1,c2,c3,s1,s2,s3)= (c1, (c2, (s2,s3), descompunere n termeni de , , .

(c3,s1))), adic schema admite o

3-24

Reprezentarea i construirea algoritmilor

Sunt situa ii n care acest lucru nu este posibil direct i, pentru a ob ine o schem logic echivalent, dar structurat, se pot folosi variabile booleene, variabile de stare sau duplicarea de cod. Varianta folosirii variabilelor booleene pentru transformarea schemelor logice nestructurate n scheme logice structurate este justificat prin teorema lui Boehm i Jacopini. Teorema de structur Boehm i Jacopini Programarea structurat se bazeaz pe o serie de teoreme de structur i descompunere pe care le vom prezenta n continuare. Vom introduce acum trei noi blocuri functionale T,F,K i un nou bloc predicativ W. Efectul blocurilor T i K este s transforme un obiect x n perechea ordonat (v,x) unde v poate avea numai valorile t (adevrat) i f (fals): T F T x--->(t,x) ; x--->(f,x) ; x--->(t,(t,x)). Blocul K separ dintr-o pereche ordonat cea de-a doua component a sa: K K (v,x)--->x ; (t,(f,(t,x)))--->(f,(t,x)). Predicatul W este definit ca W[(v,x)]=t <=> v=t adic predicatul W este verificat sau nu, dupa cum prima component a sa este t sau f. Programarea structurat se bazeaz pe o serie de teoreme de structur i descompunere pe care le vom prezenta n continuare. Teorema de structur (Bohm i Jacopini) Dac o aplica ie x-->x' este reprezentabil printr-o schem logic ce con ine ac iunile s1,s2,... i predicatele c1,c2,... ea este de asemenea reprezentabil printr-o schem logic ce se descompune n , i i care con ine aceleai blocuri ca i schema ini ial, plus blocuri de tip T, F, K i W. Teorema poate fi enun at mai simplu astfel: dac o schema cuprinde o mul ime S de ac iuni i o mul ime C de predicate, pot fi adugate lui S i C noi func ii, respectiv noi predicate astfel nct organigrama s fie structurat i s fie echivalent ca rezultat al prelucrrii cu cea ini ial. Aceast teorem de existen ilustreaz faptul c orice program poate fi pus sub form de structur, adic s con ina numai structuri , i i/sau variante ale acestora prin utilizarea unor variabile booleene asociate unor func ii suplimentare.

Reprezentarea i construirea algoritmilor

3-25

Demonstra ia teoremei se face prin induc ie dup n- numrul blocurilor, i, n principiu,const din urmtorii pai: Se verific faptul c teorema este adevarat pentru n=1 caz n care se ob ine structura (s), pentru n=2 se ob ine structura (c,s) sau (s1,s2)) iar pentru n=3 se ob ine structura (c,s1,s2) i variante ale structurilor i Se demonstreaz c, presupunnd c afirma ia este adevrat pentru n=k blocuri, atunci este adevrat i pentru n=k+1 blocuri. Blocul k+1 poate fi de tip func ional sau predicativ. Se deosebesc urmtoarele cazuri: - Dac blocul k+1 este de tip func ional i este n fa a, ntre, sau n urma celor k blocuri, atunci avem o nou structur de tip . - Dac blocul k+1 este de tip predicativ i este n fa a celor k blocuri, atunci avem o nou structur de tip sau . - Dac blocul k+1 este de tip predicativ i este n urma celor k blocuri, atunci avem o nou structur de tip - Dac blocul k+1 este de tip predicativ i n interiorul celor k blocuri anterioare atunci se folosesc operatorii T, F, K i W pentru reprezentarea schemei logice cu k+1 blocuri n termeni de tip , , . Pentru a ilustra utilizarea variabilelor boolene n structurarea schemelor logice se condider schema logic nestructurat din figura 3.12.
DA DA C2 S2 DA S3

S1

S5

C1

C3 S4

Figura 3.12 (C1,C2,C3,S1,S2,S3,S4,S5)

Aceast schem se poate reprezenta n termeni de , i introducnd o variabil boolean v ce va lua valorile t i f prin operatorii T i F (figura 3.13).

3-26

Reprezentarea i construirea algoritmilor


DA DA

S1

S5

v=f

f
v=t v=t

STOP

C2 S2
DA

C1 C3

S3

S5

v=f

S4

Figura 3.13 Reprezentare alternativ

i v=f din structurile corespund blocurilor T i F, iar v=t din structura corespunde blocului W.

Astfel schema logic ini ial (C1,C2,C3,S1,S2,S3,S4,S5) = = (v=t, (v=t,(C1, (C2, (S1,S5,v=f), S2)), (C3, (S3,S5,v=f), S4)))) unde v=t

Corolarul "top-down" ("de sus in jos"). Un program structurat este echivalent cu un program pus sub una din formele: P = (s1,s2), P = (c,s1,s2) P = (c,s), P = '(c,s) unde c este predicat, iar s,s1,s2 sunt proceduri structurate sau func ii ale programului. n fig. 3.14 este reprezentat structura unui program P care poate fi scris sub forma: P = ( (c1, (s3,s4), (c2, (c3,s1),s2)),s5).
S3 S1 C1 C3 S5 S4

C2 S2

Figura 3.14 Schema logic a programului P

Reprezentarea i construirea algoritmilor

3-27

Dac programul din fig. 3.14 nu cuprindea procedura s5, se putea scrie: P = (c1, (s3,s4, , (c2, (c3,s1),s2)).

3.2.3 Diagrame arborescente


Diagramele arborescente constituie, alturi de schemele logice, una din tehnicile grafice de reprezentare cele mai rspndite. Exist mai multe variante: a) Varianta Tabourier utilizeaz reprezentrile din figura 3.14 pentru urmatoarele structuri: - secven ial (s1,s2)=(BLOCK, s1,s2) - alternativ (c,s1,s2) (IFTHENELSE,c,s1,s2) - repetitiv condi ionat anterior notat (WHILEDO,c,s) - pseudoalternativ notat (IFTHEN, c,s) - alternativ multipl notat (CASEOF, c,s1,s2,...,sn) - repetitiv condi ionat posterior notat (DOUNTIL,s,c), reprezentrile din figura 3.15.
BLOCK

IFTHENELSE

IFTHEN

S1

S2

S1

S2

S1

WHILEDO

CASEOF

DOUNTIL

S1

S1

S2

Sn

S1

Figura 3.15 Diagrame arborescente-structuri fundamentale

Modul de parcurgere al acestor diagrame este de sus n jos i de la stnga la dreapta. n cazul unor programe mai mari este foarte uor de izolat o subarborescen , creia i corespunde un program propriu i care execut o anumit func ie.

3-28

Reprezentarea i construirea algoritmilor

Pentru exemplul algoritmului de numrare a elementelor pozitive, negative i zero dintr-un vector cu N elemente (paragraful 3.2.1.), diagrama arborescent este dat n figura 3.16.
BLOCK I=1 NP=0 NN=0 NZ=0 WHILE-DO BLOCK IF-THEN-ELSE SCRIE NP SCRIE NN SCRIE NZ

IN

CITIRE A(I)

A(I)>0

NP=NP+1

IF-THEN-ELSE

A(I)<0

NN=NN+1

NZ=NZ+1

Figura 3.16 Exemplu de diagram arborescent

b) Varianta Mills ('arbore program') este foarte apropiat de varianta Tabourier, deosebirea constnd n faptul c numele structurilor, condi iile i secven ele de realizat nu mai sunt incluse n figuri geometrice (dreptunghi, romb). De exemplu, programul definit prin (WHILEDO, c1,(IFTHENELSE,c2,s1,(BLOCK,s2,s3))) corespunde unui arbore-program de forma dat n figura 3.17.
WHILE DO

C1 C1

IF THEN ELSE

S1 S2

BLOCK

S3

Figura 3.17 Exemplu de diagram arborescent, varianta Mills

Amintim c exist, ca i n cazul schemelor logice, o mare varietate de conven ii grafice de tip diagram arborescent. Astfel, o a treia variant de diagram arborescent a fost propus de R.W. Jensen sub numele de arbore logic al prelucrrii sau PLT (processing logic tree). Un PLT constituie o metod clar de reprezentare grafic a structurii de control a programelor, dar i un sistem de notare adecvat procesului de detaliere

Reprezentarea i construirea algoritmilor

3-29

n pai. Exist i o a patra varianta de diagram arborescent numit arbore programatic sau AP ("Arbore Programmatique") propus de M.T. Bertini i Y. Tallineau n cadrul unui model de programare structurat n limbajul COBOL ca o alternativ nou la schema logica.

3.2.4. Tabele de decizie


Tabelele de decizie constituie o alt tehnic de reprezentare a algoritmilor. Structura unei astfel de tabele este dat n figura 3.18.a. n care primele r linii sunt de tip condi ie iar urmtoarele p linii sunt de tip ac iune.
TABEL DE DECIZIE S1 CONDI II C1 C2 .... Cr A1 A2 .... Ap SITUATII S2 . . . . . Sm

AC IUNI

Figura 3.18.a. Forma general a unei tabele de decizie

Elementele primelor r linii pot fi definite astfel: de tip NU, DA (respectiv 0,1) dac este vorba de condi ii cu dou valori; de tip <, =, > (respectiv 0,1,2) dac este vorba de condi ii cu trei valori; de tip 0,1,2,... daca este vorba de condi ii cu mai mult de trei valori. Numrul m al situa iilor (regulilor) este func ie de numrul de condi ii care exist i de ce valori iau acestea i anume: m=n1*n2*....*nr unde ni este numrul de valori pentru condi ia ci. De exemplu, pentru dou condi ii c1 cu valori n {0,1} i c2 cu valori n {0,1,2} numrul situa iilor este m=2*3=6, cu semnifica ia din figura 3.18.b: 0 00 s1
0 c1 1 c2 c2 1 2 0 1 2 01 02 00 01 02 s2 s3 s4 s5 s6

Figura 3.18.b. Identificarea situa iilor

3-30

Reprezentarea i construirea algoritmilor

n zona liniilor de ac iune elementele tabelei se vor defini astfel: tij= * spa iu daca n situa ia Sj a condi iilor se ntreprinde ac iunea Ai dac nu se ntreprinde ac iunea Ai n situa ia Sj

n func ie de valorile pe care le pot lua condi iile, tabelele de decizie sunt de trei tipuri i anume: a) cu intrri limitate (toate condi iile iau valori n mul imea L2={0,1}); b) cu intrri extinse (adic condi iile au valori ntr-o mul ime Ln, n>2); c) cu intrri mixte (unele condi ii iau valori n L2 iar altele n Ln, n>2. Rezolvare problemelor cu ajutorul tabelelor de decizie presupune parcurgerea mai multor etape care se succed dup cum urmeaz: stabilirea condi iilor tabelei de decizie stabilirea regulilor stabilirea ac iunilor ce se pot ntreprinde elaborarea tabelei de decizie eliminarea contradic iilor i redundan elor simplificarea tabelei rezultate Exemplu: Fie P1, P2, P3, trei produse aflate ntr-o magazie n cantit ile CP1, CP2 respectiv CP3. Se presupune c se solicit unul dintre produse, ntr-o anumit cantitate notat respectiv CANT1, CANT2, CANT3 . Dac se solicit produsul P2 se procedeaz astfel: - cnd CANT2< CP2 se satisface integral cererea; - cnd CANT2 = CP2 se satisface par ial cererea n cantitatea CANT2/2; - cnd CANT2 > CP2 se refuz cererea. Pentru produsul P3 se procedeaz n mod analog, iar pentru produsul P1 se aplic acelai regim cu o singur excep ie, i anume dac CANT1 = CP1 se satisface cererea n ntregime (i nu jumtate ca pentru P2 i P3). Rezolvarea problemei propuse presupune percurgerea urmtoarelor etape: stabilirea cerin elor c1- pune n eviden tipul produsului solicitat i ia valori L3 i anume: 0, dac se solicit P1 c1= 1, dac se solicit P2 2, dac se solicit P3

Reprezentarea i construirea algoritmilor

3-31

c2 pune n eviden rela ia dintre stocul de produse i cantitatea solicitat, astfel: 0, cnd cererea depete stocul c2= 1, cnd cererea este egal cu stocul 2, cnd cererea este mai mic dect stocul stabilirea regulilor Tabela de decizie va fi cu intrri extinse. Cele dou condi ii c1 i c2 iau valori n L3={0,1,2}, deci numrul situa iilor va fi de nou. 0 c2 0 1 2 0 1 2 0 1 2 00 01 02 10 11 12 S1 S2 S3 S4 S5 S6

c1

c2

c2

Figura 3.19 Stabilirea regulilor tabelei de decizie

20 S7 21 S8 22 S9

stabilirea ac iunilor Vor exista trei tipuri de ac iuni, i anume: A1 satisfacerea total a cererii A2 satisfacerea par ial a cererii A3 refuzul cererii elaborarea tabelei de decizie
C1 C2 A1 A2 A3 S1 0 0 S2 0 1 * S3 0 2 * S4 1 0 S5 1 1 * * * * S6 1 2 * S7 2 0 S8 2 1 * S9 2 2 *

Figura 3.20 Tabela de decizie ini ial

eliminarea contradic iilor i redundan elor simplificarea tabelei rezultate

Dup ntocmirea unei tabele se pune problema simplificrii ei, n sensul reducerii numrului de situa ii. Acest lucru este posibil atunci

3-32

Reprezentarea i construirea algoritmilor

cnd, indiferent de valoarea unei condi ii, pentru mai multe situa ii se ntreprinde o aceeai ac iune sau aceleai ac iuni. De exemplu, tabela din figura 3.20 permite simplificarea deoarece: 1. cnd cererea depete stocul (C2=0), indiferent de produs (C1=) se refuz cererea (se realizeaz ac iunea A3). 2. cnd cererea e mai mic dect stocul (C2=2), indiferent de produs (C1=) se satisface cererea (se realizeaz ac iunea A1). n aceste condi ii, n loc de S1,S2,...,S9 se pot considera situa iile S'1,S'2,S'3,S'4,S'5 definite astfel: n loc de S1,S4,S7 se consider S'1 caracterizat de faptul c C2=0 i C1 este indiferent (acest lucru se marcheaz prin C1=); S'2 rezult din S3,S6,S9 caracterizat de faptul c C2=2 si C1 este indiferenta (C1=). S'3,S'4,S'5 provin din S2,S5,S8 prin preluare; n concluzie, tabela capt forma mai simpl din figura 3.21. C1 C2 A1 A2 A3 S'1 0 * S'2 2 * S'3 0 1 * S'4 1 1 * S'5 2 1 *

Figura 3.21 Tabela de decizie simplificat

Aceast tabel se poate transcrie ca o secven de schem logic (fig. 3.22).


NU C2=0 NU DA NU DA DA

C2=1

A3 C1=0

A1

A2

A1

Figura 3.22. Schema logic a tabelei simplificate

Reprezentarea i construirea algoritmilor

3-33

Aceeai tabel se poate descrie i prin diagram arborescent (fig.3.23).


IFTHENELSEE A3

C2=0

IFTHENELSE

C2=1

IFTHENELSE

A1

C1=0

A2

A1

Figura 3.23. Diagrama arborescent a tabelei simplificate

Pn aici s-au expus tabele de decizie complete. Exist ns i tabele la care numrul de situa ii ar fi prea mare (tabele cu multe condi ii). De aceea se utilizeaz regula ELSE care const n explicitarea situa iilor care intereseaz, iar celelalte sunt considerate n alternativa (regula) ELSE []. Reprezentarea prelucrrilor prin tabele de decizie contribuie la asigurarea corectitudinii (completitudinii) i a uurintei ntre inerii produsului-program.

3.3. Metode de construire a algoritmilor


3.3.1. Introducere
Rezolvarea problemelor reale necesit n multe situa ii construirea de algoritmi noi i/sau combinarea de algoritmi cunoscu i. n acelai timp, nu to i algoritmii sunt indica i pentru rezolvarea cu ajutorul calculatorului a diferitelor probleme, reale deoarece: problemele reale nu sunt numai de un anumit tip, ele sunt combina ii de dou sau trei probleme de tipuri diferite dimensiunea problemelor reale este mare sau foarte mare problemele sunt multicriteriale n cadrul lor apar aspecte vagi de formularea restric iilor necesit un timp de calcul foarte mare

3-34

Reprezentarea i construirea algoritmilor

Din aceste motive, n continuare se vor trata tehnici i metode de construire a algoritmilor pentru problemele reale, grupate n urmtoarele categorii: metode clasice optimale metode clasice suboptimale metode de simulare local Reducerea complexit ii problemelor i algoritmilor poate fi realizat prin paralelizarea procesului de calcul, fapt ce implic i aspecte de natur tehnic la nivelul hardware-ului utilizat.

3.3.2. Metode clasice optimale


Aceste categorii de metode i algoritmi sunt tratate n cadrul disciplinelor de ingineria programrii i conduc la solu ii optimale ale problemelor. Din pcate ele se preteaz la rezolvarea problemelor reale numai n combina ie cu al i algoritmi. Din aceast grup de metode fac parte metoda Bactracking, metoda Branch and bound i metoda programrii dinamice. 3.3.2.1. Metoda Backtracking (Metoda cutrii cu revenire) n multe aplica ii, gsirea solu iei este rezultatul unui proces de cutare sistematic, cu ncercri repetate i reveniri n caz de nereuit. Metoda se aplic problemelor n care solu ia se poate prezenta sub forma unui vector s = (s1, s2, , sn), s D, D = D1 x D2 x . x Dn unde D1 , D2 , . , Dn sunt mul imi finite avnd | Di | = di elemente. Pentru fiecare problem concret sunt date anumite rela ii ntre componentele s1, s2, , sn , numite condi ii interne. Mul imea finit D = D1 x D2 x . x Dn se numete spa iul solu iilor posibile. Solu iile posibile care satisfac condi iile interne se numesc solu ii finale (solutii rezultat). Metoda Backtracking urmrete s evite generarea tuturor solu iilor posibile. n acest scop elementele vectorului s primesc pe rnd valori, n sensul c lui sk i se atribuie o valoare numai dac au fost atribuite deja valori lui s1, s2,,sk-1. Mai mult, deoarece a fost stabilit o valoare pentru sk, nu se trece direct la atribuirea unei valori lui sk+1 ci se verific condi ii de continuare referitoare la s1, s2,,sk . Aceste condi ii stabilesc situa iile n care are sens s se treac la calculul lui sk+1, nendeplinirea lor

Reprezentarea i construirea algoritmilor

3-35

semnificnd faptul c oricum s-ar alege sk+1, , sn nu se va putea ajunge la o solu ie mai bun sau la solu ia final. Evident c n cazul nendeplinirii condi iilor de continuare va trebui s se fac o alt alegere pentru valorile lui skDk , sau dac Dk a fost epuizat, se micoreaz k cu o unitate, ncercnd s se fac o nou alegere pentru sk-1 etc. Aceast micorare a lui k justific denumirea metodei cutare cu revenire. Presupunnd stabilite condi iile de continuare, se poate scrie procedura Backtracking, n care se va nota cu fk (s1, , sk) condi iile de continuare pentru s1, s2, , sk n continuare se prezint, n pseudocod,o procedur general pentru problemele de tip Backtracking
Procedura Backtracking(n,s) n, max, k: integer i: boolean : real s: array [1,n] Dk : array [1,max] Begin k=1 while k>0 do i=0 while [mai exist o valoare din Dk netestat] do sk = if fk (s1, s2, ..,sk) i = 1; exit endif endwhile if i = 0 then k = k 1 else if k = n then write s1, .., sn else k = k 1 endif endif endwhile end

Aplica ie economic Un ntreprinztor, care dispune de un capital c, pe care dorete s l investeasc n vederea ob inerii unui profit, va proceda n felul urmtor: va

3-36

Reprezentarea i construirea algoritmilor

alege din n oferte la care trebuie avansate fondurile fi i care aduc beneficiile bi, pe acelea pe care le poate onora cu capitalul de care dispune i care i aduc beneficiul total maxim. O solu ie a problemei poate fi reprezentat printr-o selec ie de oferte (s1, s2,,sn) n care si = 1 dac oferta a fost luat n considerare de investitor sau si = 0 n caz contrar. Condi ia si {0,1}, cunoscut sub numele de restric ie explicit definete un spa iu al solu iilor posibile. Condi ia ca suma investit s nu depeasc capitalul c definete o func ie de limitri sau o restric ie implicit care restrnge numrul solu iilor. De exemplu se consider cazul concret n care numrul de oferte este n=3, capitalul de care dispune investitorul este c=5000$, iar sumele necesare investi iilor i beneficiile corespunztoare sunt prezentate n figura 3.24: Oferta 1 Oferta 2 Oferta 3 Investi ia fi Beneficiul bi Modelul folosit va fi: 2000$ 300$ 2200$ 400$
3

2500$ 500$

Figura 3.24 Datele problemei

i =1

f i * si c cu max bi * si
i =1

Spa iul strilor posibile ale solu iilor problemei se poate reprezenta printrun arbore, numit arborele spa iului strilor (ASS). Fiecare nod din arbore va defini o stare a solu iilor problemei; nodurile intermediare sunt solu ii par iale iar nodurile frunz solu ii finale. Nodul rdcin va reprezenta solu ia ini ial. n problema investitorului, fiecare solu ie corespunde unei decizii de acceptare sau de respingere a unei oferte, iar solu ia ini ial este aceea n care nu a fost luat n considerare nici o ofert. Primul nod va avea doi succesori, corespunznd acceptrii sau respingerii primei oferte, subarborii fiecrui nod de pe nivelul p corespunznd acceptrii sau respingerii ofertei p. nl imea arborelui spa iului strilor este deci de n+1 (n cazul concret 3+1=4). Acceptarea ofertei 1 (s1=1) este posibil deoarece investi ia total ar fi numai de 2000$ iar beneficiul ar fi de 300$. Dac se accept i oferta 2 (s2=1), investi ia devine 2000$+2200$=4200$ iar beneficiul 300$+400$ =

Reprezentarea i construirea algoritmilor

3-37

700$. Acceptarea ofertei 3 nu mai este posibil deoarece investi ia total 4200$+2500$=6700$ este mai mare dect capitalul disponibil care este de 5000$, deci oferta 3 va fi respins (s3=0). Pentru solu ia (s1=1, s2=1, s3=0) investi ia total este de 4200$ iar beneficiul de 700$. Aceast solu ie va fi deocamdat re inut ca cea mai bun solu ie (*). Dac nu se accept oferta 2 (s2=0) se poate accepta oferta 3 (s3=1) deoarece se face o investi ie total de 4500$ i se ob ine un beneficiu de 800$. Solu ia (s1=1, s2=0, s3=1) este mai bun ca cea mai bun solu ie curent, fiind re inut ca solu ie optim (**). Solu ia (s1 = 1, s2 = 0, s3 = 0) ob inut prin ignorarea ofertei 3 presupune investi ia total de 2000$ i aduce beneficiul de 300$, mai mic ca la solu ia optim aleas anterior, motiv pentru care nu este re inut. Dac se ignor oferta 1 i se accept ofertele 2 i 3 se ob ine o investi ie de 4700$ i un beneficiu de 900$. Deci solu ia (s1=0, s2=1, s3=1) este cea mai bun i se re ine ca solu ie optim.
i=0 profit = 0 s1 = 1 s1 = 0

s2 = 1

i = 2000 profit = 300

i=0 profit = 0 s2 = 0 s2 = 1 s2 = 0

i = 4200 profit = 700 s3 = 1 s3 = 0 s3 = 1

i = 2000 profit =300

i = 2200 profit = 400 s3 = 0 s3 = 1 s3 = 0 s3= 1

i=0 profit = 0 s3 = 0

i = 6700 profit = 1200

i = 4200 profit = 700 *

i = 4500 profit = 800 **

i = 2000 profit = 300

i = 4700 profit = 900 ***

i = 2200 profit = 400

i = 2500 profit = 500

i=0 profit = 0

Figura 3.25 Arborele spa iului solu ilor

Metoda cutrii cu revenire const n generarea sistematic de noduri de stri ale solu iei problemei, pornind de la nodul rdcin i selectnd dintre acestea nodurile solu ii.

3-38

Reprezentarea i construirea algoritmilor

n parcurgerea arborelui spa iului strilor se va lua n considerare o list de noduri active (noduri la care nu s-au generat nc to i succesorii direc i). Func iile de limitare reduc numrul nodurilor active fr a le genera to i urmaii; se minimizeaz astfel procesul de cutare prin detectarea i evitarea cilor care nu conduc la solu ii. n exemplul de mai sus, func ia de limitare includerea ofertei p este posibil, impune satisfacerea condi iei: investi ia =

f *s
i =1 i

c.

Pentru a minimiza procesul de cutare, se va evita generarea solu iilor cu beneficiu mic, provenite din excluderea de oferte. Pentru fiecare ofert se poate estima un beneficiu poten ial. Acesta are la nceput valoarea beneficiu poten ial =

b
p =1

* si i scade la excluderea fiecrei oferte p cu

valoarea beneficiului adus de oferta nlturat. Dac prin excluderea unei oferte beneficiul poten ial scade sub valoarea beneficiului celei mai bune solu ii curente, atunci excluderea ofertei nu este posibil. Func ia de limitare excluderea ofertei p este posibil se exprim deci prin condi ia: beneficiu poten ial bp beneficiu cel mai bun curent. Aplicarea acestei func ii de limitare, n problema enun at, reduce la trei numrul solu iilor generate. n prealabil se face sortarea ofertelor n ordinea descresctoare a beneficiilor, aa cum se poate vedea n figura 3.26: Oferta 1 Oferta 2 2500 2200 500 400 Oferta 3 2000 300

Investi ia fi Beneficiul bi

Figura 3.26 Oferte sortate

n figura 3.27 se poate observa modul de ob inere a solu iilor.

Reprezentarea i construirea algoritmilor


i=0 profit = 0 S1 = 1 Profit poten ial = 1200$ S1 = 0

3-39

i = 2500$ profit = 500$

Profit poten ial = 700$ = 500$+400$+300$-500$

S2 = 1
Profit poten ial = 1200$

S2 = 0

i = 2500$ profit = 500$

Profit poten ial = 800$ = 500$+400$+300$-400$

S3 = 1
Profit poten ial = 1200$ i = 6700$ profit = 1200$

S3 = 0

Profit poten ial = 900$ = 500$+400$+300$-300$

Figura 3.27 Solu ia ob inut

Cea mai bun solu ie este (s1 = 1, s2 = 1, s3 = 0) adic se accept ofertele 2 i 3 i se ignor oferta 1 ob inndu-se beneficiul total de 900$.

3-40

Reprezentarea i construirea algoritmilor

3.3.2.2. Metoda Branch and Bound (ramific i mrginete)


Aceast metod este nrudit cu metoda Backtracking. Diferen ele constau n ordinea de parcurgere a arborelui spa iului solu iilor (strilor) i n modul n care se elimin subarborii care nu pot conduce la rezultat. Metoda folosete o list n care vor fi nscrise vrfuri ale arborelui spa iului solu iilor pentru a fi prelucrate ulterior, numite vrfuri active. Dintre vrfurile active se va alege cte un vrf care va fi prelucrat, numit vrf curent. n momentul n care un vrf activ devine vrf curent se vor genera/determina to i descenden ii si, acetia devenind vrfuri active (se vor aduga listei vrfurilor active) dup care unul din elementele acestei liste devine vrf curent. Lista poate func iona ca o coad sau ca o stiv. Parcurgerea (vizitarea) arborelui spa iului solu iilor, n cazul metodei Branch and Bound difer de metoda Backtracking prin aceea c n momentul n care un vrf activ devine vrf curent sunt genera i (determina i) to i descenden ii si, acetia devenind vrfuri active (fiind deci aduga i listei vrfurilor active), dup care unul dintre elementele acestei liste devine vrf curent. Presupunnd c vrfurile active vor fi memorate ntr-o list L i c pentru vrful i vom memora tatl n TATA(i), o procedur Branch and Bound poate fi:
procedure BranchBound (arbore, rd) i rd, L do for [to i j vecini ai lui i] if [j vrf rezultat] then write [drumul de la rdcin la j], return endif Lj TATA(j) i repeat if L = then write Nu , return else i L endif enddo return

Reprezentarea i construirea algoritmilor

3-41

Observa ie: deoarece pentru vrfurile active i vom memora n TATA(i) tatl lor, aceasta permite ca odat ajuni ntr-un vrf rezultat, s putem reface cu uurin drumul de la rdcin la vrful rezultat respective.

Exemplu: Fie urmtoarea problem de ordonan are: se dau dou repere R1 i R2 prelucrate pe dou maini m1 i m2. Procesul de prelucrare este reprezentat prin graficul re ea din figura 3.28,
m1 0 0 0 4 m2 1 5 m1 4 6 m2 1 3 m2 2 7 m1 3 5 7 7 R2 - reper R1 - reper

Figura 3.28 Prelucrarea reperelor

unde n noduri sunt reprezentate fazele sau opera iile de efectuat pentru fiecare reper i pe ce main de execut iar arcele reprezint duratele. Se cere minimizarea duratei totale de efectuare a opera iilor. Metoda presupune ramificarea i mrginirea, pornindu-se de la ideea c pe ambele maini nu s-a programat nici o opera ie:
A m1={1} Z1=15 m2={} Z4=22 m1={1,3,5} D m2={2} m1={1,5,3} m2={2} F m1={} m2={} C Z0=0 m1={5} m2={} Z2=20

m1={1,5,3} Z5=15 m2={} G m1={1,5,3} Z7=15 m2={4} I m1={1,5,3} Z9=22 m2={4,6,2}

Z6=20

Z8=15

m1={1,5,3} m2={4,2,6} Solu ie optim

Figura 3.29 Ob inerea solu iei

3-42

Reprezentarea i construirea algoritmilor


R2 R1 R2

Nod B
0 0 0 4 1

3 2

7 3

5 7

m2 m1 R1 3 R2 R2 R2 10 R1 R1 15

5 1 4

7 Z=3+7+5=15

Nod C
0 0 0 4 1 5 4 6 3 1 2 7 3 5 7 7 m2 m1

R2 5

R1 8 15

R1 20

Solu ia optim
0 0 0 4 1 5 3 1 2

Z=1+4+3+7+5=20 7 3

5 7

6 4

Z=1+4+3+7+5=20

Fig 3.30 Reprezentarea solu iilor

3.3.2.3. Metoda programrii dinamice


Programarea dinamic este o metod care rezolv problemele combinnd solu iile subproblemelor. Pentru aplicarea ei este necesar satisfacerea principiului optimalit ii. Pentru aplicarea metodei este necesar satisfacerea principiului optimalita ii: dac exist un ir optim de decizii (d1,,dn) care transform o stare ini ial s0 ntr-o stare final sn, trecnd printr-o serie de stri intermediare (s1,,sn-1), atunci irul de decizii este optim pentru s1 ca stare ini ial i sn ca stare final. Cu alte cuvinte o solu ie optim la o problem

Reprezentarea i construirea algoritmilor

3-43

con ine solu ii optime la subproblemele care compun problema ce trebuie rezolvat. Dup ce principiul optimalita ii a fost verificat, problema const n a scrie rela iile de recuren corespunztoare i a le rezolva. Aceste rela ii sunt de dou tipuri : - fiecare decizie di depinde de deciziile di+1,,dn, aici aplicndu-se metoda nainte, iar deciziile se iau n ordinea dn,dn-1,,d1; - fiecare decizie di depinde de deciziile d1,,di-1. n acest caz spunem c se aplic metoda napoi. Deciziile vor fi luate n ordinea d1,d2,,dn. n programarea dinamic se rezolv problema combinnd solu iile subproblemelor (la fel ca n cazul metodei divide et impera). Exist trei principii: evitarea recalculrii de mai multe ori a unor subcazuri comune, prin memorarea rezultatelor intermediare; metoda opereaz de jos n sus : se pornete cu cele mai mici subcazuri, se combin rezultatele lor i se ob in solu ii pentru subcazuri din ce n ce mai mari pn cnd se ajunge la solu ia cazului ini ial; trebuie sa fie satisfcut principiul optimalit ii. Un algoritm de programare dinamic poate fi descris prin urmtoarea secven de pai : 1) se caracterizeaz structura unei solu ii optime; 2) se ob ine recursiv valoarea unei solu ii optime; 3) se calculeaz de jos n sus valoarea unei solu ii optime; 4) din informa iile calculate, se construiete de sus n jos o solu ie optim. Observa ie : Pasul 4) se aplic atunci cnd se dorete solu ia propriu-zis i se rezolv printr-un algoritm recursiv, care efectueaz o parcurgere n sens invers a secven ei optime de decizii calculate anterior. Un exemplu de problem concret pentrucare se poate utiliza metoda programrii dinamice este problema reaprovizionrii la un depozit. Fie s0 stocul ini ial existent ntr-un depozit la momentul t0. n general, si este starea stocului dup o perioad de produc ie iar di cantitatea de reaprovizionat la momentul ti (vezi figura 3.31).

3-44
d
0

Reprezentarea i construirea algoritmilor


d1 s1 s0

........ .

sn

Stare ini ial

Stare final

Figura 3.31 Evolu ia stocului

Un alt exemplu este acela n care considerndu-se un graf neorientat G(X,) ale crui muchii au ataate o lungimi strict pozitive, se dorete determinrii celui mai scurt drum ntre dou vrfuri i i j. Metoda programrii dinamice se poate aplica n mai multe moduri:

Fie i, i1, i2, .... , in, j un drum de lungime minim de la i la j. Atunci este evident c i1, i2, .... , in, j este un drum de lungime minim de la i1 la j, ceea ce arat c este satisfcut principiul optimalit ii. Dac notm pentru kX prin L(k,j) lungimea drumului minim de la k la j i dac dik este lungimea muchei (i,k) ob inem:

L(i, j ) = min {d ik + L(k , j )}


( i , j )

Dac i, i1, i2, .... , im, j este un drum de lungime minim de la i la j atunci se observ c drumul i, i1, i2, .... , im este un drum de lungime minim de la i la jm. Corespunztor acestei forme sub care este satisfcut principiul optimalit ii vom nota L (i,j) lungimea drumului cel mai scurt de la i la k, kx. Ob inem:

L' (i, j ) = min {L' (i, k ) + d kj }


( k , j )

Fie i, i1, i2, .... , im, j un drum de lungime minim de la i la j i fie k = is = max {i1, ..., im}. Atunci se observ c i, i1, ..., is este cel mai scurt drum ntre i i is, iar drumul is, ij+1, ..., im este cel mai scurt drum de la is la j; n plus vrfurile intermediare prin care trec aceste drumuri au valori mai mici dect k. Corespunztor acestei noi forme sub care este satisfcut principiul optimalit ii, pentru dou vrfuri u, v X notm cu Lp(u,v) lungimea drumului minim de la u la v care nu trece prin vrfuri cu numere de ordine mai mari sau egale cu p. Atunci este valabil rela ia: L(i,j) = Lk(i,j) = Lk-1(i,is) + Lk-1(is, j)

Observa ie: fie (i, i1, i2, ..., is, ..., j) un drum care trece prin vrful is. Dac drumurile care trec prin (i, i1, ..., is) i (is, ..., ij) sunt de lungime minim

Reprezentarea i construirea algoritmilor

3-45

pentru capetele (i, is) respectiv (is, j) nu nseamn c drumul ini ial are lungimea minim pentru capetele i i j.

3.3.3. Metode clasice suboptimale


Aceste categorii de metode i algoritmi atasa i sunt tratate deasemenea n cadrul disciplinelor de ingineria programrii i au proprietatea ca nu conduc, n general, la soluii optimale a problemelor sau nu se cunoate acest fapt. Ele se preteaz la rezolvarea probelmelor reale combinnd cu al i algoritmi doarece se blocheaz ntr-o solu ie suboptimal pe care nu reuete s o mai nbunt easc. Din aceast grup de metode fac parte metoda Divide et impera, Metoda optimului local ( Greedy ) i metodele euristice.

3.3.3.1. Metoda Greedy (Metoda optimului local)


Metoda se aplic problemelor n care exist o mul ime A de n date de intrare i se dorete determinarea unei submul imi B a lui A (B A) care s satisfac anumite condi ii pentru a fi acceptat. Totalitatea submul imilor de acest tip formeaz solu iile posibile (SP) ale problemei. Dintre solu iile posibile, pe baza unui criteriu suplimentar de alegere, se selecteaz o singur solu ie, numit solu ie optim (SO). Metoda nu caut s determine toate solu iile posibile i s aleag una optim, conform criteriului de optimizare dat, (ceea ce necesit timp de calcul i spa iu de memorie mari) ci const n alegerea pe rnd a cte unui element, urmnd s-l introduc (s-l nghit), eventual, n solu ia optm (de aici i numele metodei: greedy = lacom). Un exemplu de aplicare a acestei metode este problema rucsacului: un excursionist se pregtete pentru a face o excursie; pregtete tot ce are nevoie i constat c lucrurile nu ncap toate n rucsac (ca volum sau cantitate). Ce s fac? Cum obiectele nu sunt toate de aceeai necesitate, i evident de volum diferit, alege, pe rnd, cte un obiect de necesitate maxim i de volum minim i l pune n rucsac. Procedeul se va relua pn la umplerea rucsacului. Fie deci SP mul imea solu iilor posibile ale problemei, solu ii ce au propropietatea de monotonie. Dac B SP i C B atunci C SP. Deci

3-46

Reprezentarea i construirea algoritmilor

orice submul ime C a unei solu ii posibile este de asemenea solu ie posibil. Vom presupune c mul imea vid este ntotdeauna solu ie posibil SP. Metoda Greedy trateaz acest tip de probleme n dou moduri, care n esen sunt asemntoare, diferen a constnd n ordinea opera iilor:

Metoda Greedy 1
Se pleac de la solu ia vid. Se alege, pe rnd, ntr-un anumit fel, un element din A, neales la paii preceden i. Dac adugarea lui la solu ia par ial, construit anterior, conduce la o solu ie posibil se construiete aceast solu ie prin adugarea elementului.

Procedura GREEDY1(A,n,B) B For i = 1,n Call ALEGE(A,i,x) Call POSIBIL(B,x,v) If v = 1 Then Call Adaug(B,x) Endif Repeat Return End

Unde procedura ALEGE furnizeaz elementul x = aj , aj a1,a2, ., an i efectueaz interschimbarea ai aj. Procedura POSIBIL furnizeaz n variabila v valoarea 1 dac B x este solu ie posibil sau 0 n caz contrar. Procedura ADAUG nlocuiete pe B prin B x. Se observ c dac procedura POSIBIL efectueaz verificrile date prin enun ul problemei, n procedura ALEGE, persoana care realizeaz algoritmul, va trebui s stabileasc un criteriu conform cruia alegerea s conduc n final la solu ia optim.

Reprezentarea i construirea algoritmilor Metoda Greedy 2

3-47

Se procedeaz ca n cazul metodei Greedy 1, cu excep ia faptului c se stabilete de la nceput (i nu dinamic) ordinea n care trebuie considerate elementele.
Procedura GREEDY2(A,n,B) Begin Call PREL(A) B i=1 v0 While i n Call POSIBIL(B,x,v) If v = 1 Then Call ADAUG(B,x i) Endif i=i+1 Endwhile End Return

Procedura PREL efectueaz o permutare a elementelor mul imii A pe baza criteriului stabilit. Un exemplu tipic de problem la care se pate aplica metoda Greedy l constitui problemele de optimizare, cum ar fi determinarea maximului unei func ii de cost. Ideia general a metodei este de a alege la fiecare pas acel element care face s creasc ct mai mult valoarea func iei obiectiv. Metoda prezint anumite dezavantaje. Pe de o parte, exist dificult i n alegerea elementului, iar pe de alt parte, se pune ntrebarea dac prin maximizri succesive se ajunge ntr-adevr la maximul global (lucru care n general nu este adevrat). De aceea metoda Greedy trebuie privit doar ca o surs a unei ideei, urmnd s se determine apoi dac solu ia ob inut este optim.

Exemplul 1: Se consider o mul ime X x1,x2, ., xn de elemente reale. Se pune problema determinrii unei submul imi Y a lui X astfel ca y s fie
y Y

maxim. Se observ c dac dac o mul ime Y con ine un element yo0 atunci suma elementelor lui Y-{yo} este mai mare sau egal cu suma

3-48
elementelor lui Y:

Reprezentarea i construirea algoritmilor

yY { y0 }

y . Din acest motiv se va accepta faptul


yY

c o submul ime Y X cu toate elementele pozitive, este o solu ie posibil. Se va utiliza procedura Greedy1 n care: Procedura ALEGE furnizeaz x = ai Procedura POSIBIL atribuie lui v valoarea i dac ai>0 i 0 n caz contrar k reprezint numrul final de elemente din Y
Procedure SUBP(x,y,n,k) Array x(n), y(n); k=0 i=1 while i n if xi > 0 then endif i=i+1 endwhile end k=k+1 yk = xi

Aplica ie economic
O persoan dispune de o anumit sum de bani pe care o poate investi n mai multe obiective. Se consider urmtoarele nota ii: S suma total posibil de investit n numrul de obiective sj suma necesar pentru obiectivul j, cu

s
j =1

>S

ej eficenta investi iei j xj variabil decizional cu valoare 0 sau 1 Se dorete s se selecteze obiectivele n care se poate investii n limita sumei disponibile i care s conduc la o eficien maxim. Modelul va fi urmtorul:

max e j x j
j =1

Reprezentarea i construirea algoritmilor

3-49

s
j =1

xj S

cu x j {0,1}

Presupunem obiectivele ordonate dup criteriul Procedura va fi: Procedure Greedy(e,s,S,x) B=0 SUM=0 EF=0 While j n Begin If SUM+sj < S Then B = B sj EF=EF+ej xj = 1 xj = 0

e e1 e2 ... n s1 s 2 sn

Else Endif j=j+1 End Endwhile End

3.3.3.2. Metoda Divide et impera


Este o metod general de elaborare a algoritmilor care const n mpr irea repetat a unei probleme de dimensiune mai mare n dou sau mai multe subprobleme de acelai tip, urmat de combinarea solu iilor subproblemelor rezolvate pentru a ob ine solu ia problemei ini iale. Se presupune un vector A = (a1,,an) asupra elementelor cruia trebuie efectuat o prelucrare oarecare. Mai mult, se presupune c pentru orice p, q naturali cu 1 p < q N, exist m {p,,q-1} astfel nct prelucrarea secven ei {ap,,aq} se poate face prelucrnd secve ele {ap,,am} i {am+1,,aq} i apoi combinnd rezultatele pentru a ob ine prelucrarea dorit a ntregii secven e.

3-50

Reprezentarea i construirea algoritmilor

Deoarece subproblemele rezultate prin separare sunt de acela tip cu cea ini ial, problema se exprim n mod uzual prin urmtoarea procedur :

procedure divimp(p, q, ) if q p then call prel(p, q, ) else call div(p, q, m); call div(p, m, ) call divimp(m+1, q, ) call comb(, , ) endif return end
Procedura descris trebuie apelat prin call divimp(1,N,), n ob inndu-se rezultatul final i unde: este lungimea maxim a unei secven e {ap,,aq} notat prescurtat prin (p, q), pentru care prelucrarea se poate face direct, fr a mai fi necesar mpr irea n subprobleme; procedura prel relizeaz prelucrarea secven elor de acest tip, furniznd rezultatul n . procedura comb realizeaz combinarea rezultatelor , ale prelucrrii a dou secven e vecine, ob inndu-se rezultatul . Valoarea m este ob inut aplicnd procedura div. Exemplu - sortarea prin interclasare: trebuie sortat cresctor un ir A=(a1,,an). Procedura div va furniza valoarea m=[(p+p)/2]. Vom lua = 1 deoarece e uor de scris o procedur prel care s ordoneze un subir de tipul {ai, ai+1}. Procedura comb va interclasa subirurile deja sortate {ap, ... , am} i {am+1, ..., aq} furniznd rezultatul sortrii subirului {ap, ... , aq}.

3.3.3.3. Metode euristice


Algoritmii i metodele prezentate anterior sunt neeficien i pentru probleme grele, combinatoriale i de dimensiuni mari. Aceasta deoarece timpul de rezolvare i /sau memoria intern necesar este exponen ial n raport cu dimensiunile problemei. n aceste situa ii, pentru astfel de probleme, se accept utilizarea unor algoritmi despre care nu tie sau nu s-a demonstrat deocamdat c sunt optimali, dar care furnizeaz rezultate acceptabile ntr-un timp mai scurt

Reprezentarea i construirea algoritmilor

3-51

i cu un consum mai redus de memorie. Datorit importan ei mari a criteriului timp n raport cu spa iul de memorie necesar, se va avea n vedere criteriul timp.
Un algoritm se numete euristic dac are urmtoarele propiet i: furnizeaz, de obicei, solu ii bune dar nu neaprat optime poate fi implementat mai uor i permite ob inerea rezultatelor n timp rezonabil, n orice caz mai scurt dect cel cerut de orice algoritm exact cunoscut. O idee frecvent utilizat n elaborarea algoritmilor euristici, const n descompunerea procesului de cutare a solu iei n mai multe subprocese (etape) successive i cutarea solu iei optime a fiecreia n parte (presupunnd c fiecare subproces este suboptimal). Aceast strategie nu conduce ns ntotdeauna la o solu ie optimal, deoarece optimizarea local nu mplic, n general, optimizarea total (sau optimul par ial nu coincide cu optimul general). Deoarece un algoritm elaborat pe baza metodei Greedy care furnizeaz o solu ie care nu este optim (sau nu I se poate demonstra optimalitatea) este un algoritm euristic. Pentru elaborarea unui algoritm euristic se pun n eviden toate condi iile pe care le satisface o solu ie exact i se impart condi iile n dou sau mai multe clase conform unor criterii. Aceste criterii pot fi facilitatea satisfacerii condi iilor i necesitatea satisfacerii lor. Din aceste puncte de vedere condi iile pot fi: condi ii uor de ndeplinit condi ii dificil de ndeplinit (se poate accepta ndeplinirii primelor) o condi ii necesare (nendeplinirea lor mpiedic ob inerea unei solu ii posibile) o condi ii pentru care se poate accepta un compromis, n sensul c ele pot fi nlocuite cu alte condi ii care permit apropierea de o solu ie optimal (eventual optim)

n aceast situa ie satisfacerea condi iilor necesare e obligatory ar calitatea solu iei depinde n mare msur de compromisul adoptat pentru condi iile din a doua categorie. Men ionm c: algoritmii euristici sunt utili pentru utilizri sporadice, unice, deoarece efortul determinrii solu iei optime este prea mare fa de ctigul ob inut

3-52

Reprezentarea i construirea algoritmilor


algoritmii euristice furnizeaz solu ii aproximative dar i algoritmii analizei numerice au solu ii aproximative, fr a lua n considerare propagarea erorilor de rotunjire, greu controlabile, care pot transforma un process convergent ntr-unul divergent.

De exemplu, n problema ordonan rii opera iilor pe o main, n graful din figura 3.32 nodurile reprezint reperele de ordonan at, iar arcele sunt tranzi ii posibile ntre acestea. O secven posibl de prelucrare este dat de un drum care parcurge fiecare nod o singur dat. Matricea T con ine timpii de trecere de la o opera ie i la alta j.
1 2

T =

0 1 3 4 7 2

2 0 3 3 2 4

5 4 0 2 5 3

6 3 5 0 2 4

3 7 2 1 0 3

1 5 4 5 4 0

Figura 3.32 Reprezentarea problemei de odonan are

Pornim de la produsul 1 (nodul 1) elementul minim pe linia 1 este t16 =1 (coloana 6), marcm arcul 1-6.
1 2

Figura 3.33 Determinarea solu iei

n linia 6 elementul minim este t51 dar avem voie s facem ciclu numai cnd au fost parcurse toate produsele. Deci alegem minimul urmtor t63 = 3 (se putea alege t65 =3) marcm arcul 6 3.

Reprezentarea i construirea algoritmilor

3-53

n lina 3 avem elementul minim t35 =2, din linia 5 avem elementul minim t52 sau t54 =2. Marcm arcurile 3-5 si 5 2. La sfrit, n linia 2, minimul este atins de t21 =1 dar nu am vizitat nc nodul 4, aa c alegem elementul t24 =4. Avem ordona area produselor 1-6-3-5-2-4 iar timpul de pregtire total este = 1+ 3+ 2 + 2 + 3 = 11. Se poate observa c plecnd dintr-un alt nod putem ob ine alte solu ii mai bune sau mai proaste. Execu ia lucrrilor de ctre mai multe procesoare: Fie n procesoare P1, P2, ..., Pn i m lucrri L1, L2, ..., Lm, independente care trebuie efectuate cu ajutorul acestor procesoare n urmtoarele condi ii: - procesoarele pot func iona simultan - orice lucrare poate fi efectuat de ctre orice procesor - o lucrare ini iat de un procesor este continuat de acesta pn la terminare Fie t1, t2, tn duratele executrii celor m lucrri. Se cere o programare a lucrrilor pe procesoare astfel ca ele s se termine, n ansamblul lor, ct mai repede. O programare bine definit este un vector L= {Li1, Li2, ..., Lim} cu {i1, i2, ..., im}={1, 2, ..., m} dac sunt satisfcute condi iile: - primul procesor devenit liber preia prima lucrare neprogramat din L - dac dou sau mai multe procesoare devin libere simultan, cel care preia o lucrare este cel de indice minim - procesoarele intr n lucru fr vreo ntrziere Fie exemplul a trei procesoare i ase lucrri avnd n ordine duratele t1=2, t2=5, t3=8, t4=1, t5=5, t6=1. Programarea L 1 = (L2, L5, L1, L4, L6, L3) necesit un timp total T1 = 12, dar procesoarele P1 i P2 stau mult timp neocupate, deci nu poate fi o programare optim.

3-54

Reprezentarea i construirea algoritmilor

P1 P2 P3 L1

L2 L5 L4 L6 5
Figura 3.34 Programarea L 1

L3 10 12

Programarea L 2 = (L3, L2, L5, L1, L4, L6) are T2 = 8, deci este mai bun i este chiar optim, deoarece durata lui L3 este egal cu 8, deci durata oricrei programri este de cel pu in opt unit i de timp.

P1 P2 P3 L2 L5

L3 L1 L4 L6 5 8 10
Figura 3.35 Programarea L 2

O procedur euristic simpl de rezolvare a problemei const n programarea lucrrilor n ordinea descresctoare a duratelor, care n cazul exemplului conduce chiar la L 2. n general aceast procedur nu conduce la programarea optim; de exemplu fie dou procesoare cu cinci lucrri cu t1=3, t2=3, t3=2, t4=2, t5=2. Conform ordinii descresctoare a duratelor avem (L1, L2, L3, L4, L5), iar programarea optimal este (L1, L3, L4, L2, L5). Se observ c s-a nlocuit condi ia de durat minim greu de satsfcut cu condi ia efecturii prioritare a lucrrilor cu durat maxim. Dar o schimbare a datelor poate produce ndeprtarea de solu ia optimal. Deci algoritmii euristici sunt sensibili la schimbri ale datelor ini iale ale problemei, mai exact schimbri mici n datele ini iale produc apropierea sau ndeprtarea sim itoare de solu ia optim.

Reprezentarea i construirea algoritmilor

3-55

3.3.4. Metode de simulare local


Aceste metode sunt caracteriazte prin faptul ca ele caut ieirile dintr-un optim local i sunt foarte bine paralelizabile pe oricte procesoare paralele. Din aceast grup fac parte metodele de simulare pur, simulare dirijat, simulare de tip clire, tabu, retele neuronale, algoritmi genetici i evolutivi.

3.3.4.1. Simulare pur, simulare dirijat Cutare n spa iul solu iilor.
Analiznd algoritmii deterministici (din analiz numeric sau cercetri opera ionale) i algoritmi stochastici se constat c majoritatea au elemente comune: poresc de la o solu ie ini ial i caut s nbun easc solu ia curent unii algoritmi conduc la optim i acest lucru se poate i verifica, al ii conduc la optim dar verificarea acestui fapt devine practic inposibil, al ii nu pot s conduc la o solu ie optim global. Pornind de la aceste constatri, n literatura de specialitate s-au conturat o serie de cercetri n direc ia nbunt irii algoritmilor clasici sau elaborarea algoritmilor noi. Unele dintre aceste metode vor fi prezentate n continuare. n cele ce urmeaz vom descrie un algoritm cu caracter general pentru procesul de cutare n spa iul solu iilor. Fie problema max {cx | x S } unde S este spa iul solu iilor, x este un element din acest spa iu iar prin cx fiecarui element din S i se asociaz o valoare real care msoar calitatea elementului ntr-un anumit sens. Fie x un punct din S. Vom defini vecintatea punctului prin: V(x) = { x | dist ( x - x) <= r, x S, r R } De exemplu, fie x In , unde I este un interval, x = (x1,x2,...,xn), xi I, i=1,...,n. Vecintatea unui punct x este: V(x) = { x | xj = xj - 1, xj, xj + 1, j=1,...,n} Pentru n = 1 avem intervale unidimensionale xj 1 xj xj + 1 *-----------*-----------* Numrul elementelor din vecinetate esteV(x) = 3n

3-56

Reprezentarea i construirea algoritmilor

Deoarece problema gsirii unui punct ini ial de pornire poate fi complicat, iar mul i algoritmi pleac cu un punct ini ial, nu se preocup de determinarea efectiv a solu iei in iale i nici de existen a ei, cutarea determinist acelor mai bune solu ii este prohibitiv. Cutarea n spa iul solu iilor revine la determinarea punctului x* din vecinetatea punctului x care satisface egalitatea: c x* = { max c x x S V(x) } dup care se stabilete x = x* i se continu cu determinarea unui nou punct x*. Cutrile locale dirijate n spa iul solu iilor se pot ilustra ca n figura 3.36.

Fig. 3.36. Cutri locale dirijate n spa iul solu iilor

Unde dreptunghiurile i cercurile sunt vecintti, iar sge ile indic direc ia n care se efectueaz cutrea, respectiv simularea. Problemele de optimizare ntr-o vecinetate pot fi de asemenea dificile, motiv pentru care se practic o simulare dirijat local n vecinetatea punctului x sau se simuleaz puncte din vecintate care s conduc numai la valori mai bune (figura 3.37.).
2 4

Fig. 3.37. Simulare dirijat local

Aceste procedee reduc numrul punctelor analizate ca solu ii dar cutarea se poate bloca ntr-un suboptim local. Din acest motiv s-au ncercat alte modalit i de simulare, unele din ele fiind prezentate n continuare.

Reprezentarea i construirea algoritmilor

3-57

3.3.4.2. Simulare de tip clire (SA) Simularea de tip clire (simulated annealing) este o metod de cutare n spa iul solu iilor prin simulare dirijat dup curba de rcire a metalelor n timpul clirii (de unde i denumirea metodei).
Clirea simulat este o tehnic de tip Monte-Carlo care poate fi folosit pentru a gsi solu ii n problemele de optimizare. Metoda simuleaz procesul de rcire al metalelor. La temperaturi nalte atomii metalelor sunt liberi s se deplaseze i tind s o fac aleator. Cnd temperatura este sczut nu mai este posibil nici o micare, structura fiind nghe at. Dac rcirea metalului se face treptat, atomii tind s se aeze n punctele de minim energie ( astfel nct energiile dintre atomi s fie minime ). Dac rcirea se face brusc, ansele s se ob in o asemenea pozi ionare a atomilor sunt minime. La orice temperatur dat, este acceptat o nou configura ie a atomilor dac energia sistemului este sczut. Probabilitatea ca la o temperatur dat s se ob in o scdere a energiei este P (E ) = e E / KT , unde K este constanta lui Boltzmann.
Multe probleme de optimizare pot fi considerate ca un numr de obiecte care trebuie planificate astfel nct o func ie obiectiv s fie minimizat. Atomii sunt nlocui i cu obiecte, iar valoarea func iei obiectiv nlocuiete energia sistemului. Sunt create o planificare ini ial, aleatoare, a obiectelor, un cost ini ial (c0) i o temperatur (T0). Permutrile se realizeaz astfel : se aleg aleator obiecte, sunt rearanjate i se calculeaz schimbarea n cost. Dac c 0 , atunci schimbarea este acceptat. Dac c > 0 se calculeaz probabilitatea schimbrii la temperatura T :

P (c ) = e

c / T

Dac probabilitatea este mai mare dect o valoare aleas aleator n intervalul (0, 1), atunci schimbarea este acceptat. Dup un numr de permutri cu succes temperatura este sczut cu o rat de rcire. Legat de algoritmul de tip clire se pun dou intrebri: dac procedura converge? cum se implemanteaz algoritmul adic cine sunt (x,Tk) i cum arat irul de temperaturi Tk. Pentru a rspunde la cele dou ntrebri se pot cita urmtoarele rezultate din literatur. Metropolis a aratt c dac avem ast , ats i (,T) = exp (/T),

3-58

Reprezentarea i construirea algoritmilor

cu T constant ob inem un proces Marcov omogen. Dac alegem probabilitatea de atingere a lui s ecua ia:

f T ( s) = Z T e E ( s ) / T
unde ZT este o constant de normalizare, atunci ob inem comportarea termodinamic a gazelor ideale i deci procedura converge. Dac facem ca Tk s descreasc ncet va dura mult procesul dar ob inem solu ii mai bune fa de varianta de descretere rapid a temperaturii cnd procesul merge repede dar calitatea solu iilor nu este aa de bun. Alegerea irului Tk este deci o problem de imlementare.

Principii de aplicare
Se dau S - mul imea striilor (solu iilor) i func ia E: S -> R, valoarea ataat elementelor din S. Se caut s* S asfel nct E(s*) = min { E(s) s S } sau E(s*) = max {E(s) s S } Presupunem c dispunem de o procedur A , care din starea s S ne duce n starea t S cu probabilitatea ast cu ast > 0 iar t se numete vecinul lui s , (ast) este o matricea stochastic. Fie x i = E(s) - E(t), i T temperatura, x i T variabile reale. Se definete o func ie (x,T) cu proprit iile o < (x, T) <= 1 lim (x, T) =0, cnd T 0 Func ia (x,T) este o probabilitate de aceptare a unei stri. Algoritmul de simulare de tip clire (SA) const din alegerea unui plan de rcire T1 > T2 > ... astfel nct lim Tk = 0 cnd k Ini ializare: (0) se gernereaz arbitrar un punct s S (1) se pune k = 1 Itera ii: (2) se genereaz t S cu probabilitatea ast (3) se calculeaz = E(s) - E(t) (4) dac >= 0 mergi la (7)

Reprezentarea i construirea algoritmilor


(5) se genereaz un numr uniform aleator r , 0<= r <= 1 (6) dac r > (,Tk) atunci mergi la (8) (7) se pune s = t (8) se pune k = k + 1 (9) mergi la (2)

3-59

Observa ie: Algoritmul duce din punctul s n t dac E(t) <= E(s) iar dac E(t) > E(s) starea t este acceptat cu (, Tk) perntru a iei dintr-un optim local ( pasul 5 i 6 din algoritm).

Exemplu
Problema planificrii cursurilor: implic planificarea profesorilor, grupelor de studen i i a slilor astfel nct nici un profesor, sal sau grup s nu apar mai mult de o dat n aceeai perioad. Este posibil s se defineasc o func ie de cost pentru evaluarea unui orar (unei planificri). Aceast func ie este o msur arbitrar a calit ii solu iei. O func ie de cost convenabil calculeaz numrul de conflicte n orice orar dat. Un orar acceptabil are costul zero. Optimizarea, n acest caz presupune minimizarea func iei de cost. Costul fiecrei perioade poate fi exprimat ca suma a trei componente : costul unei grupe, a unui profesor i a unei sli. Aplicarea metodei clirii simulate pentru rezolvarea problemei planificrii cursurilor este destul de direct. Atomii sunt nlocui i de elemente. Energia sistemului este nlocuit cu costul orarului. O alocare ini ial este realizat plasnd elementele n perioade alese aleator. Este calculat costul pentru o temperatur ini ial. La fiecare itera ie o perioad este aleas aleator i tot aleator este selectat un element din ea. Perioada primete denumirea de perioad from. O a doua perioad este selectat (tot aleator) i primete denumirea to. Schimbarea costului este calculat pe baza acestor elemente : 1) costul eliminrii elementului din perioada from; 2) costul inserrii elementului n perioada to. Schimbarea n cost este constituit de diferen a acestor dou elemente. Elementul este mutat dac schimbarea este acceptat. Spre deosebire de tehnica obinuit a clirii simulate, care schimb dou elemente ntre ele, aici un element este eliminat dintr-o perioad i mutat n alta. Aceasta nseamn c perioade diferite vor con ine un numr de elemente diferite.

3-60

Reprezentarea i construirea algoritmilor

Dac o planificare necesit un numr fix de elemente pe perioad, atunci este posibil s se aloce numrul corect n alocarea ini ial i s se schimbe elementele ntre ele.

Concluzii
Paralelizarea algoritmilor de tip clire se poate realiza pe mai multe ci: cutare simultan independent, cutare simultan periodic interactiv, parti ionarea configura iei paralelizare masiv. Metoda de simulare de tip clire este o metod promi toare i tot mai mult utilizat. n prezent se studiaz implementri eficiente pentru diferite probleme de altfel foarte dificile. Algoritmi de tip clire posibili, dup structura vecin ilii unei solu ii sunt de exemplu: S este mul imea tuturor permutrilor. t, s S sunt vecine dac se deosebesc printr-o transpozi ie. Generarea prin Monte Carlo a unor solu ii admisibile. Vecinetatea unei solu ii poate s fie orice alt vecintate. n acest caz avem T = 0 adic simulare pur, caz limit pentru algoritmul de simulare de tip clire. S este format din toate parti iile admisibile iar ( ,T) = 10-6 S este format din toate parti iile admisibile iar (, T) =T 10 log( +1) Algoritmii de simulare de tip clire se mai pot studia i dup planul de rcire ( T1,T2,...,Ti,...).

3.3.4.3. Algoritmi tabu (AT)


Algoritmii Tabu sunt algoritmi perfec iona i pentru cutarea n spa iul solu iilor care evit, de asemenea, blocarea n puncte de optim local, eventual evit cicluri i accelereaz convergen a, impiedicnd revenirea la stri anterioare. Algoritmul Tabu se bazeaz pe doi pai clasici ai algoritmilor de cutare n general. Pasul de determinare a unei solu ii ini iale nu este specific metodei i const din ordonarea elementelor mul imii solu ilor dup un criteriu sau altul i ncrcarea capacit ii, prezentate de o restric ie, pn la refuz (de

Reprezentarea i construirea algoritmilor

3-61

exemplu algoritmul GREEDY2). bunt irea solu iei curente se bazeaz pe o mutare (efectuarea a unei schimbri locale) i pe construirea unei liste tabu. O list Tabu (T) con ine la un moment dat mutrile nepermise n cadrul itera iei curente. Formal avem: T = { s-1 s = sh , h > k - t } unde k este numrul itera iei, s-1 inversa mutrii, sh mutarea de la itera ia h, iar t lungimea listei tabu. Lista tabu nu permite mutri care au fost efecuate n ultimele t itera ii. Algoritmul are o serie de implemntri sofisticate, situa ii n care efectum mutri multiple la o itera ie sau cnd se pleac cu mai multe solu ii ini iale. Paralelizarea algoritmului Tabu se ralizeaz n mod asemntor cu cele prezentate pentru algoritmul de simulare de tip clire i poate constitui singur obiectul unor expuneri.

Principii de aplicare
Se consider o problem de optimizare n urmtorul mod : fiind dat un set S de solu ii fezabile i o func ie f : S -> R , s se gseasc o solu ie i* din S astfel nct f(i*) s fie acceptabil din punct de vedere al anumitor criterii (sau criteriu). n general un criteriu de acceptabilitate pentru o solu ie i* poate fi : f(i*) < f(i) pentru orice i din S. ntr-o astfel de situa ie algoritmul tabu va fi exact ca un algoritm de minimizare, procesul de explorare garantnd c dup un numr finit de pai i* (minimul) va fi atins. Se noteaz cu V* un subset de solu ii n N(i) ( n vecintatea lui i ). Deoarece structura vecint ii lui i depinde de mutrile efectuate pn la pasul k, se va folosi nota ia N(i,k). Se noteaz j = i m , setul de mutri care se pot aplica lui i pentru a ob ine o nou solu ie j. Sunt cazuri n care o mutare tabu aplicat unei solu ii i, poate prea atractiv (de exemplu, ea ne poate conduce la o solu ie mai bun dect cele gsite pn atunci). Se admite o relaxare a algoritmului tabu atunci cnd anumite solu ii tabu par atractive. Aceste condi ii poart denumirea de condi ii de aspira ie. Condi iile de oprire ar putea fi : - N(i, k+1) = - k este mai mare dect numrul maxim de itera ii permis

3-62
-

Reprezentarea i construirea algoritmilor

este evident c s-a atins o solu ie optim.

Algoritmul tabu este descris in continuare : (1) Se alege o solu ie ini ial i din S. Se seteaz i* = i i k = 0 (2) k = k + 1 i se genereaz un subset V* de solu ii n N(i, k) astfel nct nici una dintre condi iile tabu s nu fie violate sau s fie ndeplinite cel pu in una dintre condi iile de aspira ie. (3) Se alege cel mai bun j = i m din V* i i = j. (4) Dac f(i) < f(i*) atunci i* = i (5) Se actualizeaz condi iile tabu i de aspira ie. (6) Dac o condi ie de oprire este ndeplinit, atunci stop. Altfel mergi la pasul (2). Metoda evit blocarea n puncte de optim local, eventual evit cicluri i accelereaz convergen a impiedicnd revenirea la stri anterioare.

Exemplu: Problema alocrii task-urilor la mai multe procesoare: se consider un set de procesoare P = {p1,..., pm} i un set de task-uri T = {t1,..., tn } . Se pune problema determinrii alocrii optime a task-urilor la procesoare.
O solu ie s este definit ca fiind o asignare complet a task-urilor la procesoare, astfel nct fiecare task tk T s fie asignat unui anumit procesor pj P prin func ia de alocare As (tk ) = pj . Dup ncheierea procesului de planificare va exista o list cu task-uri asociat fiecrui procesor. Solu ia ini ial s0 se ob ine printr-un algoritm euristic bazat pe o strategie Greedy. La fiecare itera ie, un task executabil tk T este selectat pentru planificare, lund n considerare constrngerile de preceden . Procesorul pj P care va fi desemnat s-l execute se presupune c se elibereaz primul. Se presupune c task-urile sunt numerotate de la 1 la n n ordine topologic la nceputul procedurii de planificare, astfel nct dac ti este un predecesor al lui tj atunci ti < tj. Pentru ob inerea unei solu ii vecine s N (s ) se ia n considerare un singur proces ti T din lista de task-uri a procesorului A(ti ) i se plaseaz n lista

altui procesor pl P , pl As (ti ) . ntreaga vecintate se ob ine prin mutarea fiecrui task n fiecare pozi ie a listei fiecrui procesor (mai pu in cel ini ial). Cnd un task este transferat spre un nou procesor, el va fi plasat n lista acestuia naintea primului succesor i dup ultimul predecesor al su din lista respectiv.

Reprezentarea i construirea algoritmilor

3-63

Lista tabu: dac cea mai bun mutare ( psursa = A(tk ), tk , pdest = pj ) din solu ia curent deterioreaz func ia de cost (crete timpul total de execu ie), mutarea invers ( pdest , tk , psursa ) va fi interzis un numr de itera ii. Pentru memorarea mutrilor tabu se folosete o matrice m x n, ini ializat cu zero. Oriunde o mutare devine tabu se seteaz elementul (tk , psursa ) la numrul contorului de itera ii plus numrul de itera ii pentru care mutarea este interzis. Criteriile de aspira ie: dac anumite ncercri de mutare (mutri care sunt tabu) conduc la solu ii mai bune, atunci poate fi eliminat clasificarea tabu asociat acestora.

3.3.4.4. Algoritmi neuronali (AN)


Algoritmii neuronali sunt la intersec ia domeniilor care se ocup de cutri n spa iul solu iilor i inteligen artificial. Domeniul const din : Teoria re elelor neuronale Proiectarea re elelor neuronale Aplica ii ale re elelor neuronale.

Fundamente teoretice
Algoritmul se bazeaz pe un sistem dinamic cu topologia unui graf orientat cu intrri i ieiri n fiecare nod. Graful este structurat pe nivele numite layers. Nodurile au memorie local iar prelucrrile se fac n func ie de intrri i de con inutul memoriilor locale. Prelucrarea se produce pe baza unei func ii de transfer. Memoria local con ine ponderi care sunt recalculate la fiecare prelucrare. Modificarea ponderiilor se numete instruirea re elei neuronale iar problema principal este reducere timpului de instruire. McCulloch i Pitts au propus o unitate prag binar ca model de calcul pentru un neuron. O diagram a neuronului McCuloch-Pitts este prezentat n figura 3.38:
w1 w2 . . . wn

Fig. 3.38. Diagrama neuronului McCuloch-Pitts

3-64

Reprezentarea i construirea algoritmilor

Acest neuron calculeaz o sum ponderat de cele n semnale de intrare ale sale, xj, j=1,,n, i genereaz la ieire 1 dac suma este deasupra unui anumit prag , altfel genereaz 0. Matematic, y = f( wjxi -) ,
1
n

unde f este o func ie unitate, iar wj este ponderea asociat intrrii j. Un ansamblu de neuroni artificiali formeaz o re ea neuronal artificial. Exist mai multe tipuri de re ele neuronale : 1. Retele cu propagare nainte (feedforward), n care nu exist bucle n graf. Din aceast categorie fac parte : Perceptronul cu un singur strat; Perceptronul multistrat; 2. Retele recurente, n care exist bucle datorit feedback-ului. Dintre care men ionm : Re ele Hopfield Re ele Boltzmann Re ele Kohonen. Diferitele tipuri de conectivitate implic comportamente diferite. General vorbind, re elele cu propagare nainte sunt re ele statice : fiind dat o intrare ele produc numai un set de valori de ieire, nu o secven de valori. Re elele recurente sunt sisteme dinamice. Cnd se prezint un model la intrare, ieirile neuronilor sunt calculate. Datorit buclei de feedback, intrrile fiecrui neuron sunt modificate, ceea ce determin intrarea re elei ntr-o nou stare. Acest proces se repet pn la convergen . Abilitatea de a nv a este o msur fundamental a inteligen ei. nv area unei re ele neuronale se realizeaz n dou moduri. Cteodat ponderile pot fi setate aprioric de ctre proiectantul re elei, conform unei formulri potrivite a problemei ce trebuie rezolvate. Totui, de cele mai multe ori, re eaua trebuie s determine ponderile conexiunilor pe baza modelelor folosite pentru antrenare. Exist trei modalit i principale de instruire (nv are) pentru re elele neuronale : a) Supervizat re elei i se furnizeaz rspunsul corect pentru fiecare model de intrare (din setul de antrenare); b) Nesupervizat nu necesit un rspuns corect asociat cu fiecare model de intrare (din setul de antrenare);

Reprezentarea i construirea algoritmilor

3-65

c) Mixt combin instruirea supervizat cu cea nesupervizat. n general o parte a ponderilor din re ea este determinat folosind instruirea supervizat, iar cealalt folosind instruirea nesupervizat.

Perceptronul cu un singur strat Re eaua realizeaz o propagare nainte a intrrilor, ntr-un singur pas.
Instruirea perceptronului se bazeaz pe principiul corec iei erorilor. Un perceptron const dintr-un singur neuron cu ponderi ajustabile, wj, j = 1,,n i pragul . Fiind dat un vector de intrare x = (x1, x2,, xn)t, intrarea re elei n neuron este

v = wj x j
j =1

Ieirea y a perceptronului este +1 dac v > 0, altfel est 0. n cazul unei probleme de clasificare n dou clase, perceptronul asigneaz un model de intrare unei clase dac y = 1, altfel modelul este asignat celeilalte clase. Datorit restric iilor de configura ie, re elele cu un singur strat nu sunt capabile s realizeze dect o clasificare pe clase liniar separabile.

Perceptronul multistrat
Re elele multinivel reprezint re ele neuronale feedforward cu cel pu in un nivel intermediar. Aceste re ele pot trata probleme de clasificare neliniare, deoarece determin crearea unor regiuni de decizie mai complexe dect hiperplanul. Prin utilizarea unui numr suficient de mare de niveluri i de unit i pe fiecare nivel este posibil s se formeze orice regiune de decizie. Instruirea re elelor multinivel nu se poate realiza cu ajutorul algoritmilor utiliza i la instruirea re elelor cu un singur strat, deoarece nu se poate calcula direct eroarea la nivelul tuturor unit ilor ascunse. Cel mai cunoscut algoritm de instruire este algoritmul backpropagation, bazat pe metoda gradientului, mai precis pe metoda celei mai rapide descreteri, denumit coborrea gradientului.

Re ele Hopfield
Re eaua Hopfield este un tip de re ea recurent care folosete o func ie de energie a re elei ca instrument pentru proiectarea re elei i pentru n elegerea comportamentului re elei. Acest tip de re ea poate fi folosit pentru rezolvarea problemelor de optimizare combinatorial.

3-66

Reprezentarea i construirea algoritmilor

O re ea Hopfield cu n unit i are dou versiuni : cu valori binare i cu valori continue. Fie vi starea ( ieirea ) unit ii i. Pentru re eaua binar, vi este fie +1, fie 1. Pentru re ele continue vi poate lua orice valoare ntre 0 i 1. Fie wij ponderea conexiunii de la nodul i la nodul j. ntr-o re ea Hopfield, wij = wji, i,j ( re eaua este simetric ), i wii = 0 i. Dinamica pentru re eaua Hopfield binar este : vi = Sgn( wij vj - i) , unde Sgn(x) are ca rezultat +1 dac x 0 i 1 altfel. Dinamica pentru o re ea continu este :

dui = ui + wij g (uj ) Rii dt j

unde ui este intrarea n unitatea i, g este func ia sigmoid, vi = g(ui), iar Ri i sunt constante. Actualizarea dinamic a re elei se poate realiza n dou moduri : sincron i asincron. n prima variant toate unit ile se actulizeaz simultan. Este necesar un ceas central pentru a sincroniza procesul. n cealalt situa ie, cnd actualizarea se face asincron, se selecteaz o unitate ( aleator ) la un moment dat i i se actualizeaz starea. Func ia de energie a unei re ele binare Hopfield aflat ntr-o stare v = (v1,,vn)T este dat de :

E=

1 wijvivj 2 i j
vi

Func ia de energie a unei re ele Hopfield analogice este definit de :

1 1 E = wijvivj + g 1 ( x )dx + ivi 2 i j i Ri 0 i


O propreitate important a acestor func ii de energie este c, pe msur ce starea re elei evolueaz n concordan cu dinamica re elei, energia descrete i, eventual, atinge un punct de minim unde rmne constant. Un asemenea punct de minim n spa iul strilor este deseori numit atractor, datorit faptului c pornind din orice punct (stare) din vecintatea lui, re eaua va evolua spre acest punct. Vecintatea este denumit bazin de atrac ie.

Reprezentarea i construirea algoritmilor


Cele mai importante aplica ii ale re elei Hopfield sunt : a) memorii asociative b) pentru optimizri combinatoriale

3-67

Retele Boltzmann
Combinarea re elelor Hopfield cu metoda clirii simulate a dat natere re elelor Boltzmann. Prin aceasta se dorete evitarea minimelor locale pe care se pot stabiliza re elele Hopfield. Re elele Boltzmann lucreaz cu o func ie de activare stochastic, nu determinist precum re elele Hopfield. Incertitudinea introdus n func ia de activare este propor ional cu un parametru denumit temperatur. Elementul aleator ajut la prevenirea fixrii pe un minim local, dar determin dificult i n fixarea pe orice alt stare, inclusiv pe un minim global. De aceea, se pornete prelucrarea n condi iile unei temperaturi ridicate, urmat de o rcire treptat, dup modelul clirii simulate.

Principii de aplicare
Datorit faptului c re elele Hopfield evolueaz ntotdeauna n direc ia scderii energiei, exist posibilitatea formulrii unei probleme de optimizare combinatorial ca o minimizare a func iei energie. Astfel re eaua Hopfield poate fi folosit pentru a gsi solu ia optimal (sau suboptimal). Dac se presupune, de exemplu, un sistem S, caracterizat cu ajutorul variabilelor de stare S1,...,Sn, fiecare putnd lua valorile 1/0 sau 1, se poate afirma c starea sistemului este dat de tuplul (S1,...,Sn). Fie o func ie de cost E(S) definit pentru acest sistem. Minimizarea acestei func ii se poate realiza cu ajutorul unei re ele Hopfield. Intensita ile conexiunilor sunt coeficien ii ecua iei ptratice a lui E. Pot aprea urmtoarele probleme : - problemele trebuie s accepte forma ptratic; - re eaua poate s se stabilizeze pe un minim local. Procedura de func ionare a unei re ele Hopfield pentru rezolvarea problemelor de optimizare este urmtoarea : (1) se determin o func ie de energie bazat pe restric iile problemei; (2) se compar func ia de energie de la pasul (1) cu func ia de energie a unei re ele Hopfield n scopul determinrii parametrilor re elei; (3) la momentul t = 0: vj(t) = valori ini iale (valori aleatoare mici):

3-68

Reprezentarea i construirea algoritmilor

(4) repet, pentru t > 0 : vj(t+1) = F[ wji vi(t) ] pn la echilibru. Patternul activrilor la echilibru reprezint solu ia optim.

Exemplu: presupunem problema amestecului a cinci componente de produse petroliere x1,x2,x3,x4,x5 urmrindu-se ob inerea cifrei octanice 100. De fiecare dat cnd se ob ine o cifr ocatnic mai mare de 100 experien a se consider reuit i se modific corespunztor ponderiile, iar dac se ob ine cifra octanica mai mic de 100 ponderiile se modific ca atare (n sens opus). Reprezentarea grafic a problemei se poate vedea n figura 3.39.

x1 a1

x2 a2

x3 a3

x4 a4

x5 a5 b

-1

-1

-1

-1

-1

A=b+aixi Da A<0 Nu

Fig. 3.39. Re ea neuronal pentru problema amestecului a cinci componente petroliere

3.3.4.5. Algoritmi Genetici (GA) Introducere


Algoritmii genetici folosesc experien a strmoiilor transmis genetic la urmai. Acetia se bazeaz pe o selec ie natural i pe exploatarea eficient a informa iilor de specialitate acumulate n timp. Pornind de la teoria evolu ionist a lui Darwin, indivizii cu cele mai bune calit i pentru supravie uire vor avea mai mul i urmai crora le vor

Reprezentarea i construirea algoritmilor

3-69

transmite aceste calit i. Aceste calit i sunt variate i difer de la individ la individ, iar pentru compararea indivizilor este necesar o msur comun de apreciere. Aceast msur numit poten ial depinde de modul n care calit ile individuale sunt corelate cu cerin ele mediului nconjurtor. Cum mediul este unul i acelai pentru to i, speciile se orienteaz spre indivizi cu poten ial din ce n ce mai ridicat prin selec ie natural. Totalitatea calit ilor unui individ, calit i care determin poten ialul su se numete fenotip. Fenotipul e determinat de premizele genetice ale individului, care reunite formeaz genotipul; informa ia genotipic este motenit de urmai, iar procesul evolutiv al unei specii trebuie n eles ca un schimb continuu i permanent de material genetic.

Metodele evolu ioniste au ca obiectiv maximizarea unei func ii de mai multe variabile, fiecare lund valori ntr-un anumit interval. Solu ia va fi un ansamblu de valori numerice ale variabilelor extrase din domeniile corepsunztoare.
Solu iile vor juca un rol de indivizi, iar func ia de optimizat va reprezenta mediul. Poten ialul unui individ va fi n acest caz valoarea func iei obiectiv n solu ia corespunztoare. Rezult deci c dac n metodele clasice, la fiecare pas al algoritmului se lucra cu o singur solu ie, o metod evolu ionist opereaz cu o popula ie de indivizi. Indivizii care compun popula ia sunt alei la ntmplare din mul imea tuturor solu iilor problemei i apoi prin procesul ce imit selec ia natural se alege din popula ia curent un numr de supravie uitori care vor constitui izvorul genera iei urmtoare. Selec ia se face astfel ca indivizii cu poten ial mai ridicat (solu ii ce ofer func iei obiectiv o valoare mai mare) s aib anse mai mari de a se numra printer supravie uitori. Indivizii neselec iona i din popula ia curent vom spune c mor, adic sunt omii n considera iile urmtoare. O parte a indivizilor selec iona i sunt supui unor transformri n cadrul unui process de recombinare prin intermediul unor operatori genetici pentru a ob ine noi indivizi. Transformrile simple se numesc muta ii i asigur o anumit variabilitate n interiorul popula iei, adic creaz un nou individ printr-o modificare a valorii unei variabile (noua valoare fiind din domeniul de valori sau intervalul corespunztor variabilei).

3-70

Reprezentarea i construirea algoritmilor

Transformrile complexe sunt ncrucirile (sau muta ii ncruciate) i au rolul de a realiza schimbul de informa ii ntre solu iile combinate (sau indivizi); prin ele se creaz noi indivizi prin combinarea de pr i provenind de la mai mul i indivizi selec iona i (de obicei doi). n urma acestor transformri se ob ine o nou popula ie care la rndul ei este supus transformrilor de mai sus. Dac n timpul procesului iterative este ob inut individul cu poten ialul cel mai ridicat, dupaminarea unui numr suficient de mare de genera ii solu ia cea mai bun gsit este foarte aproape de solu ia optim. Deci metodele evolu ioniste spre deosebire de cele clasice realizeaz o cutare multidirec ional, men innd la fiecare pas o popula ie de solu ii posibile i ncurajnd culegerea de informa ii pe o direc ie sau alta precum i schimbul de informa ii ntre direc ii. Popula ia sufer o evolu ie orientat: la fiecare gnera ie solu iile bune se reproduc, cele slabe mor; mediul ambient reprezentat prin func ia de optimizat clasific solu iile dup poten ialul lor.

Metodele evolu ioniste pot fi diferen iate pentru una i aceeai problem prin: structura S de reprezentare a indivizilor operatorii genetici de recombinare modul de generare a popula iei ini iale modul de tratare a restric iilor popula iei alegerea parametrilor (dimensiunea popula iei, probabilit ile de aplicare a diverilor operatori).
Un algoritm genetic este o procedur evolu ionist n care indivizii sunt reprezenta i prin iruri de valori 0 i 1. Diferen ele esen iale fa de alte metode de cutare sunt: multiparametrizare, cutri din mai multe puncte deodat i aplicarea regulilor probabilistice i deterministice judicios combinate. Algoritmii genetici sunt algoritmi stochastici care folosesc metode de cutare ce modeleaz fenomene naturale: motenirea genetic i lupta pentru supravie uire din teoria darwinian. Primii algoritmi genetici au fost elabora i la sfritul deceniului apte de ctre Holland ca o alternativ la metodele clasice de optimizare. Terminologia este cea specific geneticii, i anume:

Reprezentarea i construirea algoritmilor

3-71

cromozomi: denumire folosit pentru indivizi sau solu ii posibile ale problemei de optimizare, reprezenta i prin vectori binari; to i cromozomii au acelai numr de componente, numr ce depinde de precizia solu iei, adic de precizia dorit n calcule. gene: componentele unui cromozom ordonate liniar; o gen este caracterizat att prin valoarea ei (0 sau 1), ct i prin pozi ia ei n secven . popula ie: algoritmul ncepe prin a selecta arbitrar un numr de vectori binari care vor forma popula ia ini ial P(0); numrul indivizilor care compun popula ia ini ial va fi men inut i pentru genera iile urmtoare P(t), t=1,2, evaluarea poten ialului indivizilor selecta i, sau a unui cromozom v=(v0, v1,,vn) se face prin calculul valorii unei func ii f(xv),
numit func ie obiectiv, unde xv = vi * 2 i .
i =0 n

recombinarea pentru ob inerea de noi indivizi: pornind de la popula ia ini ial, algoritmul genetic utilizeaz doi operatori genetici: muta ia i ncruciarea. Muta ia altereaz una sau mai multe gene ale unui cromozom, valorile acestora schimbndu-se din 0 n 1 sau invers. ncruciarea sau muta ia ncruciat (crossover mutation) implic doi prin i i nseamn concatenarea unei pr i din v1 cu a doua parte din v2 i invers, astfel nct se ob in doi urmai.
bazeaz pe

Fundamentarea teoretic a algoritmilor genetici se reprezentarea binar a solu iilor i pe no iunea de schem.

O schem este un template ce permite explorarea similarit ilor ntre cromozomi. Ea este construit introducnd simbolul * n alfabetul genelor. Schema va reprezenta toate irurile care se potrivesc cu pozi iile diferite de *. Schemele au trei propriet i importante : 1- ordinul - reprezint numrul de valori ale fiecrei pozi ii fixe ( 0 i 1 ) prezente n schem; 2- lungimea de defini ie - este distan a dintre prima i ultima pozi ie fix din ir; 3- poten ialul (fitness-ul) unei scheme S este media poten ialelor tuturor irurilor din popula ie care se potrivesc cu schema S.

3-72

Reprezentarea i construirea algoritmilor

Numrul de iruri ( care se potrivesc cu o schem S ) ntr-o popula ie crete propor ional cu raportul dintre poten ialul (fitness-ul) schemei i poten ialul mediu al popula iei. Aceasta nseamn c o schem deasupra mediei va avea un numr crescut de iruri n genera ia urmtoare, o schem sub medie va avea un numr mai redus de iruri, iar o schem medie rmne la acelai nivel.

Teorema schemei Scheme scurte, avnd un ordin sczut, deasupra mediei vor avea un numr exponen ial de ncercri n genera iile ulterioare.
O consecin imediat a teoremei schemei este c algoritmii genetici exploreaz spa iul de cutare prin scheme de ordin sczut, scurte, care sunt folosite pentru schimbul de informa ii n timpul ncrucirii.

Ipoteza blocurilor constructive un algoritm genetic caut s ob in performan e aproape de optim prin juxtapunerea schemelor scurte, de ordin sczut, numite blocuri constructive. Modalitatea de aplicare a unui algoritm genetic
Parametrii care trebuie stabili i apriori pentru un algoritm genetic sunt: m numrul de gene din componen a unui cromozom POP dimensiunea popula iei a crei evolu ie este simulat Pc probabilitatea de efectuare a unei ncruciri Pm probabilitatea de efectuare a unei muta ii MAX numrul maxim de itera ii. Fie P(t-1) popula ia existent la nceputul itera iei t (t=1,2,..) pentru care s-a efectuat: evaluarea poten ialului fiecrui cromozom f(xv), xvP(t-1) evaluarea poten ialului ntregii popula ii F = f ( xv )
vP ( t 1)

Presupunem c popula ia P(t-1) se reprezint sub forma unei liste {v1, v2, ..., vn} = P(t-1) cu numr de elemente POP = n n itera ia t se pune problema creeri unei noi genera ii i n acest scop se evalueaz mai nti ansa fiecrui individ de a participa la acest lucru; pentru aceasta calculm: probabilitatea de selec ionare a cromozomului vi (i=1,n) f (vi ) pi = (i = 1, n) F probabilitatea cumulat qi pentru cromozomul vi , de forma:

Reprezentarea i construirea algoritmilor

3-73

qi = p1 + p2 + ... + pi (i = 1, n) Selectarea indivizilor popula iei viitoare P(t) se va face astfel: Pentru fiecare i=1,n se generaz un numr aleatoriu r[0,1] i dac qi-1<r<qi atunci selectm cromozomul vi i l renotm vi. n lista P(t-1) un individ poate apare de mai multe ori, mai ales dac are un poten ial ridicat Pentru indivizii selec iona i vi se generaz aleatoriu un numr s[0,1] i dac s<pc selectm vt n vederea ncrucitii. Se ob ine astfel o list mai mic n care un individ poate s apar de mai multe ori, iar lista trebuie s aib un numr par de indivizi; dac numrul nu este par se completeaz un individ ales la ntmplare se stabilesc aleatoriu perechile de indivizi pentru ncruciare i cuplarea lor se face deci la ntmplare. la fiecare pereche se alege n mod aleatoriu punctul de ncruciare i se concateneaz ncruciat pr ile rezultate urmaii rezulta i vor nlocui pr i din list (v1, v2, ..., vn) la care se va aplica operatorul de muta ie Muta ia se realizeaz pornind de la ideea c genele tuturor indivizilor au aceiai ans de muta ie. Deci pentru fiecare individ din list (v1, v2, ..., vn) i fiecare gen a sa vom genera un numr aleator r[0,1]

i dac r<pm gena este mutat (adic din 0 trece n 1 sau din 1 trece n 0). Numrul mediu de cromozomi muta i este de n x pm. Rezultatul ob inut este noua popula ie P(t) i ac iunile descrise se reiau n cadrul unei noi itera ii. La fiecare pas al algoritmului este memorat cromozomul cu cel mai mare poten ial gsit pn la acel moment. La terminarea algoritmului, care are loc dup efectuarea unui numr de itera ii egal cu MAX, cel mai bun individ gsit pe parcurs constituie solu ia problemei; aceast solu ie, n cazul alegerii judicioase a parametrilor, a utilizrii unor scheme complexe de ncruciare i n general n cazul unui proces evolutiv bine condus, este foarte aproape de solu ia optim. Principii de aplicare
Se presupune c se dorete maximizarea unei func ii de k variabile, f(x1,,xk) : Rk R. Se presupune c fiecare variabil xi poate lua valori n intervalul Di = [ai,bi] R i f(x1,,xk) > 0 pentru orice xi D. Se dorete optimizarea func iei f. Se dorete o precizie de ase zecimale pentru valorile variabilelor.

3-74

Reprezentarea i construirea algoritmilor

Pentru a ob ine precizia dorit, fiecare domeniu Di va trebui mpr it n ase intervale (bi - ai) 106. Dac se noteaz prin mi cel mai mic ntreg astfel nct (bi - ai) 106 < 2mi 1, atunci fiecare variabil va fi codificat printrun ir binar de lungime mi . Structura unui algoritm genetic este urmtoarrea : (1) t 0 (2) ini ializare popula ia la momentul t, P(t) (3) evaluare popula ie P(t) (4) dac condi iile de terminare sunt ndeplinite, atunci mergi la (10) (5) t t + 1 (6) selecteaz P(t) din P(t-1) (7) recombin P(t) (8) evalueaz P(t) (9) mergi la (4) (10) terminare n fiecare genera ie evaluarea fiecrui cromozom se face folosind func ia f. Selectarea noii popula ii se face pe baza poten ialului : - se calculeaz poten ialul pentru fiecare cromozom; - se calculeaz poten ialul total pentru ntreaga popula ie; - se calculeaz probabilitatea cumulativ qi pentru fiecare cromozom; - dac r < qi ( r este un numr aleator n intervalul [0,1] ) se selecteaz cromozomul i n noua genera ie. Operatorii de recombinare sunt : ncruciare i muta ie. Aplicarea ncrucirii se poate face pentru fiecare cromozom din popula ie : - se genereaz un numr aleator r n intervalul [0,1]; - dac r < pc (probabilitatea de ncruciare) se selecteaz cromozomul pentru ncruciare. Operatorul de muta ie schimb un bit din 0 n 1 i invers. Se aplic pentru fiecare bit din fiecare cromozom din popula ie (dup ncruciare), astfel : - se genereaz un numr aleator r n intervalul [0,1]; - dac r < pm ( probabilitatea de muta ie ) se schimb bitul.

Exemplu
Considerm o problem de transport liniar. Problema este liniar dac costul transportului este direct propor ional cu cantitatea transportat,

Reprezentarea i construirea algoritmilor

3-75

altfel se spune c problema este neliniar. Trebuie determinat costul minim pentru transportul unui singur produs de la un numr de surse la un numr de destina ii. Deoarece se transpot un singur produs, o destina ie poate s-i primeasc marfa de la una sau mai multe surse. Obiectivul este s se gseasc cantitatea care trebuie transportat de la fiecare surs la fiecare destina ie astfel nct costul total al transportului s fie minim. Presupunem c avem n surse i k destina ii. Cantitatea furnizat de sursa i este sour(i), iar cantitatea cerut de destina ia j este dest(j). Costul transportului unei unit i din i n j este cost(i,j). O reprezentare natural a solu iilor este o structur bidimensional. Cu alte cuvinte, solu ia poate fi reprezentat printr-o matrice V = (vij), 1 i k, 1 jn. Fiecare matrice V, care reprezint o solu ie, trebuie s respecte urmtoarele constrngeri : vij 0 pentru orice i = 1,,k i j = 1,,n , i vij = dest(j) pentru j = 1,,n , j vij = sour(i) pentru i = 1,,n . Func ia de evaluare va fi : eval(vij) = i j vij cost[j][m] Se definesc doi operatori genetici : muta ie i ncruciare. a) muta ie se selecteaz aleator {i1,,ip}, un subset al {1,2,,k}, i {j1,,jq} un subset al {1,2,,n} astfel nct 2 p k, 2 q n. Se creaz o submatrice (p x q) , W=(wij), a matricei V. W se creaz din elementele lui V astfel : un element vij V este n W dac i numai dac i {i1,,ip} i j {j1,,jq}. Se atribuie noi valori elementelor lui W astfel nct constrngerile s fie satisfcute. b) ncruciare se presupune c matricele V1=(v1ij) i V2=(v2ij) sunt selectate ca prin i pentru opera ia de ncruciare. Crearea urmailor, V3 i V4, se face dup urmtorul algoritm : (1) se creaz dou matrici tenporare : DIV = (divij) i REM=(remij). DIV pstreaz valorile medii, rotunjite, ale celor doi prin i, iar REM ine minte dac a fost necesar o rotunjire;

3-76

Reprezentarea i construirea algoritmilor


(2) pe baza faptului c n matrice REM numrul de 1 n fiecare rnd i n fiecare coloan este par, se mparte REM n dou matrici, astfel nct REM = REM1 + REM2; (3) Se construiesc urmaii : V3 = DIV + REM1 V4 = DIV + REM2

3.3.5 Paralelizarea algoritmilor


Complexitatea multor probleme reale i creterea exponen ial a timpului de calcul a condus la inventarea calculatoarelor cu procesoare paralele. Odat ce problema hard pentru procesoare paralele a fost rezolvat s-a pus problema elaborarii algoritmilor pentru utilizara lor eficient. n cele ce urmeaz vom folosi urmtoarele nota ii: p- numarul procesoarelor m(I) - numarul opera iilor de executat paralel la pasul i al algoritmului

Fundamente teoretice Teorema BRENT:


Fie F(x1,x2,...,xk) o formul cu L opera ii aritmetice se poate programa n T etape atunci avem T <= 1 + c*log(L), unde c este o constant ce nu depinde de numrul opera iilor. Observa ie: Formula din teorem se poate programa pe T procesoare paralele.

Teorem: Dac un algoritm A necesit un timp t pentru calcule neparalele i m opera ii de calcul paralelizabil atunci algoritmul A se poate implemnta pe p procesoare n timp de calcul n paralel propor ional cu O(m/p + t). Demonstra ie : Notm cu m(i) numrul opera iilor de executat n paralel n pasul i al algoritmului A. Folosind p procesoare se poate calcula in m(i)/p + 1 timpi. nsumarea fcut dup to i i, 1 i t ob inem m(1)/p+1 + ... + m(t)/p + 1 = m/p + t.
Dou probleme rmn deschise: cum se ob ine m(i) i cum se grupeaz opera iile n p grupe.

Reprezentarea i construirea algoritmilor

3-77

Probleme reale nu constau numai din calcule aritmetice ci i din opera ii logice, de intrare i ieire iar pentru acest caz ne intereseaz de asemenea posibilitatea paralelizrii algoritmilor. O conjectur afirm c probleme raele nu pot fi paralelizate eficient pe mai mult de 10 procesoare.

Principii de aplicare
Se descomune algoritmul n grupe de pai secven ial neparalizabili Se paralelizeaz opera ii Un limbaj extins pentru programarea pe procesoare paralele necesit doar dou comenzi suplimentare : paralel i serie

Exemplu
Fie de calculat expresia E = ((x + y)/(3 y*x)) ( 1/ (y*(x + y)/(3 x*y) + 2) pentu calculul expresiei sunt necesare o serie de opera ii simple. Astfel z3 = 3 - z2 z1 = x + y z2 = y*x z4 = z1/z3 z5 = x + y z6 = y * z5 z7 = y * x z8 = 3 - z7 z9 = z6 / z8 z10= z9 + 2 z11= 1 / z10 z12= z4 - z11 Calculele pot fi reprezentate pe un arbore binar aa cum se poate vedea n figura 3.40.
x + y y * x x + y x * x

y *

2 +

1 /

Fig. 3.40. Reprezentarea calculului unei expresii printr-un arbore binar

3-78

Reprezentarea i construirea algoritmilor

Realizarea paralel a acestor calcule poate fi comandat prin {{ u = (x + y)/(3-x*y)} paralel {v = 1/((y(x+y)/(3-y*x) + 2)}} serie { E = u - v }. Paralelizarea se poate face pe mai multe procesoare, situa ie n care se pune problema echilibrrii utilizrii procesoarelor. Algoritmii clasici nu sunt uor paralelizabili pe oricte procesoare. ---***--Pentru rezolvarea problemelor reale apare necesitatea de alegere i/sau combinare a metodelor prezentate n acest capitol.

You might also like