Sunteți pe pagina 1din 34

1. Bazele teoretice ale calculului evolutiv.

Evoluia cutare direct-cutare


stochastic. Componentele si clasificarea algoritmilor evoluioniti
Introducere
Ideea de a aplica principiile darwiniste ale evoluiei n rezolvarea automat a problemelor
(Problem Solving - PS) dateaz din anii 1940, naintea apariiei calculatoarelor electronice. n
1948 Turing propunea o tehnic de rezolvare a problemelor numit cutare genetic sau
evolutiv. n anii 1960 Fogel, Qwens i Walsh introduceau conceptul de programare evolutiv
(sau evoluionist), n timp ce Holland dezvolta algoritmii genetici. n aceeai perioad,
Rechenberg i Schwefel introduceau strategiile evolutive (evoluioniste) ca modaliti alternative
de rezolvare automat a problemelor. n anii 1990, Koza dezvolt o nou tehnic de cutare n
spaiul soluiilor, programarea genetic. n terminologia actual, ntregul spectru de metode de
rezolvare automat de inspiraie darwinist este desemnat prin termenul de calcul evolutiv
(evoluionist) i include subdomeniile: programare evolutiv, strategii evolutive, algoritmi
genetici i programare genetic.
Calculul evolutiv este un domeniu al informaticii inspirat din procesul evoluiei naturale;
ideea care st la baza calculului evolutiv este conexiunea evoluie natural tehnica de rezolvare
a problemelor de tip experiment-eroare (sau generare-testare). Cu alte cuvinte, ntr-un mediu dat,
indivizii constituii ntr-o populaie intr n competiie pentru a supravieui i a se reproduce.
Abilitatea indivizilor de a-i atinge aceste scopuri n mediul n care triesc este strict corelat cu
ansele lor de supravieuire i multiplicare i determin evoluia n timp a populaiei. n contextul
modalitii de rezolvare a problemelor de tip generare-testare stochastice, populaia este modelat
ca o colecie de elemente candidat la soluie. Calitatea candidailor la soluie, definit n termenii
gradului n care fiecare element rezolv problema, determin ansa lor de a fi meninui i utilizai
pentru construirea unor noi candidai.
Suportul de natur biologic al calculului evolutiv
Teoria evoluionist a lui Darwin ofer o explicaie a diversitii biologice i a
mecanismului care st la baza acesteia. n centrul interpretrii macroscopice a evoluiei este
plasat selecia natural. Considernd un mediu care poate susine un numr limitat de indivizi i
instinctul primar al fiecrui individ de a se reproduce, procesul de selecie este esenial i
inevitabil n controlul dimensiunii populaiei. Selecia natural favorizeaz indivizii cei mai
competitivi n nsuirea resurselor, adic acei indivizi care sunt cel mai bine adaptai condiiilor
de mediu. Fenomenul este cunoscut drept supravieuirea celor mai bine adaptai/ potrivii
(survival of the fittest).
Teoria evoluiei are ca principii fundamentale selecia bazat pe competiie i variaiile de
fenotip n rndul membrilor populaiei. Fenotipul este ansamblul de nsuiri i caractere care se
manifest n mod vizibil la un individ i care este determinat pe baz ereditar i de condiiile de
mediu (DEX). Caracteristicile fenotipului unui individ determin gradul lui de adaptabilitate la
condiiile de mediu (fitness). Fiecare individ reprezint o combinaie unic de caracteristici ale
fenotipului i este evaluat de condiiile de mediu. Dac evaluarea este favorabil, atunci fenotipul
individului este propagat spre urmai (progenituri), altfel caracteristicile fenotipului dispar i
individul moare fr a se putea reproduce. Viziunea lui Darwin despre evoluie este aceea c, n
procesul trecerii de la o generaie la alta prin reproducere, apar mutaii (variaii) mici, aleatoare,
n caracteristicile fenotipului. Ca rezultat al acestor variaii, apar i sunt evaluate noi combinaii
de caracteristici ale fenotipului. Cele mai bune dintre ele supravieuiesc i se reproduc i n acest
mod evoluia conduce la progres.
Modelul primar poate fi deci rezumat dup cum urmeaz. O populaie este format dintrun numr de indivizi, privii ca uniti de selecie; succesul fiecrui individ n ncercarea de a se

reproduce depinde de ct de bine este adaptat condiiilor de mediu comparativ cu restul


indivizilor. Pe parcursul reproducerii celor mai buni (bine adaptai la mediu) indivizi, apar mutaii
ocazionale, care genereaz noi indivizi, ce vor fi ulterior evaluai. n consecin, pe msur ce
timpul trece, se produc schimbri n structura populaiei, cu alte cuvinte populaia reprezint o
unitate a evoluiei. ntregul proces poate fi asimilat din punct de vedere intuitiv cu modelul unui
peisaj adaptiv (dinamic) (respectiv o suprafa adaptive) n spaiul 3D (0-x-y-z). Fiecare punct
p(x,y,z) al suprafeei este asimilat unui individ, unde n planul x-y este figurat combinaia de
caracteristici ale fenotipului individului, iar altitudinea lui p (valoarea lui pe axa 0z) corespunde
nivelului de adaptabilitate (fitness) a individului reprezentat de p. n acest context, evoluia este
procesul de avans al populaiei spre zone aflate la o altitudine mai mare, acest avans fiind
realizat pe baza mutaiilor i seleciei naturale. Este obinut astfel legtura cu conceptul de
probleme multimodale, adic probleme n care exist o mulime de puncte de optim local
(superioare tuturor soluiilor din vecintatea lor), cel mai bun element al mulimii fiind optimul
global. O problem n care exist un singur optim local este numit unimodal.
Legtura dintre procesul evoluiei i un proces de optimizare este pe ct de direct, pe att
de neltoare, pentru c evoluia nu presupune ntotdeauna creterea global a calitii populaiei
(n termenii funciei de fitness). Deoarece, la fiecare epoc, populaia este finit i operatorii de
selecie i mutaie includ componente aleatoare, poate fi constatat o inactivitate genetic,
manifestat fie prin dispariia din populaie a unor indivizi foarte adaptai condiiilor de mediu, fie
prin variaia foarte mic sau chiar lipsa de variaie a unor caracteristici ale fenotipului indivizilor
din populaie. Unul din efectele posibile este acela al concentrrii indivizilor ntr-o zon de
adaptabilitate sczut. Efectul rezultat prin combinarea procesului de selecie cu inactivitatea
genetic poate conduce n egal msur la creterea nivelului de adaptabilitate global a
populaiei, respectiv la descreterea acestuia. n plus, nu exist nici o garanie c, dac evoluia
duce la creterea calitii populaiei, nivelul de optim local nu a fost deja atins naintea unui
fenomen de inactivitate genetic. n scopul evitrii ciclrii evoluiei populaiei ntr-o regiune de
optim local, au fost dezvoltate o serie de teorii, una dintre cele mai cunoscute fiind teoria lui
Wright conform creia poate fi determinat optimul global n cazul unei suprafee fixe (teorie
referit drept shifting balance).
Tipuri de probleme ce pot fi rezolvate pe baza calculului evolutiv
n literatura de specialitate sunt evideniate dou clase de metode PS de inspiraie
biologic: calculul neuronal (neurocomputing), prin intermediul cruia problemele sunt rezolvate
imitnd modul de funcionare (raionament) a (al) creierului uman i procesele de tip evolutiv,
problemele fiind rezolvate prin imitarea crerii creierului uman.
n general, un sistem funcional de rezolvare automat a problemelor conine trei
componente: datele de intrare, datele de ieire i modulul intern care conecteaz primele dou
componente. Modalitatea de funcionare a modelului permite explicarea modului de funcionare a
sistemului, n sensul c, rspunsul sistemului poate fi calculat pentru orice date de intrare
specificate. n funcie de componentele din sistem cunoscute, pot fi difereniate urmtoarele tipuri
de probleme:
Probleme de optimizare: sunt cunoscute modelul i datele de ieire dorite (respectiv
o descriere a acestora), iar problema este de a determina datele de intrare care corespund
rezultatelor dorite. Un exemplu de astfel de problem este cea a comis voiajorului (n care trebuie
determinat cea mai scurt sau ieftin rut care s lege un numr dat de orae): modelul este
cunoscut i corespunde formulei de calcul a lungimii unei rute date, n care lungimea (sau costul)
calculat (calculat) este data de ieire. Proprietatea pe care rezultatul trebuie s o ndeplineasc
este un criteriu de optim (lungime minim), iar problema este de a determina acea dat de intrare,
corespunztoare unei rute, care s conduc la rezultatul dorit. O problem de optimizare rezolvat
cu succes prin calcul evolutiv este generarea orarului n cadrul unei universiti. n cursul unei
zile sunt programate n general mii de activiti, restriciile pe care trebuie s la ndeplineasc o

programare corect a acestora fiind multiple iar soluiile fezabile ale problemei n numr foarte
mic relativ la mulimea tuturor programrilor posibile.
Probleme de modelare sau de identificare a sistemului: sunt cunoscute datele de
intrare i rezultatele corespunztoare lor, iar modelul este necunoscut. Modelul trebuie determinat
astfel nct, pentru fiecare intrare dat, s calculeze rezultatul corect. Un exemplu de astfel de
problem: clasificarea supervizat n cazul modelului cu dou clase. Problema este de a determina
un clasificator care s separe corect elementele celor dou clase. Datele de intrare corespund
elementelor celor dou clase, pentru fiecare dat de intrare rezultatul fiind eticheta clasei de
provenien. Identificarea modelului revine la determinarea unei funcii de decizie, care, de
exemplu, s calculeze valori pozitive pentru exemplele care provin din prima clas, respectiv
valori negative pentru celelalte. Cu alte cuvinte, n acest caz scopul este de a determina o formul
(n acest caz expresia analitic a unei funcii de decizie) care s lege datele de intrare
(cunoscute) de rezultate (cunoscute). Problemele de acest tip apar n medii n care sunt
disponibile foarte multe date (observaii, nregistrri etc.), de exemplu n situaii n care exist un
set de dimensiuni considerabile de observaii/nregistrri asupra/ relative la un fenomen/
eveniment. Identificarea modelului care s explice conexiunile dintre datele de intrare i rezultate
trebuie realizat i astfel nct acesta s asigure o capacitate de generalizare rezonabil (pentru noi
date de intrare, sistemul trebuie s furnizeze n general rspunsuri corecte). Astfel de probleme
sunt cele din domeniile instruirii automate (machine learning) i data mining.
Probleme de simulare: sunt cunoscui modelul i o serie de date de intrare i cerina
este de a determina datele de ieire corecte, corespunztoare intrrilor date. Un exemplu de
probleme de simulare care pot fi rezolvate utiliznd calculul evolutiv sunt cele n care este cutat
rspunsul la ntrebri de tipul ce se ntmpl dac (what-if questions), n condiiile n care
problema subiectului investigat evolueaz (n termenii operaiilor de variaie i selecie).
Economia evolutiv este un domeniu de cercetare relativ nou, care, n principiu, are la baz ideea
c jocul i juctorii din arena socio-economic sunt asemenea evoluiei vieii (a jocului i
juctorilor ei).

2. Algoritmi evolutivi
n literatura de specialitate sunt prezentate diverse clase de algoritmi evolutivi (EA
Evolutionary Algorithms), toate avnd la baz acelai principiu: dat fiind o populaie de indivizi,
influena mediului determin un proces de selecie natural (indus de adaptabilitatea fiecrui
individ la mediu), care are ca efect creterea global a calitii populaiei, exprimat prin
intermediul funciei de fitness.
2.1. Schema general a algoritmilor evolutivi
Dac este cunoscut
o funcie de tip calitate care trebuie maximizat, setul
iniial de candidai la soluie (elemente din mulimea ) poate fi generat aleator, fiind obinut
astfel populaia iniial,
(
).
Pentru fiecare
, ( ) reprezint calitatea
candidatului x (ca msur abstract de evaluare funcie de tip fitness). Populaia urmtoare este
determinat pe baza funciei de evaluare prin aplicarea urmtorului mecanism. Este selectat
, o submulime a lui format din cei mai buni membri ai populaiei curente, adic
din acele elemente
cu cele mai bune scoruri obinute n urma evalurii prin . Membrii
mulimii
genereaz populaia urmtoare prin aplicarea operatorilor de recombinare i/sau
mutaie. Operaia de recombinare (recombination) este definit pentru doi sau mai muli indivizi
din mulimea
(numii prini) i are ca rezultat unul sau mai muli noi candidai la soluie
(numii copii). Operatorul mutaie este definit pe un element al mulimii
i are drept rezultat
un nou candidat la soluie. Prin aplicarea operatorilor de recombinare i mutaie sunt generai noi
indivizi (numii progenituri ai mulimii
) care intr n competiie, pe baza msurii de fitness
(posibil i a vrstei), cu elementele populaiei
pentru obinerea unui loc n populaia
urmtoare, . Procesul poate fi iterat fie pn la obinerea unui candidat suficient de bun (soluia
problemei, corespunznd unui punct de maxim al funciei ), fie pn la atingerea unei limite de
calcul date.
n cadrul acestui proces intervin dou elemente fundamentale care constituie baza
sistemelor evoluioniste:
operatorii de variaie (recombinare i mutaie), care asigur diversitatea necesar
crerii de indivizi cu caracteristici noi i
selecia, care foreaz creterea calitii indivizilor unei populaii.
Combinarea aplicrii operatorilor de variaie i selecie determin n general creterea
calitii globale de la o populaie la populaia urmtoare. Un astfel de algoritm poate fi privit ca o
evoluie a procesului de optimizare prin apropierea succesiv de valoarea optim. Alternativ,
procesul evolutiv poate fi considerat un proces de adaptare. Din aceast perspectiv, msura de
adaptabilitate (de fitness) este o expresie a cerinelor mediului n care evolueaz populaia i nu o
funcie obiectiv care trebuie optimizat. Msura n care sunt atinse cerinele mediului este direct
proporional cu msura de viabilitate i este reflectat n numrul de progenituri. Procesul
evolutiv determin obinerea de populaii succesive din ce n ce mai bine adaptate mediului n
care triesc.
O serie de componente ale unui proces evolutiv sunt stochastice. De exemplu, dei
indivizii mai bine adaptai mediului au o ans mai mare s fie selectai pentru generarea de noi
candidai soluie, n cele mai multe tipuri de implementri evolutive i indivizii mai slabi au o
ans de a deveni printe sau de a supravieui (n sensul selectrii lor n populaia sau generaia
urmtoare). De asemenea, n cadrul operaiei de recombinare, alegerea perechilor sau n-tuplurilor
(secvene de n elemente) de indivizi care interschimb material genetic, dar i prile (fraciunile)
de material genetic interschimbat sunt aleatoare. n mod similar, la efectuarea unei mutaii, att

poriunile din individ care vor suferi mutaia ct i noile prii care le nlocuiesc sunt alese
aleator.
n continuare este prezentat schema general a unui algoritm evolutiv.
Pas1. Iniilizarea populaiei:
soluie

este obinut prin generarea aleatoare a candidailor la

Pas2. Evaluarea candidailor: pentru fiecare


, determin ( )
Pas3. Repet
3.1. Selecteaz mulimea de prini
3.2. Recombin perechi (sau n-tupluri) de prini
3.3. Efectueaz mutaii asupra progeniturilor rezultate
3.4. Evalueaz noii candidai la soluie
3.5. Selecteaz indivizii pentru constituirea generaiei urmtoare,
3.6.
pn cnd (Condiie_terminare este satisfcut)

Observaii
1. Schema prezentat mai sus corespunde familiei metodelor PS de tip generare-testare,
pe baza urmtoarelor consideraii. n cadrul algoritmilor evolutivi sunt procesai
simultan membrii unei ntregi populaii, combinarea informaiilor oferite de doi sau
mai muli candidai fiind realizat n principal prin operaia de recombinare. De
asemenea, algoritmii evolutivi sunt de tip stochastic.
2. Funcia de evaluare (de fitness) este o estimare de tip euristic a calitii fiecrui
membru al populaiei curente, iar procesul de cutare este dirijat de operatorii de
variaie i selecie.
Diferitele tipuri de algoritmi evolutivi menionai n partea 1 respect schema general
prezentat mai sus i difer ntre ele printr-o serie de detalii tehnice, cum este de exemplu
modalitatea de reprezentare a unui candidat la soluie (tipul sau structura de date utilizat/utilizat
pentru reprezentarea membrilor populaiei). n cazul clasei algoritmilor genetici (GA Genetic
Algorithms), un candidat la soluie este reprezentat prin intermediul unui ir definit pe un alfabet
finit. Strategiile evolutive (ES- Evolution Strategy) utilizeaz vectori cu numere reale pentru a
reprezenta membrii populaiei, n timp ce n programarea evolutiv (EP Evolutionary
Programming) sunt utilizate reprezentrile prin maini cu stri finite. Clasa algoritmilor GP
(programare genetic) este dezvoltat pe baza reprezentrilor candidailor la soluie prin
intermediul structurii de arbore. Selectarea unei reprezentri a membrilor populaiei n
detrimentul altor variante posibile este realizat astfel nct s fie cel mai bine potrivit
problemei particulare de rezolvat, n sensul c uureaz implementarea algoritmului evolutiv sau
este cea mai natural relativ la problema dat. Evident, selectarea operatorilor de recombinare i
mutaie ine cont de varianta aleas pentru reprezentarea candidailor la soluie.

2.2. Componentele algoritmilor evolutivi


Componentele de baz ale algoritmilor evolutivi sunt: reprezentarea (definirea membrilor
populaiei), funcia de evaluare (de tip fitness), populaia, mecanismul de selectare a prinilor
(indivizii care interschimb material genetic), operatorii de variaie (recombinarea i mutaia),
mecanismul de selectare a membrilor generaiei urmtoare (actualizarea populaiei), definirea
modulului de iniializare (modalitatea de determinare a populaiei iniiale) i definirea condiiei
terminale.

Reprezentarea
Prima etap n dezvoltarea unui algoritm evolutiv este stabilirea unei conexiuni ntre
contextul problemei particulare de rezolvat i spaiul n care evolueaz tehnica PS considerat.
Obiectele care formeaz soluiile posibile n contextul problemei de rezolvat sunt numite
fenotipuri, reprezentarea lor n contextul spaiului EA fiind referit prin genotip. Scopul este de a
stabili o coresponden ntre mulimea fenotipurilor i cea a genotipurilor, numit reprezentare.
De exemplu, dac problema particular este de optimizare n mulimea numerelor ntregi, un set
prestabilit de numere ntregi poate constitui mulimea fenotipurilor, n timp ce setul genotipurilor
este constituit din reprezentarea binar a fiecrui fenotip.
Observaie. Spaiul fenotipurilor poate fi foarte diferit de cel al genotipurilor, cel n care
evolueaz un EA. O soluie este corespunztoare unui fenotip bun i este obinut prin
decodificarea celui mai bun (din punctul de vedere al funciei de evaluare) genotip rezultat n
urma aplicrii EA.
Ca terminologie, obiectele aparinnd spaiului problemei particulare de rezolvat sunt
referite prin candidai la soluie, fenotipuri sau indivizi. Spaiul pe care este definit problema este
numit spaiul fenotipurilor. Obiectele ce aparin spaiului n care este dezvoltat un EA sunt
referite prin termenii de genotipuri, cromozomi sau indivizi. Spaiul n care evolueaz EA este
numit spaiul genotipurilor. n general, un genotip este constituit din mai multe elemente, numite
valori sau alele, fiecare fiind plasat ntr-o anumit poziie, referit prin termenul de variabil sau
gen.
Observaie. Termenul reprezentare este utilizat n dou moduri diferite. n unele situaii
desemneaz transformarea aplicat spaiului fenotipurilor astfel nct s fie obinut spaiul
genotipurilor, caz n care termenul utilizat este i cel de codificare (n exemplul considerat mai
sus, fiecare genotip este codificarea binar a unui fenotip). Transformarea invers, aplicat
spaiului genotipurilor pentru a obine spaiul fenotipurilor este numit decodificare. Evident, n
acest caz reprezentarea trebuie s fie inversabil: fiecrui genotip trebuie s i corespund cel
puin un fenotip. n alte situaii, n definirea unei reprezentri accentul este pus cu precdere pe
structura de date utilizat pentru definirea spaiul genotipurilor i nu pe transformarea propriuzis. Aceast interpretare este legat spre exemplu de definirea operatorului mutaie pe spaiul
genotipurilor constituite din reprezentrile binare ale fenotipurilor.
Funcia de evaluare
Rolul funciei de evaluare (de fitness) este de a msura gradul de adaptabilitate a fiecrui
individ la mediul n care triete, mai exact este de definire a noiunii de calitate. Funcia de
evaluare st la baza procesului de selecie i, din perspectiva tehnicilor PS, reprezint modulul de
rezolvare a problemei date n contextul evolutiv. Din punct de vedere tehnic, este o funcie care
asociaz fiecrui genotip o msur a calitii i, n general, este derivat pe baza unei funcii de
tip calitate definit pe spaiul fenotipurilor. De exemplu, dac
este funcia de calitate definit
pe spaiul fenotipurilor, format din numere din mulimea i fiecare genotip este reprezentarea
binar a unui fenotip, atunci funcia de evaluare n spaiul genotipurilor este definit prin,
( )
( )
( )
(
).
De exemplu, pentru
, atunci
n cele mai multe situaii, problema de rezolvat utiliznd EA revine la o problem de
optimizare. Dac funcia obiectiv trebuie minimizat, atunci este realizat o transformare a ei
astfel nct problema de optim s fie una de maxim (din punct de vedere matematic, de exemplu,
a minimiza o funcie f este echivalent cu a maximiza funcia f sau, n situaia n care f nu se

anuleaz pe spaiul fenotipurilor, cu a maximiza funcia ). n acest caz, funcia de evaluare este
definit pe baza funciei obiectiv i innd cont de reprezentarea fenotipurilor n spaiul EA.
Observaie. n continuare, prin cel mai bun individ al unei populaii vom nelege acel
individ care realizeaz maximul funciei de evaluare pe acea populaie.
Populaia
Rolul populaiei n dezvoltarea EA este de a menine o mulime de genotipuri
corespunztoare unor soluii posibile. O populaie este un multiset (o mulime de elemente nu
neaprat distincte) de genotipuri. Indivizii unei populaii sunt obiecte statice, n sensul c nu pot fi
modificai i nu se pot adapta mediului n care triesc. Aceste proprieti le are, n schimb
populaia. Dac este stabilit modul de reprezentare (spaiul genotipurilor), populaia poate fi
definit prin specificarea numrului de indivizi care o compun. n situaia unor EA compleci,
populaiei i este asociat i o structur spaial adiional, definit prin intermediul unei funcii
de tip distan sau prin relaii de tip vecintate. n astfel de cazuri, definirea populaiei trebuie
nsoit de specificarea structurii spaiale asociate. Operatorii genetici de selecie (selecia
indivizilor care interschimb material genetic prini- i selecia populaiei la momentul de timp
urmtor) sunt definii la nivelul unei populaii i, n general, construcia lor presupune consultarea
ntregii populaii curente. De exemplu, cel mai bun individ al unei populaii date poate fi selectat
pentru a genera populaia urmtoare sau cel mai slab individ al unei populaii date este nlocuit cu
unul nou. n cele mai multe situaii, EA folosesc populaii de dimensiune constant pe tot
parcursul evoluiei.
Diversitatea unei populaii este msurat n termenii numrului de indivizi distinci ai
populaiei. Exist mai multe variante de definire a msurii de diversitate: numrul valorilor
( )
( ), nu rezult
distincte ale funciei de evaluare (dei, dac
), numrul
fenotipurilor diferite reprezentate n cadrul populaiei (dei prezena unui fenotip n spaiul iniial
nu garanteaz prezena unui singur genotip n spaiul EA: n cadrul populaiei, repetarea unui
genotip este echivalent fie cu selectarea pentru includere a unui fenotip de mai multe ori, la
generarea populaiei iniiale, respectiv cu selectarea repetat a unui genotip n construirea unei noi
populaii, de exemplu datorit valorii mari a funciei de evaluare corespunztoare lui), numrul
genotipurilor diferite din populaie (un genotip corespunde unui singur fenotip i valoarea funciei
de evaluare corespunztoare lui este unic), msuri bazate pe entropia populaiei .a.m.d.
Mecanismul de selectare a prinilor
Rolul operatorului de selectare a prinilor este de a distinge ntre indivizii populaiei pe
baza calitii acestora, n particular de a permite celor mai buni indivizi s se reproduc, deci s
participe la generarea populaiei urmtoare. Alturi de operatorul de selecie a supravieuitorilor
(indivizii care vor compune generaia urmtoare), mecanismul de selecie a prinilor foreaz
mbuntirea calitii globale a populaiei de la o generaie la alta. n calculul evolutiv, selectarea
prinilor este de tip probabilist: alegerea unui individ pentru a se reproduce depinde direct
proporional de calitatea lui, deci un individ are anse mai mari de a se reproduce comparativ cu
cei inferior lui din punct de vedere calitativ.
Observaie. Indivizii slabi (cu valori mici ale funciei de evaluare) nu sunt eliminai din
procesul de selectare pentru reproducere, ci doar au asociate probabiliti mici, dar nenule, de
selecie. n acest fel algoritmul de cutare nu este de tip greedy i riscul de identifica o valoare de
optim local fiind diminuat n acest fel.
Operatorii de variaie: mutaia i recombinarea
Scopul aplicrii operatorilor de variaie este de a crea noi indivizi, derivai din cei ai
populaiei curente. Din punctul de vedere al rezolvrii problemelor prin metode de cutare de tip
generare-testare, prin aplicarea operatorilor de variaie este realizat faza de generare. Definirea

operatorilor de variaie depinde esenial de modalitatea de reprezentare a spaiului iniial


(definirea spaiului genotipurilor).
Operatorul mutaie
Mutaia este operator unar (cu aritate 1), n urma aplicrii acestuia asupra unui genotip
rezult o variant mutant, numit progenitur sau copil. Operatorul mutaie este ntotdeauna
stochastic, rezultatul depinznd de o serie de alegeri aleatoare. n general aceste alegeri constau n
utilizarea unui generator de numere aleatoare din diferite distribuii de probabilitate i sunt numite
extrageri aleatoare. Rolul mutaiei n calculul evolutiv depinde de tipul de algoritm implementat.
De exemplu, n cazul algoritmilor genetici, mutaia are rolul de a mprospta structura genetic
a unei populaii, n cazul programrii evolutive este unicul operator de variaie care dirijeaz
procedura de cutare, n timp ce n cazul programrii genetice n general nu este folosit.
Din studiul teoretic al convergenei algoritmilor evolutivi rezult c optimul global al
funciei obiectiv poate fi obinut n situaia n care operatorii de variaie utilizai asigur obinerea
oricrui genotip soluie potenial a problemei de optim (Eiben, Smith, 2003). Cea mai simpl
cale de a asigura ndeplinirea acestei codiii este de a utiliza un operator mutaie care s permit
modificarea oricrei alele dintr-un cromozom cu orice variant posibil, cu o probabilitate nenul.
n literatura de specialitate exist ns i opinii conform crora rezultatele teoretice relative la
comportamentul EA au o importan practic redus i multe implementri EA nu posed
proprietile cerute de acestea.
Operatorul de recombinare
Un operator de variaie binar (cu aritate 2) este numit operator de recombinare sau
ncruciare i are ca efect obinerea unuia sau a dou genotipuri urma direct prin combinarea
informaiei purtate de dou genotipuri printe. Recombinarea este un operator stochastic: alegerea
acelor pri ale genotipurilor prini care vor fi combinate i modalitatea de recombinare rezult
n urma unor extrageri aleatoare. Rolul recombinrii difer de la o clas de algoritmi evolutivi la
alta: n cadrul algoritmilor genetici este cel mai utilizat operator de variaie (probabilitatea de
efectuarea a unei ncruciri este n general mult mai mare dect probabilitatea apariiei unei
mutaii), n programarea genetic este n general unicul operator de variaie folosit, n timp ce n
programarea evolutiv nu este implementat.
n dezvoltri de tip EA pot fi folosii i operatori de recombinare de aritate mai mare dect
2 (n generarea urmailor sunt folosii mai mult de dou genotipuri printe). Astfel de operatori
sunt uor de implementat dar nu au corespondent biologic. Dei o serie de studii indic utilitatea
acestora n tratarea unor probleme particulare, aceti operatori sunt rar folosii.
Prin mperecherea a dou genotipuri printe cu caracteristici diferite i superioare calitativ
pot fi obinute progenituri care s mbine caracteristicile celor doi prini. Acest principiu are un
fundament biologic extrem de solid: a fost utilizat de cultivatorii de plante i cresctorii de
animale pentru a produce specii cu randament superior sau care s prezinte caracteristici
mbuntite. Aplicarea EA determin crearea de urmai direci prin ncruciri aleatoare, fiind
acceptat ideea c unii dintre acetia pot avea nsuiri nedorite, majoritatea pot fi calitativ similari
sau chiar inferiori prinilor i doar o mic parte dintre ei pot avea caracteristici superioare
prinilor.
Mecanismul de selectare a supravieuitorilor (nlocuirea populaiei curente)
Rolul acestui operator, numit i selecia mediului sau strategia de nlocuire a populaiei
curente, este de a diferenia indivizii n funcie de calitatea lor. Din acest punct de vedere este
similar procesului de selecie a prinilor dar este utilizat ntr-o etap diferit a evoluiei unui EA.
Mecanismul de selecie a membrilor urmtoarei generaii este aplicat dup generarea
progeniturilor indivizilor populaiei curente i, deoarece dimensiunea populaiei este n general
constant n timp, revine la aplicarea unei funcii de decizie fiecrui individ aparinnd populaiei

curente sau mulimii progeniturilor. Funcia de decizie aplicat unui individ exprim proprietatea
acestuia de a fi selectat pentru includerea n populaia urmtoare (proprietatea de a fi
supravieuitor) i este de obicei construit pe baza funciei de evaluare, lund n calcul calitatea
fiecrui individ i, n unele situaii, factorul vrst (de cte generaii este meninut u individ).
n general selecia mediului este un proces determinist. Obinerea generaiei urmtoare
poate fi realizat, de exemplu, fie prin ordonarea indivizilor multisetului obinut prin reuniunea
populaiei curente cu multisetul progeniturilor i selectarea celor mai buni indivizi (funcie de
decizie bazat pe funcia de evaluare), fie prin selectarea indivizilor exclusiv din multisetul
urmailor direci (funcie de decizie bazat pe factorul vrst).
Iniializarea
n majoritatea EA, crearea populaiei iniiale este realizat prin generare aleatoare de
fenotipuri i apoi obinerea multisetului de genotipuri asociat. De asemenea, n funcie de
problema particular de rezolvat, generarea populaiei iniiale poate fi realizat i pe baza unor
euristici care s asigure obinerea unor indivizi cu adaptabilitate ridicat.
Condiia terminal
Condiia terminal n EA este stabilit n funcie de tipul de problem de rezolvat, n felul
urmtor. Dac problema are o valoare de optim cunoscut, atunci un posibil criteriu de oprire este
atingerea acelei valori sau atingerea acelei valori cu o eroare dat
. Dar, deoarece algoritmii
evolutivi sunt stochastici i nu garanteaz atingerea valorii optime, criteriul poate s nu fie
satisfcut la nici o iteraie, deci el trebuie reformulat. Cele mai utilizate opiuni sunt:
atingerea unui numr maxim de iteraii (generaii);
atingerea unui numr maxim de evaluri ale calitii indivizilor;
pentru o anumit perioad de timp (un numr de iteraii specificat sau un numr de
evaluri specificat) calitatea populaiei curente nu este semnificativ mbuntit
(este sub un prag dat);
diversitatea populaiei scade sub un prag dat.
n situaia n care problema de rezolvat nu are un optim cunoscut, poate fi utilizat oricare
din variantele menionate mai sus.
2.3. Evoluia cutare direct-cutare stochastic. Metodele hill climbing i simulated
annealing
Evoluia cutare direct-cutare stochastic cuprinde dou tehnici care reduc din
dezavantajele cutrilor directe, i anume metode de tip hill climbing i simulated annealing.
Metodele de tip hill climbing utilizeaz o tehnic de iterativitate mbuntit. Aceasta
se aplic unui singur punct din spaiul de cutare. La o iteraie este selectat un nou punct aflat
ntr-o vecintate a punctului curent procesat. Dac acest punct determin o valoare mai bun (din
punct de vedere al criteriului de optim considerat) pentru funcia obiectiv, el devine punct curent.
n caz contrar, este selectat o alt vecintate a punctului curent, procesul desfurndu-se ulterior
similar. Algoritmul se ncheie cnd nici un punct vecin celui curent nu aduce mbuntiri
valorilor funciei obiectiv. Metodele de acest tip conduc de obicei la valori de optim local,
depinznd de punctul de start. n plus, nu se pot furniza informaii referitoare la eroarea relativ a
soluiei calculate. Pentru a crete performanele unor astfel de modele, acestea se utilizeaz pentru
un numr mare de punct de start.
Metodele de tipsimulated annealing elimin o mare parte din dezavantajele algoritmilor
hillclimbing, n sensul c soluiile nu depind de punctul de start i sunt de obicei apropiate de
punctul de optim global. Pentru aceasta, este considerat o probabilitate de acceptare a punctului
selectat drept urmtor punct curent, egal cu 1 dac noul punct furnizeaz o valoare mai bun

pentru funcia obiectiv considerat. n unele situaii, probabilitatea de a accepta un nou punct este
o funcie cu valori corespunztoare funciei obiectiv pentru punctul curent i noul punct selectat.
De asemenea, fa de tehnica hill climbing, este considerat un parametru de tip temperatura
sistemului, care influeneaz probabilitatea de acceptare a unui nou punct ca punct curent: cu ct
acest parametru este mai sczut, cu att ansele de acceptare sunt mai mici. Pe parcursul execuiei
algoritmului, temperatura sistemului scade; algoritmul se ncheie pentru o temperatur mic,
pentru care nu se mai accept nici o modificare a soluiei (probabilitatea de acceptare a unui nou
punct este 0).
Structurile algoritmilor de tip hill climbing i simulated annealing
Fie f funcia obiectiv care se dorete maximizat (dac principiul de optimalitate este
minimul, atunci problema minimizrii funciei obiectiv f n anumite condiii de constrngere
revine la maximizarea funciei f) . Considernd reprezentarea cromozomial a unei soluii
poteniale de tip binar, ca un ir de nr bii, punctele curent respectiv nou fiind desemnate prin vc
respectiv vn, algoritmii hill climbing i simulated annealing sunt descrii dup cum urmeaz.
Fie MAX numrul punctelor de start. Procedura urmtoare calculeaz v, un cel mai bun
punct din cele MAX puncte obinute n urma aplicrii tehnicii de tip hillclimbing (memorate n
vectorul V).
procedure hillclimbing
begin
t=0
repeat
local=false
selecteaz aleator un punct curent vc
evalueaz vc
repeat
selecteaz nr puncte din vecintatea lui vc prin modificarea fiecrui bit al lui vc
selecteaz un punct vn dintre cei nr generai anterior, cu funcia obiectiv maxim
if f(vc)<f(vn) vc=vn
else local=true
until local
V(t)= vc
t=t+1
until t=MAX
()
( ( ))
( ( ))
end.
Variabila local are rolul de a semnala eventuala apropiere de un punct de maxim local,
determinat atunci cnd nu se mai fac modificri ale punctului curent (cnd nici un vecin al
punctului curent nu furnizeaz o valoare mbuntit a funciei obiectiv).
procedure simulated_annealing
begin
t=0
iniializeaz temperatura sistemului T
selecteaz aleator un punct curent vc
evalueaz vc
repeat
repeat

selecteaz vn n vecintatea lui vc (prin modificarea unui bit din vc)


if f(vc)<f(vn) vc=vn
else
if random[0,1) <exp{(f(vn)-f(vc)/T} vc=vn
until (condiie de terminare dat de T)
t=t+1
T=g(T,t)
until (criteriu de stop)
end.
Funcia random[0,1) returneaz un numr aleator generat uniform n intervalul [0,1).
Condiia de terminare verific dac sistemul a atins echilibrul termic, adic dac distribuia de
probabilitate corespunztoare noilor iruri selectate ating distribuia Boltzman. La fiecare repetare
a seleciei temperatura sistemului descrete (g(T, t)<T, pentru orice t). Algoritmul se ncheie
pentru o valoare mic a lui T, corespunztoare strii de nghe, adic dac nu se mai accept
virtuale modificri asupra punctului curent.
,
Observaie. Reprezentarea cromozomial a unui numr din domeniul
poate fi realizat prin intermediul unui ir binar pe baza urmtorului procedeu. Fie nz numrul de
zecimale al reprezentrii (precizia dorit); domeniul D este divizat n (b-a)10nz intervale egale.
)
Fie m cel mai mic numr natural cu proprietatea c (
. Reprezentarea
oricrei variabile reale
este un ir binar de m bii, notat cu s, n care
( )
( ) reprezint valoarea zecimal a irului binar, unde
i
(
)(
)
( ) [
]
i [t] este partea ntreag a umrului t.
Dac funcia de optimizat depinde de mai multe variabile, fiecare dintre ele este
reprezentat conform observaiei de mai sus, un cromozom fiind constituit din concatenarea
fiecrei reprezentri binare corespunztoare unei variabile.
,
-. Lungimea intervalului este 15,1. Dac precizia dorit este
Exemple. Fie
de 4 zecimale, atunci domeniul considerat trebuie divizat n 15,1 104=151000 intervale, deci
m=18.
a) Fie
. Atunci
(

)(

, Rezult
i

( )

ntr-adevr,
(
b) Fie

)
. Atunci

)(

, Obinem
i

( )

ntr-adevr,
(

Exemple de aplicare a algoritmului hillclimbing. Rezolvarea unei probleme de


optimizare a unei funcii de o variabil
1. Fie
( )

, definit prin
(

Problema este de a calcula valoarea maxim a funciei


Graficul funciei este prezentat n figura urmtoare.

pe intervalul ,

-.

Implementarea algoritmului hill climbing poate fi realizat astfel.


% functia obiectiv
function [val]=f_obiectiv(x);
val=x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1;
end
% reprezentarea cromozomiala y, pe m biti, a unui numar x din [a,b] cu
% nz zecimale exacte
function [y,m]=repr_sir_bin(x,a,b,nz);

nr=(b-a)*(10^nz);
m=fix(log2(nr))+1;
z=fix((x-a)*(2^m-1)/(b-a));
y=bitget(z,m:-1:1);
end
% obtinerea fenotipului corespunzator
function [t]=repr_reale(y,m,a,b);
x=0;
for i=1:m
x=bitset(x,m-i+1,y(i));
end;
t=a+x*(b-a)/(2^m-1);
end
% implementarea algoritmului
function [val,v]=hillclimbing(a,b,nz,MAX);
% aici a=-1 si b=1, pentru a rezolva problema data
[y,m]=repr_sir_bin(0,a,b,nz);
V=[];
%m este numarul de biti pe care este reprezetat un numar din [a,b] cu
%precizia de nz zecimale
for t=1:MAX
local=0;
vc=unifrnd(a,b);
valm=f_obiectiv(vc);
if (t==1)
val=valm;
v=vc;
end;
while(local==0)
%calculul vecinilor, insotit de valorile functiei obiectiv
[y,m]=repr_sir_bin(vc,a,b,nz);
valc=f_obiectiv(vc);
ny=zeros(m,m+1);
for i=1:m
ny(i,1:m)=y(1:m);
ny(i,i)=not(y(i));
vn=repr_reale(ny(i,1:m),m,a,b);
ny(i,m+1)=f_obiectiv(vn);
end;
nys=sortrows(ny,m+1);
if(nys(m,m+1)>valc)
vc=repr_reale(nys(m,1:m),m,a,b);
valm=nys(m,m+1);
else
local=1;
end;
end;
if(valm>val)
val=valm;
v=vc;
timp=t;
end;
V=[V vc];
end;
disp(v);
disp(val);
plot_obiectiv(V,timp,a,b);
end
function []=plot_obiectiv(V,timp,a,b);

figure
x=a:0.001:b;
plot(x,x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1,'k-');
hold on
[xx dim]=size(V);
disp(dim);
for i=1:dim
x=V(i);
y=f_obiectiv(V(i));
plot(x,y,'rs');
hold on
end;
x=V(timp);
y=f_obiectiv(V(timp));
plot(x,y,'bs');
end

La un apel
hillclimbing(-1,1,4,5);
pot fi obinute rezultatul:
punctul n care este atins maximul 0.6476
maximul calculat 6.1425
i evoluia

La un apel
hillclimbing(-1,1,4,2);
pot fi obinute rezultatul:
punctul n care este atins maximul -0.2495
maximul calculat 5.7169
i evoluia

La un alt apel
hillclimbing(-1,1,4,2);
pot fi obinute rezultatul:
punctul n care este atins maximul 0.6476
maximul calculat 6.1425
i evoluia

2. Optimizarea unei funcii de mai multe variabile.


,
- ,
Fie
, definit prin

(
)
(
)
( )
( )
- ,
-.
Problema este de a calcula valoarea maxim a funciei pe ,
Implementarea algoritmului hill climbing n acest caz poate fi realizat astfel.
function [val,v]=hillclimbing(a,b,nz,MAX);
[y,m]=repr_sir_bin(0,a,b,nz);
V=[];
%m este numarul de biti pe care este reprezetat un numar din [a,b]x[a,b]
%cu precizia de nz zecimale
for t=1:MAX
local=0;
vc=unifrnd(a,b,1,2);
valm=f_obiectiv(vc(1),vc(2));
if (t==1)
val=valm;
v=vc;
end;
while(local==0)
%calculul vecinilor, insotit de valorile functiei obiectiv
for i=1:2
[y((i-1)*m+1:i*m),m]=repr_sir_bin(vc(i),a,b,nz);
end;
valc=f_obiectiv(vc(1),vc(2));
ny=zeros(2*m,2*m+1);
for i=1:2*m
ny(i,1:2*m)=y(1:2*m);
ny(i,i)=not(y(i));
vn(1)=repr_reale(ny(i,1:m),m,a,b);
vn(2)=repr_reale(ny(i,m+1:2*m),m,a,b);
ny(i,2*m+1)=f_obiectiv(vn(1),vn(2));
end;
nys=sortrows(ny,2*m+1);
if(nys(2*m,2*m+1)>valc)
vc(1)=repr_reale(nys(2*m,1:m),m,a,b);
vc(2)=repr_reale(nys(2*m,m+1:2*m),m,a,b);
valm=nys(2*m,2*m+1);
else
local=1;
end;
end;
if(valm>val)
val=valm;
v=vc;
timp=t;
end;
V=[V;vc];
end;
disp(v);
disp(val);
disp(timp);
plot_obiectiv(V,timp,a,b);
end
function [val]=f_obiectiv(x,y);
val=exp(-x^2-y^2)+y*cos(5*x)-x*sin(3*y);
end
function []=plot_obiectiv(V,timp,a,b);
figure
[X,Y] = meshgrid([a:0.01:b]);
Z = exp(-X.^2-Y.^2)+Y.*cos(5*X)-X.*sin(3*Y);

plot3(X,Y,Z,'y');
grid on
hold on
[dim xx]=size(V);
disp(dim);
for i=1:dim
x=V(i,1);
y=V(i,2);
z=f_obiectiv(x,y);
if(i==timp)
plot3(x,y,z,'ks');
hold on
else
plot3(x,y,z,'g.');
hold on
end;
end;
end

Funciile de reprezentare repr_reale i repr_sir_bin sunt similare primului exemplu


(asigur transformarea numr real din ,
ir binar).
La un apel hillclimbing(-2,2,5,75);
pot fi obinute rezultatele:
x=-1.9102, y=-1.6250
valoarea maxim: 3.4989.
n urmtoare figur este prezentat un exemplu de evoluie posibil a algoritmului
hillclimbing aplicat pentru 75 de puncte de start.

2.4. Exemple de aplicare a EA


Rezolvarea unei probleme de optimizare a unei funcii de o variabil
,
Fie
, definit prin
( )

-.
Problema este de a calcula valoarea maxim a funciei pe intervalul ,
-.
Spaiul genotipurilor poate fi considerat mulimea numerelor reale din intervalul ,
-; la
La fiecare moment de timp populaia este constituit din dim numere reale din ,
-.
momentul iniial, populaia conine dim numere reale generate aleator pe intervalul ,
Operatorul de mutaie aplicat unui cromozom x determin obinerea valorii x. (n acest
,
,
-). Operatorul de recombinare aplicat
caz este posibil, deoarece, dac
,
- determin obinerea cromozomului
,
-. Selecia
pentru prinii
prinilor este realizat astfel: sunt selectai jumtate din membrii populaiei curente pe baza
procedurii de tip turnir. Operaia de ncruciare este aplicat pentru o mperechere aleatoare a cte
2 indivizi prini, cu probabilitatea pc (pentru fiecare pereche de prini selectat este generat un
numr aleator n , -; dac acesta este inferior valorii pc, este efectuat ncruciarea).
Progeniturile sunt supuse mutaiei cu o probabilitate pm. Mecanismul de selectare a noii generaii
presupune ordonarea descresctoare a multisetului format din indivizii populaiei curente i
progeniturile obinute prin operatorii de variaie i selecie a prinilor i alegerea primilor dim
indivizi pentru a forma populaia urmtoare. Condiia terminal este formulat astfel: a fost
depit un prag al numrului de generaii sau calitatea populaiei, msurat ca medie a funciei de
evaluare n membrii populaiei nu mai poate fi mbuntit semnificativ.
n continuare sunt prezentate funciile MATLAB utilizate i cteva exemple de aplicare a
cutrii evolutive descrise mai sus.
% generarea populaiei iniiale
function [pop]=genereza_ini(dim);
pop=zeros(dim,2);
% fiecare membru al populatiei este un numar in [-1,1]
% la care este adaugata valoarea functiei obiectiv
for i=1:dim
pop(i,1)=unifrnd(-1,1);
pop(i,2)=f_obiectiv(pop(i,1));
end;
end
%definirea functiei obiectiv
function [val]=f_obiectiv(x);
val=x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1;
end
% operatorul mutatie
function [y]=mutatie(x);
y=x;
y(1)=-x(1);
y(2)=f_obiectiv(y(1));
end
% operatorul de incrucisare
function [y]=crossover(x1,x2);
y=x1;
y(1)=(x1(1)+x2(1))/2;
y(2)=f_obiectiv(y(1));
end

% mecanismul de selectie a parintilor


function [parinti]=selectie(pop);
[dim,xx]=size(pop);
d=round(dim/4);
% dim trebuie sa fie multiplu de 8, pentru ca d sa fie par
% va rezulta un singur copil din incrucisare
parinti=zeros(d,2);
for i=1:d
p1=unidrnd(dim);
p2=unidrnd(dim);
while(p2==p1)
p2=unidrnd(dim);
end;
if(pop(p1,2)>pop(p2,2))
parinti(i,:)=pop(p1,:);
else parinti(i,:)=pop(p2,:);
end;
end;
end
%obtinerea unei noi populatii popNou pe baza populatiei curente pop
%probabilitatea de incrucisare pc si probabilitatea de mutatie pm
% evalmed este valoarea medie a functiei obiectiv pentru noua generatie
function [popNou,evalmed]=trecere(pop,pc,pm);
[parinti]=selectie(pop);
[dim,xx]=size(pop);
[dd,yy]=size(parinti);
d=round(dd/2);
popN=zeros(d,2);
%aplica operatia de crossover
nr=0;
for i=1:d
j=2*i;
prc=unifrnd(0,1);
if(prc<=pc)
nr=nr+1;
popN(nr,:)=crossover(parinti(j-1),parinti(j));
end;
end;
%aplica mutatia
for i=1:nr
prm=unifrnd(0,1);
if(prm<=pm)
popN(i,:)=mutatie(popN(i,:));
end;
end;
popNN=[pop;popN(1:nr,:)];
tt=sortrows(popNN,2);
popNou=zeros(dim,2);
popNou=tt(nr+1:dim+nr,:);
evalmed=mean(popNou(:,2));
end
function []=EA_maxim(dim,pc,pm,Max,eps);
% dim este dimensiunea populatiei,multiplu de 8
% pc este probabilitatea de efectuare a
% unei incrucisari, pm este probabilitatea de efectuare a unei mutatii,
% Max este numarul maxim de iteratii(generatii)
%daca diferenta dintre valorile maxime ale
%functiei obiectiv de la o generatie la alta este in modul<eps --->stop
[pop]=genereaza_ini(dim);
evalmed=0;

t=0;
V=[];
er=1;
plot_obiectiv(pop);
while((t<Max)&&(er>eps))
[popN,evalmed1]=trecere(pop,pc,pm);
pop=popN;
er=abs(evalmed1-evalmed);
%disp(evalmed1);
%disp(er);
evalmed=evalmed1;
V=[V evalmed];
t=t+1;
if (t==20)
plot_obiectiv(pop);
end;
end;
plot_obiectiv(pop);
figure
i=1:t;
plot(i,V(i),'r-');
disp(t);
disp(popN(dim,:));
end
function []=plot_obiectiv(pop);
figure
x=-1:0.001:1;
plot(x,x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1,'k-');
hold on
[dim,xx]=size(pop);
for i=1:dim
x=pop(i,1);
y=pop(i,2);
plot(x,y,'rs');
hold on
end;
end

Pentru
rezultate.

pot fi obinute urmtoarele

Pentru

sunt obinute urmtoarele

rezultate.

Valoarea maxim a funciei obiectiv este atins pentru


i este
.
Valorile obinute sunt conforme cu graficul funciei prezentat n prima figur a acestei seciuni.
n urmtoarele trei figuri este reprezentat o posibil distribuie a membrilor populaiei la
momentul curent, dup 20 de iteraii i la momentul final. Apelul este
EA_maxim(104,0.5,0.1,1000,0.0001);
Iniial, indivizii sunt distribuii aleator, pe ntre domeniul de definiie al funciei obiectiv.
Dup 20 de iteraii, indivizii din populaie sunt distribuii n vecintatea unui punct de maxim
local i respectiv n vecintatea punctului de maxim global. La terminarea cutrii, EA reuete s

identifice maximul global al funciei obiectiv i membrii populaiei la momentul final sunt grupai
ntr-o vecintate a punctului de maxim global.

Problema celor opt regine


Problema este de a determina o configuraie n care 8 regine pot fi plasate pe o tabl de
ah astfel nct s nu se atace reciproc (nici o pereche de regine nu trebuie plasat pe aceeai linie,
coloan sau diagonal). Aceasta poate fi generalizat imediat la cazul a N regine pentru o tabl de
ah N x N -dimensional.
Deoarece pe fiecare linie i coloan a tablei de ah trebuie plasat o singur regin,
configuraiile sunt reprezentate succesiv printr-un vector cu N componente. Valoarea
componentei i dintr-un vector configuraie reprezint indicele coloanei n care este plasat regina
aflat pe linia i. Din aceast reprezentare rezult c dou regine nu pot fi plasate pe aceeai linie a
tablei de ah. De asemena, dac vom presupune c elementele vectorului configuraie sunt
+), rezult
distincte (deci voctorul configuraie corespunde unei permutri pe mulimea *
c dou regine nu pot fi plasate pe aceeai coloan a tablei de ah.
Rezolvarea clasic a unei astfel de probleme este prin cutare direct, utiliznd metoda
backtracking: iniial este plasat o regin; dup plasarea a n regine, este cutat o poziie posibil
pentru plasarea celei de-a n+1-a regine (o poziie din care noua regin s nu se afle n situaie de
atac cu nici una din celelalte n regine deja plasate pe tabla de ah). Dac nu exist nici o astfel de
poziie, cea de-a n-a regin este repoziionat pe tabla de ah, dac acest lucru este posibil.
O abordare evolutiv a acestei probleme este total diferit de cutarea direct i este de tip
non-incremental. Soluiile candidat sunt complete, n sensul c fiecare vector configuraie este
instaniat cu o permutare. Din punct de vedere al reprezentrii, un fenotip, care reprezint o
configuraie a tablei de ah astfel nct dou regine s nu fie plasate pe aceeai linie sau aceeai
coloan (este soluie potenial), este codificat prin intermediul vectorului configuraie, permutare
+. Spaiul genotipurilor este deci format din mulimea permutrilor setului
a mulimii *
*
+. Evident, nu toate elementele acestui spaiu sunt soluii admisibile (dou regine pot fi
plasate astfel nct s fie pe o aceeai diagonal a tablei de ah, deci s se afle n poziie de atac
reciproc).
Calitatea fiecrui genotip x, ( ), poate fi evaluat n termenii numrului de perechi de
regine care se afl n poziie de atac (numrul de perechi ( ) cu proprietatea c
| ()
( )| |
|): dac acesta este 0 atunci genotipul este soluie, n caz contrar valoarea

calculat este strict pozitiv. Problema de optim care trebuie rezolvat este deci de minimizare
( ), unde
funcie f sau, echivalent, maximizarea funciei ( )
este
numrul maxim de perechi de regine care se pot afla n poziie de atac (de exemplu n cazul
()
). n implementarea algoritmului, fiecrui genotip i este asociat valoarea
funciei de evaluare, deci datele cu care se lucreaz sunt vectori N+1-dimensionali: primele N
componente reprezint configuraia i ultima component valoarea funciei de evaluare
corespunztoare acesteia.
La fiecare moment de timp, populaia este constituit dintr-un multiset cu dim elemente
(de exemplu, pentru
, pentru
). Pentru aceast problem, la
fiecare generaie sunt nlocuii cte 2 indivizi (cei mai slabi din punctul de vedere al funciei de
evaluare) cu copii a doi prini. Cei doi prini sunt selectai aleator din populaia curent,
.
Operatorul de ncruciare este proiectat astfel nct progeniturile s pstreze proprietatea de a fi
*
+ sunt obinute
permutri: pentru doi indivizi
i pentru o poziie
progeniturile
astfel:
copiaz primele poz elemente din , respectiv n , respectiv
copiaz n ultimele dim-poz+1 poziii din , respectiv , elementele din ,
respectiv , ncepnd cu primul i pn cnd au fost completate poziiile din ,
respectiv , astfel nct , respectiv s nu conin dubluri
Operatorul mutaie este aplicat cu probabilitatea de 0.8 uneia din cele dou progenituri
rezultate dup aplicarea operatorului de recombinare i revine la selectarea aleatoare a dou
poziii diferite din genotipul modificat i interschimbarea valorilor din acele poziii.
Condiia terminal este formulat astfel: a fost atins o configuraie soluie sau a fost
depit pragul dat pentru numrul maxim de generaii.
n continuare sunt prezentate funciile MATLAB utilizate i cteva exemple de aplicare a
cutrii evolutive descrise mai sus.
function [pop]=genereaza_ini(N,dim);
pop=zeros(dim,N+1);
% fiecare membru al populatiei este o permutare pe 1,2,..,N
% la care este adaugata valoarea functiei obiectiv N-numarul de perechi
% de regine care se ataca reciproc
for i=1:dim
x=gen_perm(N);
pop(i,1:N)=x;
pop(i,N+1)=valoare(x);
end;
end
% generarea aleatoare a unei permutari pe {1,2,,N}
function [y]=gen_perm(N);
y=zeros(1,N);
for i=1:N
gata=0;
while(~gata)
v=unidrnd(N);
if(~ismember(v,y))
y(i)=v;
gata=1;
end;
end;
end;
disp(y);
end
% functia de evaluare calculata pentru un genotip

function [val]=valoare(x);
[m,N]=size(x);
v=0;
for i=1:N-1
for j=i+1:N
if(abs(i-j)==abs(x(i)-x(j)))
v=v+1;
end;
end;
end;
val=N*(N-1)/2-v;
end
% recombinarea
function [y1,y2]=crossover(x1,x2,poz);
[m,p]=size(x1);
N=p-1;
y1=x1;y2=x2;
y1=copiaza_rest(y1,x2,poz,N);
y2=copiaza_rest(y2,x1,poz,N);
y1(N+1)=valoare(y1(1:N));
y2(N+1)=valoare(y2(1:N));
%disp(y1);
%disp(y2);
end
function [y]=copiaza_rest(y,x,poz,N)
i=poz+1;
while(i<=N)
for j=1:N
if(~ismember(x(j),y(1:i-1)))
y(i)=x(j);
i=i+1;
break;
end;
end;
end;
end
% mutatia
function [y]=mutatie(x,poz1,poz2);
[m,p]=size(x);
N=p-1;
y=x;
y(poz1)=x(poz2);
y(poz2)=x(poz1);
y(N+1)=valoare(y(1:N));
end
% selectarea parintilor cate doi/popuatie
function [parinti]=selectie(pop);
[dim,p]=size(pop);
N=p-1;
parinti=zeros(2,N+1);
p1=unidrnd(dim);
p2=unidrnd(dim);
while(p2==p1)
p2=unidrnd(dim);
end;
parinti(1,:)=pop(p1,:);
parinti(2,:)=pop(p2,:);
end

% trecerea de generatia curenta la generatia urmatoare


function [popNou,evalmax]=trecere(pop,pm);
[parinti]=selectie(pop);
[dim,m]=size(pop);
N=m-1;
poz=unidrnd(N-1);
%aplica operatia de crossover
y=zeros(2,N+1);
[y(1,:),y2(2,:)]=crossover(parinti(1,:),parinti(2,:),poz);
%aplica mutatia
prm=unifrnd(0,1);
if(prm<=pm)
i=unidrnd(2);
poz1=unidrnd(N);
poz2=unidrnd(N);
while(poz2==poz1)
poz2=unidrnd(N);
end;
y(i,:)=mutatie(y(i,:),poz1,poz2);
end;
popN=[pop;y(1,:);y2(2,:)];
tt=sortrows(popN,N+1);
%disp(tt);
popNou=zeros(dim,N+1);
popNou=tt(3:dim+2,:);
evalmax=popNou(dim,N+1);
%disp(popNou);
end
% algoritmul evolutiv
function []=EA_Queens(N,dim,pm,Max);
% N este umarul de regine, dim este dimensiunea populatiei, pm este
% probabilitatea de efectuare a unei mutatii si Max este numarul maxim
%de iteratii(generatii)
[pop]=genereaza_ini(N,dim);
evalmax=0;
t=0;
V=[];
while(evalmax<N*(N-1)/2 && t<Max)
[popN,evalmax]=trecere(pop,pm);
pop=popN;
disp(popN(dim,:));
V=[V popN(dim,N+1)];
t=t+1;
end;
figure
i=1:t;
plot(i,V(i),'ro:');
axis([0 t V(1)-1 (N*(N-1)/2)+5]);
figure
for i=0:N
plot( [0 N],[i i],'k-');
plot( [i i],[0 N],'k-');
hold on
end;
hold on
for i=1:N
x=i;
y=pop(dim,i);
k=x-1:0.1:x;

l=y-1:0.1:y;
plot(k,l,'bv');
hold on
k=x:-0.1:x-1;
l=y-1:0.1:y;
plot(k,l,'bv');
hold on
end;
axis([0 N 0 N]);
end

O configuraie corect obinut prin aplicarea algoritmului de mai sus

O configuraie corect obinut prin aplicarea algoritmului de mai sus


Problema rucsacului de tip 0-1
Problema rucsacului de tip 0-1 este enunat n cele ce urmeaz. Fiind date m obiecte,
fiecare avnd asociate o valoare i respectiv un cost de selecie, trebuie determinat un set de
obiecte cu proprietatea c este de valoare maxim (unde valoarea unei mulimi de obiecte este
definit ca suma valorilor obiectelor ce o compun) i costul (definit ca suma costurilor obiectelor
setului) este sub un prag dat, Cmax. Problema este de tip 0-1 pentru c nu pot fi selectate fraciuni
dintr-un obiect, ci ntregul obiect (dac prin aceast operaie nu este depit Cmax).
O soluie posibil este dat de un set de obiecte selectate astfel nct costul lui este inferior
valorii Cmax. Dac val este vectorul valorilor asociate celor m obiecte i cost este vectorul

costurilor, reprezentarea unui candidat la soluie poate fi realizat printr-un vector de m elemente,
v, unde

() {
i

()

()

Funcia de evaluare asociat lui v calculeaz valoarea asociat seleciei reprezentate de v,

()

()

*
+ i v este
Este evident c fiecare genotip v corespunde unui numr
reprezentarea binar a lui R i cu proprietatea c nu este depit pragul Cmax.
La fiecare moment de timp, populaia este format din N indivizi reprezentai aa cum a
*
+,
fost explicat mai sus. La momentul iniial, este generat aleator un numr
genotipul corespunztor lui fiind reprezentarea binar a lui R; R este selectat pentru reprezentare
numai dac nu este depit pragul Cmax. Procedeul continu pn la generarea a N cromozomi.
Selecia prinilor este realizat prin urmtorul procedeu. De N ori sunt alese perechi de
cromozomi din populaia curent i este selectat cel mai bun dintre ei, din punctul de vedere al
funciei de evaluare. Recombinarea este realizat cu o probabilitate pc (
) i este proiectat astfel nct progeniturile s rmn admisibile (costul asociat s
*
+
fie inferior lui Cmax): pentru doi indivizi
i pentru o poziie
generat aleator sunt obinute progeniturile
astfel:
copiaz primele poz elemente din , respectiv n , respectiv
copiaz n ultimele m-poz+1 poziii din
, respectiv
, ultimele m-poz+1
elementele din , respectiv
Dac
astfel obinui nu ndeplinesc proprietatea de admisibilitate, este selectat o alt
pereche de indivizi i este aplicat acelai mecanism, pn cnd este obinut o pereche de
genotipuri (soluii admisibile ale problemei de rezolvat). Dac o pereche de prini nu este
selectat pentru ncruciare, aceasta este meninut n populaia urmtoare.
Operatorul mutaie este aplicat cu o probabilitate pm (n general
) unui individ v
*
+ i modificarea valorii i
i revine la selectarea aleatoare a unei poziiei
)
)) (valoarea genei poz este schimbat din 0 n 1 sau
efectuarea operaiei (
( (
invers). Dac rezultatul nu este admisibil, este selectat un alt individ pentru mutaie.
Mecanismul de nlocuire a populaiei revine la selectarea acelor indivizi alei ca prini
dar pentru care nu s-a realizat operaia de ncruciare (valoarea generat aleator este inferioar
valorii pc) i pentru progeniturile (eventual mutante) rezultate. Fiecare generaie are deci
dimensiunea constant, N.
Condiia terminal controleaz numrul de iteraii efectuat. Alternativ, poate fi
implementat i o variant n care s fie controlat i calitatea populaiei, evaluat ca medie a
funciei de evaluare sau ca valoarea maxim a funciei de evaluare calculat pentru fiecare din
indivizii populaiei curente.
n continuare sunt prezentate funciile MATLAB pentru implementarea cutrii evolutive.
Datele sunt preluate din fiierul nume i sunt reprezentate de costurile i valorile asociate celor m
obiecte. Testele au fost efectuate pentru m=16 i m=32.
% citirea datelor din fisier
function [val,cost,costM]=citeste_date(nume);
f=fopen(nume);
m=fscanf(f,'%d',1);
val=fscanf(f,'%lg',[m,1]);

cost=fscanf(f,'%lg',[m,1]);
costM=fscanf(f,'%lg',1);
fclose(f);
end
% generarea populaiei iniiale
function [pop,val,cost,costM]=genereza_ini(nume,N);
[val,cost,costM]=citeste_date(nume);
[m,p]=size(val);
pop=zeros(N,m);
i=0;
while(i<N)
%se lucreaza pe m biti, generez R, un numar intre 1 si 2^m
%si consideram reprezentarea binara
R=unidrnd(2^m);
x=repr_bin(R-1,m);
[ok,sum]=verifica(x,cost,costM);
if(ok)
i=i+1;
pop(i,:)=x;
end;
end;
end
% obtinerea reprezentarii binare a unui numar
function [y]=repr_bin(x,m);
y=bitget(x,m:-1:1);
end
% verificarea admisibilitatii unei solutii potentiale
function [OK,sum]=verifica(x,cost,costM);
sum=x*cost;
OK = sum<=costM;
End
% operatorul de mutatie
function [y]=mutatie(x,poz);
y=x;
y(poz)=not(x(poz));
end
% operatorul de incrucisare
function [y1,y2]=crossover(x1,x2,poz);
[m,p]=size(x1);
y1=x1;y2=x2;
y1(1:poz)=x1(1:poz);
y1(poz+1:m)=x2(poz+1:m);
y2(1:poz)=x2(1:poz);
y2(poz+1:m)=x1(poz+1:m);
end
% selectia parintilor
function [parinti]=selectie(pop,val,cost,costM);
[N,m]=size(pop);
parinti=zeros(N,m);
i=0;
for i=1:N
p1=unidrnd(N);
p2=unidrnd(N);
%functia de fitness - suma vi*gi, gi=1,
%daca a fost ales obiectul i, 0 altfel
if(pop(p1,:)*val>=pop(p2,:)*val)

parinti(i,:)=pop(p1,:);
else
parinti(i,:)=pop(p2,:);
end;
end;
end
% inlocuirea populatiei curente cu generatia urmatoare
function [popN]=trecere(pop,val,cost,costM,pc,pm);
[parinti]=selectie(pop,val,cost,costM);
[N,m]=size(pop);
popN=zeros(N,m);
i=0;
%aplica operatia de crossover
for i=1:2:N
p1=unidrnd(N);x1=parinti(p1,:);
p2=unidrnd(N);x2=parinti(p2,:);
prc=unifrnd(0,1);
if(prc<=pc)
cont=1;
%trebuie ca progentiturile sa fie solutii admisibile
while(cont)
poz=unidrnd(m);
%disp(poz);
[y1,y2]=crossover(x1,x2,poz);
[OK1,sum1]=verifica(y1,cost,costM);
[OK2,sum2]=verifica(y2,cost,costM);
if((OK1==1)&&(OK2==1))
popN(i,:)=y1;
popN(i+1,:)=y2;
cont=0;
end;
end;
else
popN(i,:)=x1;
popN(i+1,:)=x2;
end;
end;
%aplica mutatia
for i=1:N
prm=unifrnd(0,1);
if(prm<=pm)
cont=1;
%trebuie ca progentitura sa fie solutie admisibila
while(cont)
poz=unidrnd(m);
x=popN(i,:);
[y]=mutatie(x,poz);
[OK,sum]=verifica(y,cost,costM);
if(OK==1)
popN(i,:)=y;
cont=0;
end;
end;
end;
end;
end
% calculul valorii maxime a functiei de evaluare
function [Q,x,V]=maximQ(pop,val);
[N,m]=size(pop);

Q=0;
V=zeros(N);
for i=1:N
qm=pop(i,:)*val;
V(i)=qm;
if(qm>=Q)
Q=qm;
x=pop(i,:);
end;
end;
end
% implementarea cautarii evolutive
function []=GA_Knapsack(nume,N,pc,pm);
%GA_Knapsack('date4.txt',2000,0.9,1.0/8); - obtinerea solutiei exacte
%pentru 32 de componente
%pentru 16 componente GA_Knapsack('date.txt',500,0.8,1.0/8); -solutia
%exacta
[pop,val,cost,costM]=genereaza_ini(nume,N);
[Q,x,V]=maximQ(pop,val);
%disp(x);
%disp(Q);
figure;
i=1:N;
plot(i,V(i),'r-');
hold on;
for j=1:15
[popN]=trecere(pop,val,cost,costM,pc,pm);
pop=popN;
[Q,x,V]=maximQ(pop,val);
%disp(Q);
%disp(x);
end;
[Q,x,V]=maximQ(pop,val);
%disp(x);
i=1:N;
plot(i,V(i),'k-');
hold on
for j=1:50
[popN]=trecere(pop,val,cost,costM,pc,pm);
pop=popN;
[Q,x,V]=maximQ(pop,val);
%disp(Q);
%disp(x);
end;
[Q,x,V]=maximQ(pop,val);
disp('Solutia optima calculata');
disp(x);
disp('Valoarea optima calculata');
disp(Q);
i=1:N;
plot(i,V(i),'b-');
end

La apelul
GA_Knapsack('date.txt',500,0.8,1.0/8);
fiierul date.txt conine urmtoarele informaii:

Numrul de componente:
16
Valoarea obinut la alegerea fiecrei componente
4.5 6 8 5.4 10.2 3.2 4.2 8.3 3.2 4.5 9 10.9 5 6.2 7 8.2
Costul alegerii fiecrei componente
3 2 2.4 6.8 5 6.2 5 4.8 5 0.2 3 4.8 7 7.1 9.7 4
Costul maxim permis
26.3
n continuare este prezentat un exemple de evoluie a EA.

Solutia optima calculata


0 1 1 0 1 0

Valoarea optima calculata


65.1000

La apelul
GA_Knapsack('date4.txt',2000,0.9,1.0/8);
fiierul date4.txt conine urmtoarele informaii:
Numrul de componente:
32

Valoarea obinut la alegerea fiecrei componente


2.5 6 8 3.4 10.2 3.2 4.2 8.3 3.2 4.5 9 10.9 5 6.2 7 8.2 9.2 1.3 4 5 8.9 0.4 7.3 4.1 8
3 11 2.5 3 1.2 5 2.3
Costul alegerii fiecrei componente
7 3.1 2.4 8.8 5 5.2 5 4.8 5 5.2 6 4.8 7 1.1 2.7 4.9 5 5.6 8 2.5 4 4 2.2 5.2 3.1 6.4
3.3 7 6.5 8 1.4 9.8
Costul maxim permis
56.6
n continuare este prezentat un exemple de evoluie a EA.

Solutia optima calculata


0

Valoarea optima calculata


128.2000