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
| x11=-1.2; %point de départ imposé par mon énoncé:
x21=1; % P=[-1.2,1]
T=70;
RepetitionTfixe=0; %compteur à zéro
xbest=x11; % la meilleur solution est pour l'instant le pt de départ
ybest=x21;
n=4;
while(T>0.01)
while(RepetitionTfixe<50)
x12= x11 + ( (rand(1,1)-rand(1,1))*n); %recherche d'un point voisin
x22= x21 + ( (rand(1,1)-rand(1,1))*n);
Delta=Rosenbrock(x12,x22)-Rosenbrock(x11,x21); %calcul du delta
if Delta<0
x11=x12;
x21=x22;
Gamma=Rosenbrock(xbest,ybest)-Rosenbrock(x11,x21);
if Gamma>0
xbest=x11;
ybest=x21;
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=x12; % on sauve les valeurs
ybest=x22;
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
plot(RepetitionTfixe,Rosenbrock(xbest,ybest)) hold on
end
xbest
ybest
Rosenbrock(xbest,ybest) |
Partager