Sunteți pe pagina 1din 12

7. Algoritmi probabiliti.

Algoritmi genetici -----------------------------------------------------------------------------------------------------------------------

Unitatea de nvare nr. 7


ALGORITMI PROBABILITI. ALGORITMI GENETICI

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

Obiectivele unitii de nvare nr. 7


Dup ce vei parcurge aceast unitate de nvare, vei reui s: stpnii dou noi metode de elaborare a algoritmilor; aplicai cele dou metode pentru a realiza algoritmi ce furnizeaz rapid soluii ale problemei, dar care pot fi i numai aproximative.

Indicaii metodice pentru unitatea de nvare nr. 7


Materialul trebuie parcurs n ordinea sa fireasc, prezentat n continuare. Se recomand conspectarea i notarea ideilor principale, repcum i consultarea bibliografiei pentru detalii i informaii suplimentare. Timpul minim pe care trebuie s-l acordai acestei uniti de nvare este de 8 ore.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 1

7. Algoritmi probabiliti. Algoritmi genetici ----------------------------------------------------------------------------------------------------------------------

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

mare dect 0.999999.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 3

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)

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 5

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:

Dac vom folosi dou puncte de tietur vor rezulta descendenii:

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?

Rspunsurile la test se vor da n spaiul liber din chenar, n continuarea enunurilor

2.

Care sunt caracteristicile algoritmilor probabiliti de tip Las Vegas?

3.

n ce const etapa de selecie ntr-un algoritm genetic?

4.

n ce const etapa de ncruciare ntr-un algoritm genetic?

5.

n ce const etapa de mutaie ntr-un algoritm genetic?

Rspunsurile la acest test se gsesc pe pagina urmtoare.

-------------------------------------------------------------------------------------------------------------------10 Tehnici avansate de programare

7. Algoritmi probabiliti. Algoritmi genetici -----------------------------------------------------------------------------------------------------------------------

7.3. Comentarii i rspunsuri la testele de autoevaluare


Testul 1. 1. Algoritmii de tip Monte Carlo furnizeaz totdeauna un rezultat, care ns nu este neaprat corect, iar probabilitatea ca rezultatul s fie corect crete pe msur ce timpul disponibil crete. 2. Algoritmii de tip Las Vegas nu furnizeaz totdeauna un rezultat, dar dac furnizeaz un rezultat atunci acesta este corect, iar probabilitatea ca rezultatul s fie corect crete pe msur ce timpul disponibil crete. 3. Etapa de selecie urmrete pstrarea (chiar multipl) a celor mai performani indivizi (cromozomi) ai populaiei curente, dar incluznd i factorul aleator. 4. Etapa de ncruciare (crossover) const n selectarea unei subpopulaii a populaiei curente i recombinarea a cte doi indivizi din subpopulaie. 5. Etapa de mutaie const n selectarea unei subpopulaii a populaiei curente i aplicarea unor mici perturbri cromozomilor din aceast subpopulaie.

-------------------------------------------------------------------------------------------------------------------Tehnici avansate de programare 11

7. Algoritmi probabiliti. Algoritmi genetici ----------------------------------------------------------------------------------------------------------------------

7.4. Lucrare de verificare pentru studeni


Scriei cte un program ce folosete algoritmi probabilistici sau genetici pentru rezolvarea celor trei probleme de mai jos: 1. Acul lui Buffon (vezi exemplul 1 de mai sus) 2. Problema celor n regine (vezi exemplul 7 de mai sus) 3. Ghicirea interactiv a unei permutri folosind un algoritm genetic (vezi exemplul 8 de mai sus) 4. Maximul unei funcii folosind un algoritm genetic (vezi exemplul 9 de mai sus) Rezolvrile, dar i dificultile ntmpinate, vor fi expediate prin mail tutorelui.

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

-------------------------------------------------------------------------------------------------------------------12 Tehnici avansate de programare

S-ar putea să vă placă și