Documente Academic
Documente Profesional
Documente Cultură
15
Preliminarii
Noţiuni elementare
Selecţia
Mutaţia
Încrucişarea
Evoluţia
Concluzii
Rezumat
Implementări sugerate
În cadrul acestui capitol vom prezenta una dintre cele mai interesante metode probabi-
listice cu ajutorul căreia pot fi rezolvate problemele NP-complete. Vom introduce al-
goritmii genetici şi vom prezenta modul în care pot fi implementaţi aceştia.
15.1. Preliminarii
Algoritmii genetici sunt inspiraţi din teoria evoluţionistă a lui Darwin. Selecţia natura-
lă este adaptată pentru a permite identificarea soluţiilor unor probleme.
O posibilă soluţie este considerată a fi un cromozom. Elementele soluţiei sunt con-
siderate a fi gene. Cromozomii vor evolua în aşa fel încât vor ajunge să descrie soluţia
problemei.
La început vom avea o populaţie de cromozomi care, de obicei, este generată alea-
tor. În timpul unei generaţii cromozomii se vor transforma. De-a lungul generaţiilor, ei
se vor îmbunătăţi şi vor descrie din ce în ce mai bine soluţia căutată.
În cadrul acestui capitol vom exemplifica mecanismul algoritmilor genetici folo-
sind ca exemplu problema determinării clicii maximale a unui graf.
15.2.1. Cromozomii
Aşadar, cromozomii sunt formaţi din gene. Un cromozom va caracteriza o posibilă so-
luţie, în timp ce o genă va caracteriza o componentă a soluţiei.
De exemplu, pentru problema clicii maximale, este convenabil să considerăm cro-
mozomul ca fiind o secvenţă de N biţi. Fiecare bit va corespunde unui nod al grafului.
Valoarea unui bit va fi 1, dacă nodul face parte din clică şi 0 în caz contrar.
Aşadar, fiecare cromozom va caracteriza a clică. În acest moment nu ne punem
problema dacă clica respectivă este validă deci, din acest punct de vedere, nu ne inte-
resează dacă există două noduri între care nu există muchie dar cărora le corespunde o
genă cu valoarea 1.
Populaţia va fi formată din mai multe astfel de secvenţe, fiecare caracterizând o
clică. La fiecare generaţie, clicile vor evolua şi, în final, vom alege o soluţie.
Evident, structura unui cromozom va depinde de problema care trebuie rezolvată.
Şirul de biţi nu va putea fi utilizat, de exemplu, pentru problema ciclului hamiltonian.
Pentru această problemă este posibil să considerăm cromozomii ca fiind permutări ale
mulţimii nodurilor. Ordinea nodurilor în ciclul hamiltonian va fi dată de ordinea aces-
tora în permutare.
15.2.2. Calitatea
Potrivit teoriei darwiniste, în natură supravieţuiesc indivizii cel mai bine adaptaţi. Crite-
riile naturale sunt complexe şi dificil de simulat. Totuşi, ideea de bază rămâne: pentru fi-
ecare cromozom vom încerca să stabilim cât de performant este. Pentru aceasta vom in-
troduce o funcţie de calitate care depinde de configuraţia (structura) unui cromozom.
Pentru problema clicii maximale, alegerea evidentă este dată de numărul nodurilor
care fac parte din clică. Aşadar, funcţia de calitate ar putea fi egală cu numărul biţilor
care au valoarea 1 în reprezentarea cromozomului.
Din nefericire, de data aceasta trebuie să fim siguri că performanţele indivizilor
sunt corect evaluate. Din acest motiv nu mai putem ignora faptul că anumite clici (de
fapt, marea majoritate) nu sunt valide.
206 II. Probleme NP
15.3. Selecţia
După stabilirea calităţii cromozomilor dintr-o anumită generaţie vom începe "construi-
rea generaţiei următoare". Pentru aceasta va trebui să stabilim criteriile potrivit cărora
vom alege cromozomii care vor participa la crearea următoarei generaţii.
Aceşti cromozomi vor forma o aşa-numită piscină de încrucişare şi vor fi utilizaţi
pentru crearea indivizilor din cea mai bună generaţie.
Evident, criteriul de selecţie cel mai convenabil este calitatea cromozomilor. Cu
toate acestea, există mai multe metode care pot fi utilizate pentru a crea piscina de în-
crucişare. Câteva dintre ele vor fi prezentate în cele ce urmează.
15.3.1. Ruleta
În marea majoritate a cazurilor, numărul cromozomilor din piscina de încrucişare tre-
buie să fie egal cu numărul cromozomilor din populaţie. S-ar putea trage imediat con-
cluzia că, în acest caz, întreaga populaţie va fi inclusă în această piscină. Din fericire,
adevărul este cu totul altul: piscina va fi creată pe baza calităţii cromozomilor; la fie-
care pas se va alege un cromozom care va face parte din piscina de încrucişare; după
alegerea unui cromozom, acesta nu este eliminat din populaţie, deci are şanse să fie
ales din nou; aşadar, numărul de copii ale unui cromozom în piscina de încrucişare va
depinde de calitatea acestuia. Ca urmare, vom avea cromozomi care vor apărea de mai
multe ori şi cromozomi care nu vor apărea nici o dată.
Principiul ruletei va fi prezentat în continuare. Fiecărui cromozom îi va corespunde
o "regiune" a ruletei. Regiunea va fi cu atât mai mare, cu cât calitatea cromozomului
este mai mare. Vom învârti apoi ruleta (vom genera un număr aleator) şi vom selecta
cromozomul care corespunde regiunii în dreptul căreia s-a oprit acul ruletei.
Practic, mai întâi vom normaliza funcţia de calitate astfel încât să avem doar valori
strict pozitive (chiar şi cei mai slab adaptaţi indivizi trebuie să aibă şansa lor, indife-
rent cât de mică este aceasta) şi valorile mai mari să corespundă unor indivizi mai bine
adaptaţi. O variantă este să adunăm valoarea absolută a calităţii celui mai puţin per-
formant cromozom la calitatea tuturor cromozomilor. Evident, operaţia are sens doar
dacă avem cromozomi pentru care valoarea funcţiei de calitate este negativă. Cel mai
puţin performant cromozom va avea acum calitatea 0. Din acest motiv, vom mai adu-
na o mică valoare pentru a obţine doar valori pozitive.
După obţinerea calităţilor strict pozitive pentru toţi cromozomii, vom stabili regiuni-
le de pe ruletă. Există două variante: prima dintre ele este determinarea sumei S a calită-
15. Algoritmi genetici 207
ţilor tuturor cromozomilor şi apoi atribuirea pentru fiecare cromozom al unui subinter-
val al intervalului [0, 1). Subintervalele vor fi disjuncte, iar lungimea unui subinterval
corespunzător unui cromozom cu calitatea q va fi q / S. În cazul în care avem doar cali-
tăţi care sunt numere naturale, nu este eficient să introducem numere reale. De aceea,
pentru cea de-a doua variantă, vom atribui subintervale ale intervalului [0, S], iar lun-
gimea unui subinterval corespunzător unui cromozom cu calitatea q va fi chiar q. Se
simplifică astfel calculele care trebuie efectuate pentru stabilirea regiunilor.
După stabilirea regiunilor vom învârti ruleta de N ori. La fiecare pas, vom alege
cromozomul corespunzător regiunii în dreptul căreia se va opri acul. Pentru a simula
învârtirea ruletei, vom genera un număr aleator cuprins între 0 şi 1, sau între 0 şi S, în
funcţie de modul în care au fost stabilite regiunile. În final, vom avea N cromozomi (în
marea majoritate a cazurilor aceştia nu vor fi distincţi) care vor face parte din piscina
de încrucişare.
15.3.2. Turneul
O a doua posibilitate de realizare a selecţiei este "lupta dreaptă" dintre cromozomi.
Avantajul acestei metode constă în simplitatea prin care ea poate fi implementată.
Practic, la fiecare pas vom alege în mod aleator doi cromozomi şi îi vom introduce în
piscina de încrucişare pe cel mai adaptat dintre ei.
Există şi unele dezavantaje ale acestei metode şi anume: cel mai slab cromozom nu
va fi niciodată ales şi se introduce o uşoară notă de determinism.
Bineînţeles, putem construi diverse variante de turnee. De exemplu, putem alege
patru cromozomi care "luptă" într-un turneu cu semifinale şi finale. Evident, procedeul
se poate extinde pentru orice putere a lui 2; putem avea turnee cu sferturi, optimi, şai-
sprezecimi etc. Chiar dacă nu alegem o putere de-a lui 2, tot putem simula turneul.
Vor exista câţiva cromozomi norocoşi care vor trece direct în turul 2.
De asemenea, este posibil să alegem un număr arbitrar k de cromozomi şi să simu-
lăm un turneu în care fiecare luptă cu fiecare.
Pentru a introduce o notă de nedeterminism, putem stabili faptul că victoria într-o
"luptă" nu va reveni imediat celui mai bine adaptat dintre cei doi "combatanţi", ci în-
vingătorul va fi stabilit aleator, dar şansele de a fi ales ale unui cromozom vor depinde
de calitatea sa. Astfel, într-o "bătălie" dezechilibrată, cel mai bine adaptat cromozom
va avea şanse foarte mari, dar în una echilibrată cei doi vor avea şanse aproape egale.
Putem merge şi mai departe simulând turnee cu partide tur-retur în care cromozomul
"gazdă" beneficiază de "ajutorul publicului" (primeşte un bonus) şi orice altceva ne-am
putea imagina. Deşi, imaginaţia poate să conceapă tot felul de turnee, este recomandat ca
acestea să fie cât mai simple, deoarece simularea lor consumă timp preţios.
208 II. Probleme NP
15.4. Mutaţia
Vom începe descrierea operatorilor genetici cu cel mai simplu dintre ei. Mutaţia este
definită ca fiind o alterare minoră a unui cromozom.
Pentru exemplul nostru, o mutaţie ar putea consta în modificarea valorii unuia din-
tre biţi. Practic, printr-o astfel de mutaţie un nod intră sau iese din clică. Evident, în
urma mutaţiei avem un alt cromozom, cu o semnificaţie diferită şi cu o altă calitate.
Este important ca modificarea cromozomului să fie minoră; în caz contrar algorit-
mul genetic va degenera într-un algoritm probabilist clasic. Evident, modul de realiza-
re a mutaţiei depinde de reprezentarea cromozomului. De exemplu, pentru problema
determinării ciclului hamiltonian, o mutaţie ar putea consta într-o inversiune (inter-
schimbarea a două valori) în permutarea reprezentată de cromozom.
15.5. Încrucişarea
Cel de-al doilea operator genetic este încrucişarea. Aceasta constă în alegerea a doi
cromozomi (părinţi) din piscina de încrucişare şi crearea altor doi (fii) pe baza unor
reguli. Cele mai des utilizate metode de încrucişare sunt:
15. Algoritmi genetici 209
Părinte #1
Părinte #2
Fiu #1
Fiu #2
Părinte #1
Părinte #2
Fiu #1
Fiu #2
15.6. Evoluţia
După prezentarea noţiunilor fundamentale, putem descrie principalii paşi care trebuie
efectuaţi de un algoritm genetic pentru ca populaţia de cromozomi să evolueze spre
soluţie:
• crearea populaţiei iniţiale (o singură dată);
• stabilirea calităţii cromozomilor (la fiecare generaţie);
• selecţia cromozomilor pentru piscina de încrucişare (la fiecare generaţie);
• efectuarea mutaţiilor (la fiecare generaţie);
• efectuarea încrucişărilor (la fiecare generaţie);
• crearea noii generaţii (la fiecare generaţie);
• oprirea evoluţiei (o singură dată).
La fiecare generaţie se vor efectua mai multe operaţii, dintre care prima este stabili-
rea calităţii cromozomilor care fac parte din generaţia curentă. Pentru aceasta se va
utiliza o funcţie de fitness adecvată problemei care trebuie rezolvată.
15.6.3. Selecţia
În momentul în care cunoaştem calităţile cromozomilor din generaţia curentă putem
începe procesul de selecţie. Pentru a crea piscina de încrucişare putem utiliza orice
metodă de selecţie care poate fi aplicată pentru problema care trebuie rezolvată.
În funcţie de situaţie, putem combina mai multe metode de selecţie dacă se dove-
deşte că o astfel de abordare este utilă.
15.6.4. Mutaţia
În ciuda faptului că mutaţiile reprezintă alterări minore ale cromozomilor, ele sunt
foarte importante în evoluţia genetică. O mutaţie permite apariţia unei caracteristici
noi care nu este găsită la nici un alt cromozom din populaţie şi care poate duce la solu-
ţie.
Evident, majoritatea mutaţiilor vor fi inutile, dar numărul mic al celor care se do-
vedesc cu adevărat folositoare nu este un motiv pentru care acest operator genetic să
poată fi ignorat.
Se va stabili o probabilitate de mutaţie pentru generaţia curentă (un număr real cu-
prins între 0 şi 1 sau un număr natural cuprins între 0 şi o valoare dată). Şansa ca un
cromozom să sufere o mutaţie va depinde de probabilitatea de mutaţie. Practic, pentru
fiecare cromozom se va genera un număr aleator şi, în cazul în care acesta este mai
mic decât probabilitatea de mutaţie, cromozomul va suferi o mică modificare.
Pentru cromozomii aleşi pentru mutaţie se va aplica operatorul (o mică modificare)
şi noii cromozomi îi vor înlocui pe cei vechi în piscina de încrucişare.
15.6.5. Încrucişarea
Pentru realizarea încrucişării sunt aleşi doi cromozomi din piscina de încrucişare şi
asupra lor se aplică operatorul de încrucişare. Cromozomii fii vor face parte dintr-o
generaţie intermediară. Procesul se repetă până în momentul în care numărul cromo-
zomilor din generaţia intermediară devine N.
Se observă faptul că, datorită alegerii aleatoare a părinţilor, este posibil ca anumiţi
cromozomi din piscină să nu participe la nici o încrucişare, iar alţii să participe la mai
multe.
15.7. Concluzii
Algoritmii genetici au numeroase avantaje şi numeroase dezavantaje. Dacă avem o
implementare corectă, atunci cu siguranţă se va găsi soluţia optimă după o perioadă de
timp. Evident, nimeni nu poate determina această perioadă (ar putea fi miliarde de
ani).
Cel mai mare dezavantaj al acestor algoritmi este timpul relativ mare necesar atât
implementării lor (dimensiunile codului sursă sunt considerabile), cât şi rulării lor
(evoluţia poate dura inacceptabil de mult).
Există câteva aspecte care trebuie luate în considerare în momentul în care se deci-
de utilizarea unui algoritm genetic.
În primul rând, probabilitatea de mutaţie poate fi fixă pe parcursul generaţiilor, dar
în majoritatea cazurilor trebuie să varieze. Este recomandabil ca probabilitatea de mu-
taţie să crească dacă nu se mai realizează îmbunătăţiri şi să scadă în cazul în care îm-
bunătăţirile sunt relativ frecvente (sau să fie resetată la valoarea iniţială atunci când se
detectează o îmbunătăţire).
O populaţie prea mare va necesita multe operaţii la fiecare generaţie, dar o popula-
ţie mai mică poate să îşi oprească evoluţia foarte repede.
15. Algoritmi genetici 213
15.8. Rezumat
În cadrul acestui capitol am prezentat algoritmii genetici; ei pot fi utilizaţi pentru a re-
zolva orice problemă de algoritmică, dar rezultatele depind foarte mult de parametrii
aleşi în timpul implementării.
Am prezentat modul în care teoria supravieţuirii celui mai bine adaptat poate fi uti-
lizată pentru a rezolva anumite probleme. Am introdus noţiunile elementare cu care
operăm în momentul în care construim un algoritm genetic şi anume: populaţie, cro-
mozom, genă, fitness, selecţie, mutaţie, încrucişare, evoluţie etc.
În final, am concluzionat că algoritmii genetici ascund mai multe "capcane" şi pen-
tru utilizarea lor eficientă este necesară o bună cunoaştere a mecanismelor acestora.