Professional Documents
Culture Documents
LAB 3-25 Febr 21-Exemplu SA Mininmizare Functie
LAB 3-25 Febr 21-Exemplu SA Mininmizare Functie
Minimizare functie
Nx=3;
TA=0.5;
Neps=4;
alfa=0.8;
kmax=20;
lmax=10;
DSL=1.; % valoarea initiala pt delta-sl : current step length
NrMaxEval=100000;
EPS1=10^(-6);
EPS2=10^(-6);
%Limite up si lower
Tmax=+3;
Tmin=-3;
xk=zeros(1,Nx);
%Initializari
Nacc=0;
Nev=0;
TA=0.5; % TA este SA-temperature, pt m=0;
%xk=xk+T0; % initializare stare initiala xk pt k=0
% BUCLA dupa l
l=0;
while (l<=lmax)&&(converg==0)
% BUCLA dupa k
k=0;
while (k<=kmax)&&(converg==0)
%Bound constraints
for i=1:Nx
if xk1(i)>Tmax xk1(i)=Tmax;end
if xk1(i)<Tmin xk1(i)=Tmin;end
end
end
if (jc==Neps)&&(TA<EPS2) %conditie de oprire
converg=1;
end
% ******************DEPISTARE depasire NrMaxEval
if (Nev>NrMaxEval) %conditie de oprire fara convergenta
converg=2;
end
else
% regula METROPOLIS
val=exp(-(fi_xk1-fi_xk)/TA); %Remarc ca fi_xk1>fi_xk si cautam un minim
p=random('unif',0,1);
if val>=p
xk=xk1 ; % Se accepta noua stare generata
fi_xk=fi_xk1; % Memorez si fi-ul
Nacc=Nacc+1; % Actualizez nr de "pasi" acceptati
end
end
k=k+1;
end; %ciclu dupa k
DSL=Actualizare_DSL(Nacc,Nev);
l=l+1;
end; %ciclu dupa l
TA=TA*alfa;
xk=xopt; % Se continua cautarea cu xopt
fi_xk=fi_xopt;
disp(['TA: ',num2str(TA)]);
disp(['q: ',num2str(Nacc/Nev)]);
disp(['step length: ',num2str(DSL)]);
end;
disp('***********');
function DSL1=Actualizare_DSL(Nacc,Nev)
global DSL;
% global nrk;
% global vq;
q=Nacc/Nev;
% nrk=nrk+1;
% vq=[vq q];
if q>0.6
DSL1=DSL*(1.+(q-0.6)/0.4);
else
if q<0.4
DSL1=DSL*1./(1.+(0.4-q)/0.4);
else
DSL1=DSL;
end
end
end
function fi=eval_myf1(x)
fi=19.+x(1)^4-2*x(1)^2+3*x(2)^2+4*x(3)^2+12*x(2)+8*x(3);
end