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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| clc ;clear all;close all;
x1=-1.2; %point de départ imposé par mon énoncé:
y1=1; % P=[-1.2,1]
T=70;
xbest=-1.2; % la meilleur solution est pour l'instant le pt de départ
ybest=1;
n=4;
nexe=1;
tab = [];
while nexe< 50
RepetitionTfixe=0;
T=70;
n=4;
while(T>0.001)
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=(100*(x2^2-y2)^2+(1-x2)^2)-(100*(x1^2-y1)^2+(1-x1)^2);
if Delta<0
x1=x2;
y1=y2;
Gamma= (100*(xbest^2-ybest)^2+(1-xbest)^2)-(100*(x1^2-y1)^2+(1-x1)^2);
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
best_fit=(100*(xbest^2-ybest)^2+(1-xbest)^2);
end
nexe=nexe+1;
tab = [tab ; [best_fit xbest ybest]];
end
dlmwrite('filename9',tab,'\t')
mean=mean (tab,1)
std=std (tab,[],1)
min=min(tab,[],1) |
Partager