Sunteți pe pagina 1din 9

Evoluia cutare directcutare stochastic

Componentele EA

I. Evoluia cutare direct-cutare stochastic

Evoluia cutare direct-cutare stochastic: metodele de tip hill


climbing i simulated annealing.

Metodele de tip hill climbing

tehnic de iterativitate mbuntit, aplicat unui singur punct din spaiul de


cutare.
la o iteraie este selectat un nou punct aflat ntr-o vecintate a punctului curent
procesat (de exemplu, dac punctul curent este num real consider un tip de
reprezentare binar i modific un bit al reprezentrii)
dac acest punct determin o valoare mai bun (din punct de vedere al criteriului
de optim considerat) pentru funcia obiectiv, el devine punct curent.
altfel, este selectat o alt vecintate a punctului curent, procesul desfurnduse ulterior similar.
algoritmul se ncheie cnd nici un punct vecin celui curent nu aduce mbuntiri
valorilor funciei obiectiv.
sunt obinute de obicei la valori de optim local, depinznd de punctul de start.
Pentru a crete performanele unor astfel de modele, acestea se utilizeaz
pentru un numr mare de punct de start.

II. Algoritmul hill climbing

III. Reprezentarea binar a unui numar real

Implementarea MatLab
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 numrului real t corespunzator reprezentrii binare y
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

IV. Maximizarea unei funcii de 2 variabile

utiliznd metoda hill climbing

Maximizeaz , definit prin

function [val]=f_obiectiv(x,y);
val=exp(-x^2-y^2)+y*cos(5*x)-x*sin(3*y);
end
function [val,v]=hillclimbing(a,b,nz,MAX);
[y,m]=repr_sir_bin(0,a,b,nz);
V=[];
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; %while (local==0)

if(valm>val)
val=valm; v=vc; timp=t;
end;
V=[V;vc];
end; %for i=1:MAX
disp(v); disp(val); disp(timp); plot_obiectiv(V,timp,a,b);
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);
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

La un apel hillclimbing(-2,2,5,75); pot fi obinute rezultatele:


x=-1.9102, y=-1.6250, valoarea maxim: 3.4989.

S-ar putea să vă placă și