Documente Academic
Documente Profesional
Documente Cultură
Cuprins
Introducere .......................................................................................................................... 2 7.1. Algoritmi probabiliti...................................................................................................... 6 7.2. Algoritmi genetici .......................................................................................................... 6 7.3. Comentarii i rspunsuri la testele de autoevaluare ................................................... 10 7.4. Lucrare de verificare pentru studeni .......................................................................... 11 7.5. Bibliografie .................................................................................................................. 12
Introducere
n multe probleme, n timpul rezolvrii, putem ajunge la un moment dat n situaia de a avea de ales ntre mai multe variante de continuare. Am vzut c n aceast situaie putem analiza pe rnd variantele, putem ncerca s determinm varianta optim i s o urmm etc. Algoritmii probabiliti adopt o alt abordare: se alege aleator una dintre variante. Vom vedea c n unele situaii aceast abordare poate conduce la determinarea mai rapid a unei soluii (exacte sau aproximative). Pentru alegerea aleatoare se presupune c avem la dispoziie o funcie random, care ntoarce o valoare aleatoare dintr-un interval [a,b) de numere reale sau dintr-o secven a,a+1,...,b de numere ntregi consecutive. Este evident c la executri diferite ale unui algoritm probabilist, rezultatele sunt n general diferite. Algoritmii genetici sunt tot algoritmi probabiliti, dar de o natur complet diferit, dup cum vom vedea n continuare. Algoritmii genetici reprezint tehnici de cutare i optimizare. Denumirea lor se datoreaz prelurii unor mecanisme din biologie: motenirea genetic i evoluia natural pentru populaii de indivizi.
7.1.
Algoritmi probabiliti
Exist trei categorii mari de algoritmi probabiliti, pe care le prezentm n continuare.
7.1.1 Algoritmi numerici Algoritmii de acest tip sunt caracterizai prin urmtoarele: - urmresc determinarea aproximativ a unei valori; - cu ct timpul alocat executrii algoritmului este mai mare, precizia rezultatului se mbuntete. Exemplul 1: Acul lui Buffon Se consider o mulime de linii paralele astfel nct oricare dou linii vecine sunt la distan de o unitate. Un ac (segment) de lungime o jumtate de unitate este aruncat aleator i se numr de cte ori a intersectat o linie. Se poate demonstra c probabilitatea ca acul s intersecteze o linie este 1/. Practic, dup un numr "suficient de mare" de ncercri, raportul dintre numrul total de ncercri i numrul cazurilor n care acul a intersectat vreo linie va fi "suficient de aproape" de . Exemplul 2: Se arunc repetat cu o sgeat ntr-un panou ptrat. Se presupune c sgeata nimerete totdeauna panoul. Atunci raportul dintre numrul cazurilor n care sgeata nimerete n cercul nscris n ptrat i numrul -------------------------------------------------------------------------------------------------------------------2 Tehnici avansate de programare
7. Algoritmi probabiliti. Algoritmi genetici ----------------------------------------------------------------------------------------------------------------------total de ncercri tinde la /4, numr egal cu raportul dintre aria cercului nscris n ptrat i aria ptratului. Exemplul 3: Dat fiind o funcie f:[a,b][c,d], se cere determinarea
(x)dx . aproximativ a valorii I= f
a b
Un algoritm probabilist de tip numeric pentru determinarea valorii lui I este urmtorul: s 0 for i=1,n x random([a,b]); s s+f(x) s s.(b-a)/n write(s) 7.1.2 Algoritmi Monte Carlo Algoritmii de acest tip urmresc determinarea unei soluii exacte i sunt caracterizai prin urmtoarele: - furnizeaz totdeauna un rezultat, care ns nu este neaprat corect; - probabilitatea ca rezultatul s fie corect crete pe msur ce timpul disponibil crete. Exemplul 4: Se consider vectorul x=(x1,...,xn) cu elemente distincte. Se cere determinarea unui element al vectorului care s fie mai mare sau egal cu media aritmetic a celor n numere. Problema are sens dac valoarea lui n este foarte mare, iar timpul avut la dispoziie este mic (n caz contrar alegem, n timp liniar, cel mai mare element al vectorului, care satisface evident condiia dat). Un algoritm probabilist, de tipul Monte Carlo, este urmtorul: alegem aleator un element al vectorului i repetm aceast operaie fr a depi timpul disponibil, pstrnd ntr-o variabil v cel mai mare dintre elementele alese. Rezultatul ntors va fi v. S presupunem c n timpul disponibil am analizat k elemente ale vectorului; v este cel mai mare dintre ele. Valoarea v nu ndeplinete condiia din enun numai n cazul cnd toate cele k elemente alese sunt mai mici dect media aritmetic a elementelor lui x. Cum probabilitatea ca un element s fie mai mic dect media aritmetic este 1/2, probabilitatea ca toate elementele (deci i v) s fie mai mici ca media aritmetic este este 1
1 2k
1 2k
Rezult c probabilitatea ca valoarea ntoars de algoritm s fie corect . De exemplu pentru k=20, aceast probabilitate este mai
7. Algoritmi probabiliti. Algoritmi genetici ---------------------------------------------------------------------------------------------------------------------Exemplul 5: Fie G un graf neorientat. Vom nelege prin mutare eliminarea unui vrf mpreun cu toi vecinii si. Se cere numrul minim de mutri prin care se pot elimina toate vrfurile. Aceast problem a fost propus la o olimpiad colar pe timpul cnd programul era rulat pe 10 exemple i se contabiliza numrul de exemple pentru care rezultatul furnizat este corect. Pentru a "aduna" puncte nu este necesar s ne gndim la o soluie efectiv, ci este suficient s aplicm urmtorul algoritm probabilist: - se alege aleator un vrf i se elimin mpreun cu vecinii si; - se repet pasul anterior pe noul graf pn cnd sunt eliminate toate vrfurile; - se memoreaz numrul de mutri efectuat. Se reia algoritmul (fr a depi timpul maxim fixat pentru un test) i se pstreaz cel mai mic numr de mutri. 7.1.3 Algoritmi Las Vegas Algoritmii de acest tip urmresc, ca i algoritmii Monte Carlo, determinarea unei soluii exacte i sunt caracterizai prin urmtoarele: - nu furnizeaz totdeauna un rezultat, dar dac furnizeaz un rezultat atunci acesta este corect; probabilitatea ca rezultatul s fie corect crete pe msur ce timpul disponibil crete. Exemplul 6: Se dau n texte (n foarte mare) cu urmtoarele proprieti: - exist un unic text t0 care apare de cel puin 10% ori; - celelalte texte sunt distincte. Se cere determinarea textului t0 (problema a fost propus la un concurs studenesc A.C.M.). Un algoritm probabilist eficient este urmtorul: repeat i random(1..n); j random(1..n); if ij & ti=tj then write ti; stop until false Probabilitatea ca alegerea unui indice s conduc la textul t0 este 1/10, deci probabilitatea ca s obinem o pereche de indici (i,j) cu ti=tj=t0 este 1/100. Cu alte cuvinte, teoretic sunt suficiente 100 de ncercri, independent de valoarea lui n. Pe de alt parte este posibil ca algoritmul s nu produc vreun rezultat ntr-un interval limitat de timp. Exemplul 7: Problema celor n dame Am prezentat o rezolvare a acestei probleme folosind metoda backtracking. Implementarea i executarea algoritmului corespunztor -------------------------------------------------------------------------------------------------------------------4 Tehnici avansate de programare
7. Algoritmi probabiliti. Algoritmi genetici ----------------------------------------------------------------------------------------------------------------------arat c se ajunge la o soluie n timp "rezonabil" doar pentru valori mici ale lui n (n20). Un algoritm probabilist pentru aceast problem, care furnizeaz rapid o soluie chiar pentru valori ale lui n mai mari dect 100 este urmtorul: - plasm o dam pe prima linie; - presupunnd c am plasat neantagonist cte o dam pe liniile 1,...,k-1, facem un inventar al poziiilor posibile pentru dama de pe linia k i alegem aleator una dintre ele. Exista dou posibiliti: 1) Am reuit s plasm o dam pe linia n. Atunci am determinat o soluie, deci o listm i oprim programul; 2) Am ajuns la o linie k i nu exist poziii posibile. Atunci relum ntreg algoritmul (deci nu ne ntoarcem la linia precedent ca la backtracking). Pentru implementarea algoritmului, trebuie inut o eviden a coloanelor i diagonalelor ocupate (pe care nu putem plasa o dam). Pentru aceasta vom folosi vectorii booleeni NV_SE[-n+1..n-1], NE_SV[2..2n] i C[1..n] ale cror valori ne spun dac o diagonal NVSE, o diagonal NE-SV sau o coloan sunt libere (nu exist plasat o dam pe diagonala sau coloana respectiv). 0 1 -1 n-1 2 3 n+1 n+2
NV_SE -n+1
NE_SV
2n
Observaie:
Dac suntem pe linia k, putem plasa o dam pe coloana i dac este ndeplinit condiia (k,i): Ci liber & NV_SEi-k liber & NE_SVi+k liber. n algoritmul pe care l prezentm n continuare, soluia este obinut n vectorul x=(x1,...xn). repeat repeat
iniializm componentele celor 3 vectori booleeni cu valoarea true
k 1
facem inventarul poziiilor i{1,...,n} cu (k,i)
7. Algoritmi probabiliti. Algoritmi genetici ---------------------------------------------------------------------------------------------------------------------plasm aceste poziii n primele na componente ale unui vector a if na>0 then aleg aleator i{1,...,na}; i ai xk i ; NV_SEi-k false; NE_SVi+k false Ci false; k k+1 until na=0 k=n+1 until k=n+1 write(x)
7.2.
Algoritmi genetici
Algoritmii genetici reprezint tehnici de cutare i optimizare. Denumirea lor se datoreaz prelurii unor mecanisme din biologie: motenirea genetic i evoluia natural pentru populaii de indivizi.
Problema general:
Fie f:D R. Se caut max{f(x) | xD}. Presupunem c mulimea D poate fi pus n coresponden biunivoc cu o mulime C {0,1}r, adic orice element al lui D poate fi codificat ca: x=(x1,...,xr) cu xi{0,1}, i=1,...,r. Vectorul x se numete cromozom. Nu vom lucra cu un singur cromozom, ci cu o populaie de n cromozomi (indivizi), care se transform prin trecerea de la o generaie la alta. Observm deci c spre deosebire de algoritmii iterativi uzuali de optimizare, n care la fiecare etap se trece de la un element din C la urmtorul, n algoritmii genetici la fiecare etap se trece de la o submulime a lui C la o alt submulime a lui C. O alt trstur a algoritmilor genetici este c la trecerea de la o populaie la urmtoarea, cromozomii se combin ntre ei.
Observaie:
O populaie este un multiset (un element poate s apar de mai multe ori). Schimbarea de generaie se face prin selecia din populaia curent a unei subpopulaii i modificarea acesteia prin operaiile de ncruciare (crossover) i mutaie, ce vor fi descrise mai jos. Toate populaiile succesive au acelai numr de indivizi. Algoritmul se ncheie dac s-a efectuat un numr dat de schimbri de configuraii sau dac dup un numr de schimbri de generaie maximul curent rmne neschimbat. Considerm n continuare prima variant.
Notaii: P - populaia curent; P={p1,...,pn} valmax - valoarea maxim curent; xmax - punctul pentru care este atins valmax; -------------------------------------------------------------------------------------------------------------------6 Tehnici avansate de programare
7. Algoritmi probabiliti. Algoritmi genetici ---------------------------------------------------------------------------------------------------------------------- nmax - numrul maxim admis de schimbri de configuraii; pc - probabilitatea de ncruciare; pm - probabilitatea de mutaie; r - lungimea cromozomilor; n=|P|; se mai folosete o funcie J:C R pentru evaluarea performanelor cromozomilor din P. n general J este corespondenta funciei f:D R.
Algoritmul general este urmtorul: P aleator; valmax - for t=1,nmax se calculeaz valorile J(p), pP i se actualizeaz eventual valorile xmax i valmax
etapa de selecie etapa de ncruciare etapa de mutaie
endfor Scopul principal al celor trei etape este de a ne apropia ct mai mult de maxim, dar i de a acoperi prin cutri ntregul domeniu de definiie, pentru a obine maximul general i nu unul local. Etapa de selecie urmrete pstrarea (chiar multipl) a celor mai performani indivizi (cromozomi) ai populaiei curente, dar incluznd i factorul aleator. Pentru selecie se folosete de obicei algoritmul Monte Carlo descris n continuare. Fie P={p1,...,pn} i S= J (xi). Fie si=
i =1 n
J (xi) probabilitatea de S
selecie a cromozomului pi. Deci s1+...+sn=1. Mai considerm valoarea s0=0. De n ori procedm astfel: - generm un numr aleator x n intervalul [0,1); - este selectat acel cromozom pi pentru care este ndeplinit relaia: s0+...+si-1x<s0+...+si Cei n cromozomi selectai vor constitui noua populaie dup etapa de selecie. Se observ c un cromozom poate fi selectat de mai multe ori i de aceea o populaie este un multiset. Algoritmul de mai sus mai este numit i algoritmul ruletei, deoarece lucrurile se petrec exact ca la o rulet mprit n sectoare corespunztoare cromozomilor, de mrimi proporionale cu valorile s1,...,sn: la fiecare rotire (aleatoare) a ruletei se ajunge n dreptul unui cromozom. Etapa de ncruciare (crossover) const n selectarea unei subpopulaii a populaiei curente i recombinarea a cte doi indivizi din subpopulaie. Este folosit un parametru pc[0,1) numit probabilitatea de ncruciare. -------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 7
7. Algoritmi probabiliti. Algoritmi genetici ---------------------------------------------------------------------------------------------------------------------Prin recombinarea (ncruciarea) a doi cromozomi se obin doi descendeni ce au caracteristici ale ambilor prini. O modalitate simpl de ncruciare a doi cromozomi este cea cu un punct de tietur, n care din "prinii": x=(x1,...,xk,xk+1,...,xr) i y=(y1,...,yk,yk+1,...,yr) se obin "descendenii": x'=(y1,...,yk,xk+1,...,xr) i y'=(x1,...,xk,yk+1,...,yr) unde k este ales aleator din secvena 1,...,r-1. n etapa de ncruciare extragem mai nti o subpopulaie Q a lui P, apoi ncrucim cte doi indivizi din Q, dup care adugm noul Q lui P: Q for i=1,n x random([0,1)) if x<pc then P P \ {pi}; Q Q {pi} alegem aleator perechi de elemente din Q i le ncrucim (dac Q nu este par, un element rmne neschimbat) P P Q endfor Exist o mare varietate de modaliti de ncruciare a doi indivizi. Ne mrginim la cele ce folosesc puncte de tietur. Considerm cromozomii:
iar dac vom folosi trei puncte de tietur vom obine descendenii:
cu precizarea c punctele de tietur sunt alese aleator. Etapa de mutaie const n selectarea unei subpopulaii a populaiei curente i aplicarea unor mici perturbri cromozomilor din aceast subpopulaie. Este folosit un parametru pm[0,1) numit probabilitatea de mutaie. O modalitate simpl de mutaie a unui cromozom const n alegerea aleatoare a unei poziii din cromozom i modificarea ei: 01. n etapa de mutaie extragem mai nti o subpopulaie Q a lui P, apoi aplicm mutaia fiecrui cromozom din Q, dup care adugm noul Q la P: Q for i=1,n x random([0,1)) if k<pc -------------------------------------------------------------------------------------------------------------------8 Tehnici avansate de programare
7. Algoritmi probabiliti. Algoritmi genetici ----------------------------------------------------------------------------------------------------------------------then P P \ {pi}; Q Q {pi} pentru fiecare qQ aplicm operatorul de mutaie P P Q endfor Observaii: de obicei pc este de ordinul 10-1 (de exemplu 0.3), iar pm de ordinul 10-3 (de exemplu 0.007). Experienele arat c alegerea lui pc i pm nu are foarte mare importan. Alegerea lor se face i n funcie de lungimea r a cromozomilor; - de regul, n etapa de selecie, cel mai performant individ este reinut i pentru viitoarea configuraie; - n funcia de evaluare (dar nu numai) pot fi folosite distane ca de exemplu: distana euclidian, distana Hamming (numrul de poziii pe care cromozomii difer) sau distana Levenstein (numrul minim de tergeri + adugri + modificri pentru a trece de la un cromozom la cellalt). Ghicirea interactiv a unei submulimi p0 a lui {1,2...,r}. Inter-activitatea const n faptul c pentru fiecare submulime p "calculatorul" ntoarce numrul de poziii pe care p i p0 coincid. O submulime a lui {1,2...,r} poate fi reprezentat ca un vector x{0,1}r cu semnificaia c i face parte din submulime dac i numai dac xi=1. Programul a fost rulat pentru n=r=25, pc=0.3, pn=0.2. Funcia J(p)= numrul de poziii pe care p coincide cu p0 cutat. Variante folosite pentru ncruciare: - cea clasic; - selectm doi indici p1<p2 corespunztoare din cromozomi.
Exemplu 8:
interschimbm
poriunile
Ne oprim dac J(p)n-2. Determinarea soluiei exacte poate fi realizat apoi ncercnd variantele posibile. Exemplu 9: Maximul unei funcii Dorim s determinm valoarea x0 care maximizeaz funcia f:[a,b]R. Pentru x0 sunt cerute k cifre zecimale. Fie r cel mai mic numr natural cu (b-a)10k2r. Atunci vom lucra cu cromozomi c=(c1,c2,...,cr) de lungime r, unde fiecare ci{0,1}. -------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 9
7. Algoritmi probabiliti. Algoritmi genetici ---------------------------------------------------------------------------------------------------------------------Valoarea x[a,b] corespunztoare lui c se calculeaz astfel: - fie x' numrul zecimal egal cu (crcr-1...c2c1)2; x=a+
b a
2r 1
x'.
Programul a fost rulat pentru n=30, r=20, pc=0.25, pm=0.1. Variante folosite pentru crossover: - cea clasic; - modificm ultimele k poziii aleator; - selectm doi indici p1<p2 i interschimbm corespunztoare secvenei de indici p1..p2.
poriunile
Testul de autoevaluare nr. 1 1. Care sunt caracteristicile algoritmilor probabiliti de tip Monte Carlo?
2.
3.
4.
5.
7.5. Bibliografie
[1] Georgescu Horia, Tehnici de programare, Editura Universitii Bucureti, 2005 [2] Cormen T. H. et al. Introducere n algoritmi, Computer Libris Agora, 2000 [3] Parberry Ian, Gasarch William, Problems on Algorithms (2nd Edition), 2002 [4] Cormen T. H. et al. Introducere n algoritmi, Computer Libris Agora, 2000 [5] Skiena Steven, The Algoritm Design Manual, Springer 1998