Sunteți pe pagina 1din 15

UNIVERSITATEA TEHNIC GH.

ASACHI IAI FACULTATEA DE AUTOMATIC I CALCULATOARE

Algoritmi genetici
Inteligen artificial
- referat -

Chelariu Angela, Topolniceanu Irina, Dumitru Alin

- 2002/2003 -

ALGORITMI GENETICI

1.Introducere. 1.1Calcul evolutiv 1.2. Operatori genetici - calculul evolutiv 2. Algoritmi genetici paradigme ale calculului evolutiv 2.2 Atribuirea fitness-ului 2.3 Structura unui algoritm genetic 2.4 Selecia 2.5 Operatorii genetici 3. Strategii evolutive 3.1 Programare evolutiv 3.2 Programarea genetic 3.3 Concluzii i sfaturi practice 4. Bibliografie

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

ALGORITMI GENETICI

1.Introducere. 1.1Calcul evolutiv n general, orice sarcin abstract care trebuie ndeplinit, poate fi privit ca fiind rezolvarea unei probleme, care, la rndul ei, poate fi perceput ca o cutare n spaiul soluiilor poteniale. Deoarece, de obicei, cutm cea mai bun soluie, putem privi acest proces ca fiind unul de optimizare. Pentru spaii mici, metodele clasice exhaustive sunt suficiente; pentru spaii mari, pot fi folosite tehnicile speciale ale inteligenei artificiale. Metodele calculului evolutiv se numr printre aceste tehnici; ele folosesc algoritmi ale cror metode de cutare au ca model cteva fenomene naturale: motenirea genetic i lupta pentru supravieuire. Cele mai cunoscute tehnici din clasa calculului evolutiv sunt algoritmii genetici, strategiile evolutive, programarea genetic i programarea evolutiv. Exist i alte sisteme hibride care ncorporeaz diferite proprieti ale paradigmelor de mai sus; mai mult, structura oricrui algoritm de calcul evolutiv este, n mare msur, aceeai. n ultimii 30 de ani, s-a manifestat un mare interes n rezolvarea problemelor de sistem bazate pe principiile evoluiei i ereditatii. Astfel de sisteme menin o populaie de soluii poteniale, ele au unele procese de selecie bazate pe fitness individual, i caiva operatori genetici. Un astfel de sistem este o clasa a evoluiei strategice i.e, algoritmi care imita principiile evoluiei naturale pentru problemele de optimizare de parametru(Rechemberg, Schwefel). Evoluia programarii lui Fogel este o tehnica de cautare intr-un spaiu finit, mic de maini. Tehnologiile de cautare a mainii lui Glover Scatter menin o populaie de puncte de referin, generand o stare speciala prin greutatea combinaiilor liniare. Alte tipuri de sisteme evoluionare sunt Hollands Genetic Algorithms. n 1990 Koza a propus un astfel de sistem evoluional, genetic programming, pentru a cauta cel mai potrivit program de computer sa rezolve o problema particulara .Folosind un termen comun E.P pentru toate sistemele(incluznd sistemele descrise mai sus). Structura evoluiei programului este aratat in figura 1. procedura algoritm_evolutiv t0 creare P(t) evaluare P(t) ct timp nu condiia de terminare tt+1 selectare P(t) din P(t-1) modificare P(t) evaluare P(t) sfrit ct timp sfrit procedura -figura 1-

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

n cele ce urmeaz vom explica algoritmul general propus mai sus. Evoluia programului este un algoritm probabilistic ce contine elemente distincte, P(t)={x1t, x2t, ...xnt}. Algoritmii evolutivi menin o populaie de indivizi la fiecare iteraie t. O populaie poate fi privit ca fiind un vector de valori. Fiecare element distinct reprezinta o solutie poteniala a problemei in cauza si in orice program, este interpretat ca S structura de date. Fiecare solutie x1t, x2t,.., xnt este evaluata pentru a da o oarecare masura a fetness-ului sau. Fiecare individ (element al vectorului) reprezint o soluie potenial a problemei i este implementat sub forma unei structuri de date S. Un individ este uneori numit i cromozom. Fiecare soluie este evaluat ca fiind o msur a "fitness-ului" su (speranei de via). Acest fitness reprezint calitatea individului. De obicei, cu ct individul este mai promitor, cu att fitness-ul su este mai mare. Exist unele probleme n cazul crora fitness-ul trebuie s fie minimizat. O nou populaie (iteraia t + 1) se formeaz prin selectarea mai multor potriviri individuale, alegnd cei mai promitori indivizi (pasul de selecie) din populaia curent. O parte din membri populaiei nou formate sufer transformri (pasul de modificare) prin operarea genetica a noilor solutii. Vorbim despre o transformare unica e evoluiei programului. 1.2. Operatori genetici - calculul evolutiv Operatorii genetici sunt, de fapt, proceduri care opereaz asupra elementelor vectorului populaie. Exist doi operatori genetici principali: un operator unar mi de transformare numit mutaie, care creeaz un nou individ printr-o mic modificare a unui individ ales (mi: S S); un operator mai puternic cj numit ncruciare, care creeaz noi indivizi combinnd pri din doi sau mai muli indivizi (cj: S ... SS) (de cele mai multe ori se folosesc doi prini). Dup un anumit numr de generaii algoritmul converge: se sper c cel mai promitor individ ajunge la o valoare ct mai apropiat de soluia optim. n ciuda similaritilor puternice ntre diferitele tehnici de calcul evolutiv, exist i multe diferene. Acestea sunt date, n principal, de structurile de date folosite pentru a reprezenta un individ i de ordinea n care se aplic operatorii genetici. De exemplu, cele dou linii din algoritmul de mai sus: selectare P(t) din P(t-1) modificare P(t) pot aprea n ordine invers: (n strategiile evolutive, nti se modific populaia i apoi este format o nou populaie prin procesul de selecie, in timp ce ntr-un algoritm genetic nti se aplic selecia, iar apoi intr n aciune operatorii genetici de transformare). Decembrie 2001 31Exist, de asemenea, i alte diferene ntre metode. Una dintre acestea ar fi cea referitoare la metodele de selecie care includ: selecia proporional, unde ansa (probabilitatea) ca un individ s fie selectat este proporional cu fitness-ul lui; metoda rangului, n care toi indivizii din populaie sunt sortai n funcie de fitness, iar probabilitatea (ansa) ca ei s fie selectai este fixat de ntreg procesul de evoluie

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

(de exemplu, probabilitatea de selecie a celui mai promitor individ este 0.15, a individului urmtor este 0.14, etc.; cel mai promitor individ are cea mai mare probabilitate i suma total a probabilitilor indivizilor este1); selecia prin turnir (prin concurs) unde un anumit numr de indivizi (de obicei doi) lupt pentru a fi selectai n noua generaie. Aceast competiie (turnir) este repetat pn sunt selectai un numr de indivizi egal cu dimensiunea populaiei. Pentru fiecare dintre aceste categorii de selecie exist i alte detalii importante. Cteva exemple sunt: selecia proporional poate necesita folosirea unor metode de trunchiere; exist diferite moduri pentru stabilirea probabilitii n metoda rangului; dimensiunea mulimii alese pentru concurs poate juca un rol semnificativ n metoda seleciei prin turnir. Trecerea de la o generaie la alta poate fi efectuat n dou variante: algoritm generaional (noua populaie este format doar din descendeni ai vechii generaii); algoritm non-generaional (n noua populaie sunt introdui, de obicei, cei mai promitori indivizi din cele dou populaii, cea a prinilor i cea a descendenilor). Este posibil, de asemenea, s crem puini (n particular, unul singur) descendeni, care nlocuiesc civa (cei mai puin promitori) indivizi. Ca o regul general trebuie reinut faptul c, n majoritatea cazurilor, este de preferat s se utilizeze un model elitist, care pstreaz cei mai promitori indivizi dintr-o generaie i i adaug automat generaiei urmtoare (aceasta nseamn c, dac cel mai promitor individ din generaia curent este pierdut datorit seleciei sau operatorilor genetici, sistemul foreaz apariia lui ntr-o generaie urmtoare). Un astfel de model este foarte folositor pentru rezolvarea multor probleme de optimizare. Totui, structurile de date folosite pentru probleme particulare, mpreun cu o mulime de operatori genetici, constituie componenta esenial a oricrui algoritm evolutiv. Acestea sunt elementele cheie care ne permit s distingem ntre variatele paradigme ale metodelor evolutive. 2. Algoritmi genetici paradigme ale calculului evolutiv Exista o mare clasa a problemelor interesante pentru care inca nu au fost dezvoltati algoritmi rapizi . Multe dintre acestea sunt probleme sunt probleme optimizate care intervin frecvent in aplicatii. Dandu-se o problema prost optimizata este posibil mereu sa gasim un algoritm eficient a carui soluie este aproximativ optimala. Pentru unele probleme prost optimizate putem folosi algoritmi probabilistici acesti algoritmi nu garanteaza valoarea optima, dar prin alegeri aleatoare, suficient de multe slabiciuni a erorilor pot fi facute astfel ncat sa putem trece peste ele. Exista multe probleme importante practic optimizate pentru care asemenea algoritmi, de o nalta calitate, devenind disponibili. n orice caz putem aplica simultan rularea mai multe fire de execuie si competenta amplasarii problemelor VLSI design pentru problemele gen agent comercial. In plus multe alte probleme apartinand unei game largi de probleme optimizate combinatorial pot fi rezolvate aproximativ n ziua de astazi prin computer de genul tehnicilor Monte Carlo. n general, orice proces abstract pentru a fi ndeplinit poate fi gndit ca o rezolvare a problemei, care ,in schimb, poate fi perceputa ca o cautare prin spatiul solutiilor potentiale. Cum suntem in cautarea celei mai bune solutii, putem privi aceasta sarcina ca un proces optimizat. Pentru spatiile mici, metodele clasice executive sunt suficiente; pentru spaiile largi tehnica speciala a inteligenei artificiale trebuie sa fie luata in vedere. Algoritmii genetici sunt printre aceste tehnici; ei sunt algoritmi

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

stohastici a caror metode de cautare modeleaza unele fenomene naturale. Ideea in spatele algoritmilor genetici este de a face ceea ce natura face. nceputurile algoritmilor genetici se situeaz undeva n jurul anului 1950, cnd mai muli biologi au folosit calculatoarele pentru simularea sistemelor biologice. Rezultatele muncii au nceput s apar dup 1960, cnd la Universitatea din Michigan, sub directa ndrumare a lui John Holland, algoritmii genetici au aprut n forma n care sunt cunoscui astzi. Dup cum sugereaz i numele, algoritmii genetici folosesc principii din genetica natural. Cteva principii fundamentale ale geneticii sunt mprumutate i folosite artificial pentru a construi algoritmi de cutare care sunt robuti i cer informaii minime despre problem. Algoritmii genetici au fost inventai folosind modelul procesului de adaptare. Ei opereaz, n principal, cu iruri binare i folosesc un operator de recombinare i unul de mutaie. Prin mutaie se schimb un element (gen) dintr-un cromozom, iar prin ncruciare se schimb material genetic ntre doi prini; dac prinii sunt reprezentai prin iruri de cinci bii, de exemplu (0, 0, 0, 0, 0) i (1, 1, 1, 1, 1), ncruciarea celor doi vectori poate duce la obinerea descendenilor (0, 0, 1, 1, 1) i (1, 1, 0, 0, 0) (acesta este un exemplu al aa-numitei ncruciri cu un punct de tietur). Fitness-ul unui individ este atribuit proporional cu valoarea funciei criteriu corespunztoare individului; indivizii sunt selectai pentru generaia urmtoare pe baza fitness-ului lor. Vom ilustra modul de lucru al algoritmilor genetici cu ajutorul unei probleme simple: proiectarea unei cutii de conserve. Considerm o cutie de conserve cilindric, cu numai doi parametri: diametrul d i nlimea h (evident, pot fi considerai i ali parametri, cum ar fi grosimea, proprieti ale materialului, forma, dar sunt suficieni doar cei doi parametri pentru a ilustra lucrul cu algoritmii genetici). S considerm c aceast conserv trebuie s aib un volum de cel puin 300 ml i obiectivul proiectului este de a minimiza costul materialului folosit la fabricarea conservei. Putem formula problema noastr astfel:

s se minimizeze valoarea funciei unde c reprezint costul materialului conservei per cm2, iar expresia din parantez reprezint suprafaa conservei. Funcia f se mai numete i funcie criteriu (sau funcie obiectiv). Mai trebuie ndeplinit i condiia ca volumul cutiei s fie cel puin 300 ml i vom formula aceasta astfel:

Parametrii d i h pot varia ntre anumite limite: dmin d dmax i hmin h hmax. Reprezentarea soluiei

Primul pas n utilizarea unui algoritm genetic este stabilirea unei codificri a problemei. Codificarea binar este cea mai obinuit dintre tehnicile de codificare; ea este simplu de manipulat i confer robustee problemei. Reprezentarea binar poate codifica aproape orice situaie, iar operatorii nu includ cunotine despre domeniul problemei. Este motivul pentru care un algoritm genetic se poate aplica unor probleme

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

foarte diferite. n cazul codificrii binare, fiecare valoare se reprezint printr-un ir de lungime specificat care conine valorile 0 i 1. n anumite situaii este necesar s utilizm codificarea "natural" a problemei, n locul reprezentrii binare. Un exemplu de codificare natural ar fi codificarea real, care utilizeaz numere reale pentru reprezentare. Pentru a folosi algoritmii genetici la gsirea unor valori optime pentru parametri d i h, care s satisfac condiia prezentat sub forma funciei g i care s minimizeze funcia f, vom avea n primul rnd nevoie de reprezentarea valorilor parametrilor n iruri binare (vom folosi, aadar, o codificare binar a problemei). . Algoritmii genetici nu ne impun numai valori ntregi dintr-un anumit inteval; n general, putem folosi orice alt valoare ntreag sau real, prin schimbarea lungimii irului binar 2.2 Atribuirea fitness-ului Am afirmat anterior c algoritmii genetici lucreaz cu iruri de bii reprezentnd valorile parametrilor i nu cu parametrii nii. Dup ce a fost creat un nou ir (o nou soluie) prin operatori genetici, trebuie s-l evalum. n majoritatea cazurilor, fitness-ul este chiar valoarea funciei criteriu pentru soluia respectiv. Dac obiectivul nostru este de a minimiza funcia criteriu, atunci vom spune c o soluie este mai bun dect alta, dac fitness-ul celei de-a doua este mai mare. 2.3 Structura unui algoritm genetic Vom descrie n continuare structura algoritmilor genetici. Pentru nceput vom stabili urmtoarele: cromozomii utilizai au lungime constant; populaia (generaia) P(t + 1) de la momentul t + 1 se obine reinnd toi descendenii populaiei P(t) i tergnd ulterior cromozomii generaiei precedente (P(t)); numrul cromozomilor este constant. Putem prezenta acum structura algoritmului genetic fundamental: Pasul 1: t 0. Pasul 2: Se iniializeaz aleator populaia P(t). Pasul 3: Se evalueaz cromozomii populaiei P(t). n acest scop se utilizeaz o funcie de performan ce depinde de problem. Pasul 4: Ct timp nu este ndeplinit condiia de terminare se execut paii urmtori: Pasul 4.1: Se selecteaz cromozomii din P(t) care vor contribui la formarea noii generaii. Fie P1 mulimea cromozomilor selectai (P1 reprezint o populaie intermediar). Pasul 4.2: Se aplic cromozomilor din P1 operatorii genetici. Cei mai utilizai sunt operatorii de mutaie i ncruciare. n funcie de problem se pot alege i ali operatori (inversiune, reordonare, operatori speciali). Fie P2 populaia astfel obinut (descendenii populaiei P(t)). Se terg din P1 prinii descendenilor obinui. Cromozomii rmai n P1 sunt inclui n populaia P2. Se construiete noua generaie, astfel: P(t + 1) P2; se terg toi cromozomii din P(t); se execut atribuirea t t + 1; se evalueaz P(t). Condiia de terminare se refer, de regul, la atingerea numrului de generaii specificate. Dac numrul maxim admis de generaii este N, atunci condiia de oprire este t > N. Se admite c rezultatul algoritmului este dat de cel mai promitor individ din ultima generaie. n realitate, nimic nu ne garanteaz c un individ mai performant nu a fost obinut ntr-o generaie anterioar. De aceea, este

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

normal ca la fiecare pas (la fiecare generaie t) s reinem cel mai promitor individ care a fost generat pn atunci. Acest proces se numete elitism. 2.4 Selecia Un rol important n cadrul unui algoritm genetic l ocup operatorul de selecie. Acest operator decide care dintre indivizii unei populaii vor putea participa la formarea populaiei urmtoare. Scopul seleciei este de a asigura mai multe anse de reproducere celor mai performani indivizi dintr-o populaie dat. Prin selecie se urmrete maximizarea performanei indivizilor. n continuare vom prezenta succint cele mai importante mecanisme de selecie. Selecia proporional n cazul seleciei proporionale, probabilitatea de selecie a unui individ depinde de valoarea performanei acestuia. S presupunem c avem o mulime de cromozomi x1, x2, , xn. Pentru fiecare cromozom xi vom calcula performana sa f(xi). Se impune condiia ca f(xi) 0. Suma performanelor tuturor cromozomilor din populaie va constitui performana total i o vom nota cu F. Probabilitatea de selecie pi a cromozomului xi este dat de relaia: Selecia bazat pe ordonare Aceast modalitate de selecie const n a calcula (pentru fiecare generaie) valorile funciei de fitness i de a aranja indivizii n ordinea descresctoare a acestor valori. Se va atribui fiecrui individ i o probabilitate de selecie pi care depinde de rangul su n irul stabilit. Probabilitile depind acum doar de poziia cromozomului. Cel mai promitor individ are probabilitatea 1. Selecia prin concurs Selecia prin concurs sau selecia turnir se bazeaz pe compararea direct a cte doi cromozomi i selectarea celui mai performant. Operaiile implicate sunt urmtoarele: se aleg n mod aleator doi cromozomi; se calculeaz performanele cromozomilor selectai; cromozomul mai performant este selectat (copiat n populaia intermediar asupra creia se aplic operatorii genetici). Alte mecanisme de selecie

Un alt tip de selecie este selecia elitist. n acest caz, la fiecare generaie se pstreaz cel mai promitor sau cei mai promitori indivizi. O alt idee ar fi ca, la fiecare generaie, s fie nlocuit doar o parte restrns a populaiei. 2.5 Operatorii genetici

Descriem n continuare operatorii genetici folosii, de obicei, ntr-un algoritm genetic.

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

Operatorul de reproducere Rolul operatorului de reproducere este de a menine soluiile promitoare din populaie i de a le elimina pe cele mai puin promitoare, pstrnd constant dimensiunea populaiei. Aceasta se realizeaz astfel: se identific soluiile promitoare din populaie; se creeaz mai multe copii ale soluiilor promitoare; se elimin soluiile mai puin promitoare din populaie astfel nct multiplele copii ale soluiilor promitoare s poat fi plasate n populaie. Exist mai multe moduri de a realiza acest lucru. Cele mai uzuale metode sunt selecia proporional, selecia prin turnir i selecia prin ordonare.Este uor de observat c soluiile promitoare au mai mult de o copie n populaia intermediar Operatorul de ncruciare Operatorul de ncruciare este aplicat asupra indivizilor din populaia intermediar. n exemplul nostru, va fi aplicat asupra reprezentrii binare a celor ase elemente pe care le avem n populaia intermediar. Operatorul de ncruciare acioneaz n felul urmtor: sunt alei aleator doi indivizi din populaia intermediar (care se mai numete i piscin de ncruciare) i anumite poriuni din cei doi indivizi sunt interschimbate. Operatorul imit ncruciarea intercromozomial natural. De regul, se utilizeaz operatori de ncruciare de tipul (2, 2), adic doi prini dau natere la doi descendeni. ncruciarea realizeaz un schimb de informaie ntre cei doi prini. Descendenii obinui prin ncruciare vor avea caracteristici ale ambilor prini. Dat fiind importana major a ncrucirii, au fost propuse mai multe modele de ncruciare. Vom enumera aici cteva dintre cele utilizate atunci cnd se folosete codificarea binar. ncruciarea cu un punct de tietur Fie r lungimea cromozomilor. Un punct de tietur este un numr ntreg k {1, 2,..., r - 1}. Numrul k indic poziia din interiorul cromozomului unde secvena cromozomial se rupe pentru ca segmentele obinute s se recombine cu alte segmente provenite de la ali cromozomi. Considerm doi cromozomi: x = x1x2...xkxk+1...xr i y = y1y2...ykyk+1...yr. n urma recombinrii se schimb ntre cei doi cromozomi secvenele aflate n dreapta punctului de tietur k. Cromozomii fii vor fi: x' = x1x2...xkyk+1...yr i y' = y1y2...ykxk+1...xr.

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

De exemplu, dac avem o reprezentare mai sugestiv a celor doi cromozomi:

descendenii vor fi:

ncruciarea cu mai multe puncte de tietur n cazul utilizrii mai multor puncte de tietur, segmentele obinute se combin dup o regul dat. Considerm ncruciarea cu dou puncte de tietur. Acest tip de ncruciare se realizeaz conform schemei de mai jos. Din cromozomii:

vor rezulta doi descendeni de tipul:

n cazul a trei puncte de tietur, descendenii vor fi de forma :

Revenind la exemplul nostru, vom considera ncruciarea cu un singur punct de tietur. De exemplu, din ncruciarea a dou soluii reprezentate prin cutia care are fitness-ul 23, h = 8 i d = 10, respectiv cutia cu fitness-ul 26, h = 14 i d = 6, vor rezulta doi descendeni care vor avea fitness-ul 22, h = 10 i d = 6, respectiv fitness-ul 38, h = 12 i d = 10 dup modelul de mai jos:

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

Trebuie reinut faptul c ncruciarea nu genereaz descendeni aleatori. Dei este improbabil ca fiecare ncruciare ntre dou soluii din populaie s genereze soluii fii mai promitoare dect soluiile printe, totui n scurt timp devine clar c ansa de a crea soluii mai promitoare este mai mare dect n cazul cutrii aleatoare. Din ncruciarea cu un singur punct de tietur a unei perechi de iruri binare, se pot crea doar dou iruri pereche diferite care vor avea n componen bii combinai din ambii prini; soluiile fiu create sunt, probabil, iruri cel puin la fel de promitoare. Prin urmare, nu fiecare ncruciare poate crea soluii la fel de promitoare, dar nu vor fi mai puin promitoare dect prinii. Dac a fost obinut o soluie mai puin promitoare, atunci aceasta nu va mai aprea cnd se va aplica urmtorul operator de reproducere i astfel va avea o via scurt. Dac este creat o soluie mai promitoare, atunci este probabil ca ea s aib mai multe copii la urmtoarea aplicare a operatorului de reproducere. Pentru a pstra o astfel de selecie a irurilor promitoare n timpul aplicrii operatorului de reproducere, nu toate irurile din populaie sunt folosite pentru ncruciare. Operatorul de mutaie Operatorul de ncruciare este, n principal, responsabil cu aspectul de cutare al algoritmilor genetici, n timp ce operatorul de mutaie este folosit pentru alte scopuri. Mutaia este cel de-al doilea operator genetic n ordinea importanei i folosirii sale. Efectul acestui operator este schimbarea valorii unei singure poziii dintr-un cromozom. Prin mutaie se introduc n populaie indivizi care nu ar fi putut fi obinui prin alte mecanisme. Operatorul de mutaie acioneaz asupra biilor indiferent de poziia lor n cromozom. Fiecare bit al cromozomului poate suferi o mutaie. ntr-un cromozom pot exista, aadar, mai multe poziii care sufer o mutaie. Mutaia este un operator probabilist (adic nu se aplic cu siguran). Considerm o populaie de n indivizi (cromozomi), fiecare avnd lungimea r. Fiecare bit are aceeai probabilitate pm de a suferi mutaia. Exist mai multe variante ale operatorului de mutaie. Una dintre ele ar fi mutaia n forma tare. n aceast situaie se procedeaz n felul urmtor: se genereaz un numr aleator q n intervalul [0, 1). Dac q < pm, atunci se execut mutaia poziiei respective schimbnd 0 n 1 sau 1 n 0. n caz contrar, poziia respectiv nu se schimb. Revenind la exemplul nostru, dac aplicm operatorul de mutaie unei soluii obinute n urma procesului de ncruci are, i anume soluiei care are fitness-ul 22, vom obine o alt soluie care va avea fitness-ul 16.

Soluia obinut este mai promitoare dect soluia original. n consecin, operatorul de reproducere selecteaz cele mai promitoare iruri, operatorul de ncruciare combin subiruri din dou iruri promitoare pentru a forma iruri mai promitoare, iar operatorul de mutaie schimb irurile local, de asemenea, pentru a mbunti soluia. 3. Strategii evolutive

Strategiile evolutive au fost dezvoltate ca metode de rezolvare pentru problemele de optimizare a parametrilor. Prima strategie evolutiv a fost bazat pe o populaie constnd dintr-un singur individ. De asemenea, este folosit un singur operator n procesul de evoluie: mutaia. Aceasta este n

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

concordan cu conceptul biologic potrivit cruia modificri mici au loc mai frecvent dect o modificare mare.De obicei aceast strategie conform creia un printe d natere prin mutaie unui singur descendent este cunoscut sub numele de strategie evolutiv 1 + 1. Felul n care se aplic practic acest algoritm este simplu: se genereaz o soluie aleatoare pe domeniul de cutare i se efectueaz mutaii asupra ei.Este acceptat cel mai bun dintre printe i descendent. Operatorul de mutaie se aplic repetat pn cnd se ajunge la soluie. Un alt tip de strategie este strategia ( + ): prini produc descendeni. Noua populaie (temporar) de (+ ) indivizi este redus din nou - printr-un proces de selecie - la indivizi. Pe de alt parte, in strategia (, ), indivizi produc descendeni ( > ) i prin procesul de selecie se alege o nou populaie de indivizi numai din mulimea celor descendeni. Astfel, viaa fiecrui individ este limitat la o generaie. 3.1 Programare evolutiv Tehnicile programrii evolutive originale au fost dezvoltate de Lawrence Fogel. El urmrea o dezvoltare a inteligenei artificiale n sensul dezvoltrii abilitii de a prezice schimbrile ntr-un mediu nconjurtor. Mediul nconjurtor a fost descris ca o secven de simboluri, iar evoluarea algoritmului presupunea obinerea unui nou produs, i anume a unui nou simbol. Simbolul obinut va maximiza funcia final care msoar acurateea prediciei. De exemplu, putem considera o serie de evenimente notate a1, a2, ..., an; un algoritm va determina urmtorul simbol (an+1), bazndu-se pe simbolurile cunoscute a1, a2,..., an. Ideea care st la baza programrii evolutive este de a evolua un algoritm. Ca i n strategiile evolutive, i n tehnica programrii evolutive se creeaz mai nti descendenii i apoi se vor selecta indivizii pentru generaia urmtoare. Fiecare printe produce un singur descendent; deci dimensiunea populaiei intermediare se dubleaz (ca n strategia evolutiv (n, n), unde n este dimensiunea populaiei). Descendentul este creat printr-o mutaie aleatoare a printelui (este posibil s se aplice mai mult de o mutaie unui individ). Un numr de indivizi (cei mai promitori) egal cu dimensiunea populaiei sunt reinui pentru noua generaie. n versiunea original acest proces este repetat pn se obine un nou simbol care este disponibil. Dup ce s-a obinut un nou simbol, acesta este adugat listei simbolurilor cunoscute i ntregul proces se repet. Recent, tehnicile de programare evolutiv au fost folosite pentru rezolvarea problemelor de optimizare numeric precum i n numeroase alte scopuri. 3.2 Programarea genetic

O alt abordare interesant a fost descoperit relativ recent de John Koza . Koza sugereaz c programul dorit va evolua el nsui pe parcursul unui proces de evoluie. Cu alte cuvinte, n loc de a rezolva o problem i n loc de a construi un program evolutiv care s rezolve problema, vom ncerca s gsim un cod surs care s o rezolve. Koza a dezvoltat o nou metodologie care furnizeaz un mod de a efectua aceast cutare. De exemplu, se dorete obinerea unui program Pascal sau C++ care s rezolve problema drumului hamiltonian sau problema ieirii dintr-un labirint. Deci, nu ne intereseaz s obinem o soluie pentru un set oarecare de date, ci, mai degrab, ne intereseaz s obinem un program surs care s genereze o

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

soluie corect pentru orice intrare dat. Cu alte cuvinte, ne intereseaz s obinem ca rezultat un program asemntor cu cel pe care l-am fi putut scrie noi dac am fi tiut s rezolvm problema. Din punct de vedere evolutiv abordarea unor astfel de probleme se face genernd o mulime (populaie) aleatoare de coduri surs care apoi sunt selectate pe baza funciei de fitness i evoluate cu ajutorul unor operatori genetici specifici.n primul rnd trebuie s atribuim o funcie de calitate (funcia fitness) fiecrui program generat. Aceast funcie de fitness trebuie s reflecte performanele programului cruia i este ataat. De obicei ataarea unei funcii de fitness se face rulnd programul respectiv i msurnd calitatea soluiei n raport cu o soluie care se cunoate a fi optim. Un program va avea o calitate mai mare dac soluia generat va fi mai asemntoare cu cea a soluiei corecte. Nu este grav dac o soluie optim nu se cunoate anterior, deoarece noi dorim s obinem soluii cu un fitne ss ct mai mare (sau ct mai mic). Evoluarea programelor surs se realizeaz prin operatori genetici specifici. De exemplu, un operator de recombinare poate nsemna alipirea secvenelor dintr-un cod surs cu secvene din alt cod surs. Un operator de mutaie ar putea nsemna inserarea de noi instruciuni n codul surs, tergerea de instruciuni, transformarea de instruciuni. Evident, n urma aplicrii acestor operatori genetici se genereaz cod surs care conine greeli de sintax. De asemenea, sunt generate secvene de cod surs nefolositoare. Exemple n acest sens sunt secvena de instruciuni: i := i + 1; i := i - 1; sau secvena: a := 0; b := c / a; De obicei, se evolueaz reprezentri mai simple ale programelor de calculator i anume reprezentrile arborescente. Exist limbaje de programare (de exemplu LISP) n care programele sunt scrise sub forma unor liste uor transformabile n arbori. Aplicatie n cele ce urmeaz vom prezenta rezolvarea unei probleme folosind algoritmii genetici Enun (Submulime de sum dat) Se consider o mulime M de n numere i un numr S. S se determine o submulime a mulimii M care are suma elementelor ct mai apropiat de numrul S. Rezolvare Determinarea unei submulimi de sum dat este o problem NP-complet Aceasta nseamn c nu se tie dac exist sau nu un algoritm de complexitate polinomial pentru rezolvarea acestei probleme. Pn n prezent, algoritmii folosii au complexitate exponenial, iar pentru anumite cazuri particulare au complexitate pseudopolinomial.De exemplu, putem rezolva rezonabil aceast problem, dac datele de intrare ndeplinesc urmtoarele condiii: sunt cel mult 100 de numere naturale; suma numerelor nu depete 500 (mai exact, produsul dintre numrul numerelor i suma acestora nu trebuie s depeasc dimensiunea maxim admis pentru alocarea unei matrice (presupunem c aceasta este alocat static).

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

Dac aceste condiii ar fi ndeplinite am putea rezolva uor aceast problem prin metoda programrii dinamice, folosind un algoritm de complexitate O(n S) ). ns, dac numerele nu ar fi ntregi ci reale, sau suma lor ar fi mai mare dect 500, sau diferenele ntre ele ar fi mari etc., atunci algoritmul prin programare dinamic nu mai poate fi folosit. Am enumerat aici doar cazurile importante, dar pot fi imaginate i alte dificulti. Din aceste motive vom rezolva aceast problem cu ajutorul unui algoritm genetic. Va trebui s gsim o reprezentare a soluiei i, de asemenea, o funcie de fitness. Modul n care vom reprezenta soluia ne este dat chiar n enunul problemei: se cere o submulime a unei mulimi M cu n elemente. Deci, o soluie a problemei este o submulime. Vom codifica o submulime printr-un ir de lungime n care conine doar valorile 0 i 1. Dac o poziie k va avea valoarea 1, atunci submulimea respectiv va conine elementul Mk (al k-lea element din mulimea M), iar dac pe poziia k este valoarea 0, atunci elementul respectiv nu aparine submulimii. Aceast reprezentare a unei submulimi este specific tipului set din Turbo Pascal. Modul de calcul al fitness-ului (calitii) unei soluii (submulimi) este simplu. Calculm suma elementelor submulimii, iar fitness-ul va fi diferena (n valoare absolut) dintre suma obinut i numrul dat S. n aceste condiii fitness-ul va trebui minimizat, deoarece noi dorim s determinm o submulime pentru care suma elementelor este ct mai apropiat de valoarea dat S. Structura algoritmului genetic propus pentru rezolvarea acestei probleme a fost prezentat mai sus. Vom folosi selecia turnir pentru obinerea populaiei intermediare. Operatorii genetici folosii sunt specifici codificrii binare (ncruciare cu un singur punct de tietur, mutaie cu probabilitate pm= 0.1). 3.3 Concluzii i sfaturi practice n acest articol au fost prezentate principalele direcii ale algoritmilor evolutivi, in special al algoritmilor genetici. Aplicaiile practice ale acestor algoritmi sunt nenumrate. Ei sunt folosii n domenii tot mai neateptate cum ar fi proiectarea aripilor de avion sau la proiectarea formei staiilor orbitale. Dac ai ales s rezolvai o problem genetic, trebuie s inei cont de cteva sfaturi. Pentru a rezolva o problem cu algoritmi genetici trebuie s o transformai mai nti ntr-o problem de optimizare, adic s se minimizeze sau s se maximizeze o valoare (cel mai scurt lan hamiltonian, cea mai mare component intern stabil etc.). Algoritmii genetici sunt algoritmi euristici, adic soluia gsit de ei nu este ntotdeauna cea mai bun, dar se afl ntr-o vecintate a soluiei optime. Deci, dac avei de ales ntre un algoritm polinomial care rezolv sigur problema i un algoritm genetic, ar fi de preferat s folosii algoritmul polinomial. Algoritmii genetici, de obicei, au complexitate polinomial. De aceea ei sunt foarte des utilizai pentru a rezolva problemele dificile (NP-complete). Rezultatele obinute sunt foarte apropiate de cele obinute de algoritmii siguri, dar care au rulat mii de ore. Dac problema este complex folosii un algoritm genetic i nu o strategie evolutiv. De obicei mutaia este un operator de cutare slab, deci, dac se folosete doar acesta, exist anse mari s se obin o soluii locale i nu globale.

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la

4. Bibliografie 1. Genetic Algorithms + Data Structures = Evolution Programs, Zbigniew Michalewicsz, Second, Extended Edition 2. Beasley D., Bull D.R., Martin R.R., An Overview of Genetic Algorithms, Part 1, Foundations, University Computing, Vol.15, No.4, pp. 170-181, 1993; 3. Dumitrescu D., Algoritmi genetici i strategii evolutive - Aplicaii n inteligena artificial i n domenii conexe, Editura Albastr, Cluj-Napoca, 2000; 4. Goldberg D.E., Genetic Algorithms in Search, Optimization and Machine Learning, Addison Wesley, Reading, MA,1989; 5. Garey M.R., Johnson D.S., Computers and Intractability: A Guide to NP-completeness, W.H. Freeman and Company, New York, 1978. 6. Koza J.R., Genetic Programming, MIT Press, Cambridge, MA, 1992; 7. Oltean M., Proiectarea i implementarea algoritmilor, Computer Libris Agora, Cluj-Napoca, 2000.

B ht ibli tp ot :// ec eu a v C rek irt o a u flo or .cs ala rin do .tu d le nat ia e In on o si t @ r: F .ro elig ya lo /~ e ho rin fle nta o. L on a co eo /b rti m n via fic .h ia tm la