0.代码链接
基于模拟退火算法的旅行商问题优化(matlab程序)资源-CSDN文库
1.简述
金属退火是将金属加热到一定温度,保持足够时间,然后以适宜速度冷却(通常是缓慢冷却,有时是控制冷却)的一种金属热处理工艺。模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
处在低温状态时,固体中分子具有的内能很低,在原本的位置上做小范围的振动。若是将固体加热到一定温度,分子内能将会增加,热运动加剧,分子排列的无序度增加。此时再将温度缓缓降低,在每个温度都达到平衡态(即准静态过程),分子具有的能量逐渐降低,最终回归到有序排列的状态,分子内能也跟着降到最低。
模拟退火算法(Simulated Annealing,SA)
最早的思想是由N. Metropolis
等人于1953
年提出。1983
年,S. Kirkpatrick
等成功地将退火思想引入到组合优化领域。它是基于Monte-Carlo
迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。
2.部分代码
%% 横纵坐标归类
x=sj(:,1:2:8);x=x(:);
y=sj(:,2:2:8);y=y(:);
sj=[x y];%得到坐标
%% 出发起始位置
d1=[70,40];%起始位置
sj=[d1;sj;d1];%将起始位置加入路径中
sjb=sj;%备份
sj=sj*pi/180;%得到弧度
%距离矩阵d
d=zeros(102);
for i=1:101
for j=i+1:102
temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2));
d(i,j)=6370*acos(temp);%距离矩阵
end
end
d=d+d';%对称矩阵
S0=[];
Sum=inf;
rand('state',sum(clock));%开始计时
for j=1:1000
S=[1 1+randperm(100),102];%生产一个路径
temp=0;
for i=1:101
temp=temp+d(S(i),S(i+1));%计算当前的路径的距离
end
if temp<Sum %更新
S0=S;Sum=temp;
end
end
。。。。。。。
3.运行结果