Programarea genetică

O altă abordare interesantă a fost descoperită relativ recent de John Koza .

Koza sugerează că programul dorit va evolua el însuşi pe parcursul unui proces de evoluţie. 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ă găsim un cod sursă care să o rezolve. Koza a dezvoltat o nouă metodologie care furnizează un mod de a efectua această căutare. De exemplu, se doreşte obţinerea unui program Pascal sau C++ care să rezolve problema drumului hamiltonian sau problema ieşirii dintr-un labirint. Deci, nu ne interesează să obţinem o soluţie pentru un set oarecare de date, ci, mai degrabă, ne interesează să obţinem un program sursă care să genereze o soluţie corectă pentru orice intrare dată.

Cu alte cuvinte, ne interesează să obţinem ca rezultat un program asemănător cu cel pe care l-am fi putut scrie noi dacă am fi ştiut să rezolvăm problema. Din punct de vedere evolutiv abordarea unor astfel de probleme se face gener‚nd o mulţime (populaţie) aleatoare de coduri sursă care apoi sunt selectate pe baza funcţiei de fitness şi evoluate cu ajutorul unor operatori genetici specifici.În primul rând trebuie să atribuim o funcţie de calitate (funcţia fitness) fiecărui program generat. Această funcţie de fitness trebuie să reflecte performanţele programului căruia și este ataşată. De obicei ataşarea unei funcţii de fitness se face rul‚nd programul respectiv şi măsur‚nd calitatea soluţiei în raport cu o soluţie care se cunoaşte a fi optimă. Un program va avea o calitate mai mare dacă soluţia generată va fi mai asemănătoare cu cea a soluţiei corecte. Nu este grav dacă o soluţie optimă nu se cunoaşte anterior, deoarece noi dorim să obţinem soluţii cu un fitne ss c‚t mai mare (sau c‚t mai mic). Evoluarea programelor sursă se realizează prin operatori genetici specifici. De exemplu, un operator de recombinare poate însemna alipirea secvenţelor dintr-un cod sursă cu secvenţe din alt cod sursă. Un operator de mutaţie ar putea însemna inserarea de noi instrucţiuni în codul sursă, ştergerea de instrucţiuni, transformarea de instrucţiuni. Evident, în urma aplicării acestor operatori genetici se generează cod sursă care conţine greşeli de sintaxă. De asemenea, sunt generate secvenţe de cod sursă nefolositoare.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s