1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
x1=-1.2; %point de départ imposé par mon énoncé:
y1=1; % P=[-1.2,1]
T=70;
RepetitionTfixe=0; %compteur à zéro
xbest=-1.2; % la meilleur solution est pour l'instant le pt de départ
ybest=1;
n=4;
while(T>0.01)
while(RepetitionTfixe<50)
x2= x1 + ( (rand(1,1)-rand(1,1))*n); %recherche d'un point voisin
y2= y1 + ( (rand(1,1)-rand(1,1))*n);
Delta=Rosenbrock(x2,y2)-Rosenbrock(x1,y1); %calcul du delta
if Delta<0
x1=x2;
y1=y2;
Gamma=Rosenbrock(xbest,ybest)-Rosenbrock(x1,y1);
if Gamma>0
xbest=x1;
ybest=y1;
end
else
p=rand(1,1); % on tire aléatoirement p entre 0 et 1
if p< exp(-Delta/T) % critère de metropolis
xbest=x2; % on sauve les valeurs
ybest=y2;
end
end
RepetitionTfixe=RepetitionTfixe+1;
end
T=0.99*T; % une méthode parmi d'autre de "cooling schedule"
n=0.99*n; % on diminue l'intervalle de recherche du point voisin
RepetitionTfixe=0; % remise à zéro du compteur une fois les 50 répétitions
end
xbest
ybest
Rosenbrock(xbest,ybest) |
Partager