Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
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
)(
, Rezult
i
( )
ntr-adevr,
(
b) Fie
)
. Atunci
)(
, Obinem
i
( )
ntr-adevr,
(
, definit prin
(
pe intervalul ,
-.
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
(
)
(
)
( )
( )
- ,
-.
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
-.
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
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.
Pentru
rezultate.
identifice maximul global al funciei obiectiv i membrii populaiei la momentul final sunt grupai
ntr-o vecintate a punctului de maxim global.
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
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
costurilor, reprezentarea unui candidat la soluie poate fi realizat printr-un vector de m elemente,
v, unde
() {
i
()
()
()
()
*
+ 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.
La apelul
GA_Knapsack('date4.txt',2000,0.9,1.0/8);
fiierul date4.txt conine urmtoarele informaii:
Numrul de componente:
32