?? example62.m
字號:
%sa2
%==============
%==============
figure('name','初始分布圖示','numbertitle','off');
%%%%% sa_Dist calculate the distance between two points %%%%%%%
clc
T_start=str2num(tstart);
T_end=str2num(tend);
det_T=str2num(trate);
mystep_limit=str2num(epoch);
tolerance=str2num(thre);
num=str2num(num);
InnerLimit=0;
Error=[];road=[];
if num==10
mapmatrix=imread('10cities.bmp');
else
mapmatrix=imread('20cities.bmp');
end
[x,y,distance,cities]=sa_Dist(mapmatrix);
[m,n]=size(distance);
mystep=1;
perm_old=randperm(m);
%%%%%%% sa_length calculate the length of one road %%%%%%%%%%%
road_old=sa_length(perm_old,distance);
perm_retain=perm_old;
road_retain=road_old;
T=T_start;
while T>T_end
Inner=20;
while Inner>InnerLimit
seq1=0;seq2=0;
while seq1==seq2
seq1=ceil(rem(rand(1)*1000,m));seq2=ceil(rem(rand(1)*1000,m));
end
perm_now=perm_retain;
perm_mid=perm_now(seq1);perm_now(seq1)=perm_now(seq2);perm_now(seq2)=perm_mid;
road_now=sa_length(perm_now,distance);
det_road=road_now-road_retain;
Error(mystep)=det_road;
prob=exp(-det_road/T);
%adjust by the prbo
if det_road < 0
perm_retain=perm_now;
road_retain=road_now;
end
if det_road >= 0
if tolerance < prob
perm_retain=perm_now;
road_retain=road_now;
end
perm_retain=perm_retain;
road_retain=road_retain;
end
Inner=Inner-1;
end
road(mystep)=road_retain;
% det_road1=road_now-road_retain;
% Dispersion(mystep)=det_road1;
T=T*det_T;
mystep=mystep+1;
if mystep > mystep_limit, break, end ;
end
clc
fprintf('the distance is : ');
fprintf('%d\n\n',round(road_retain));
fprintf('now! the shortest road is: ')
perm_retain
for i=1:cities
r=perm_retain(i);
x1(i)=x(r);
y1(i)=y(r);
end
plot(x1,y1,'o'),alabel('x label','y label','TSP cities');
figure('name','路徑圖示','numbertitle','off');
plot(x1,y1,'o',x1,y1,'r'),alabel('x label','y label','The road answered by SA');
figure('name','距離變化曲線','numbertitle','off');
%subplot(1,2,1),
plot(road),alabel('steps','Distance','Distance of each road');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -