模拟退火算法之旅行商(TSP)问题matlab实现
2020-07-16 05:27
253 查看
模拟退火算法之旅行商(TSP)问题matlab实现
关于模拟退火算法的理论部分,小编就不多做赘述,请看下图(如有问题请百度):
话不多说,请看例题:
一位旅行者从出发点(200,200)出发,要求经过30个目标点,并且每个点只能经过一次,最终经过所有点后回到起点。 要求:为旅行者制定一条最短路径。
下面是利用模拟退火算法求TSP问题的代码:
由于小编比较懒,不想挨个敲坐标,就利用matlab中rand()函数自动生成30个点的坐标。如果你有坐标,换成自己的坐标就行了。
生成坐标代码如下:
x=randi([0,150],30,1); y=randi([0,120],30,1); %%%一时找不到数据,就自动生成了三十个坐标点(xi,yi),i=1,2...,30; sj0=[x,y]; ss0=[200,200]; %%%出发点选取(100,100); sj=[ss0;sj0;ss0]; %%%将出发点加在30个点的开始和结束;
模拟退火求TSP问题的matlab源码
%%%(1)计算各点之间的距离,存储于距离矩阵d中 d=zeros(length(sj)); %%%距离矩阵初始化; for i=1:length(sj)-1 for j=i+1:length(sj) d(i,j)=sqrt((sj(i,1)-sj(j,1))^2+(sj(i,2)-sj(j,2))^2); end end d=d+d'; %%%(2)求一个较好的初始解 path=[]; %%%路线初始化; long=inf; %%%路线长度初始化; rand('state',sum(clock)); for j=1:100000 path0=[1,1+randperm(length(sj0)),length(sj)]; temp=0; for i=1:length(sj)-1 temp=temp+d(path0(i),path0(i+1)); end if temp<long path=path0; long=temp; end end %%%(3)退火过程 L=50000; at=0.999; %%%降温系数 T=100; %%%初始温度 e=0.1^30; %%%终止温度 long_temp=[]; m=0; for k=1:L c=1+randperm(length(sj0),2); c=sort(c); c1=c(1); c2=c(2); df=d(path(c1-1),path(c2))+d(path(c1),path(c2+1))-d(path(c1-1),path(c1))-d(path(c2),path(c2+1));%%%代价函数增量 if df<0 %%%接受准则 path=[path(1:c1-1),path(c2:-1:c1),path(c2+1:length(sj))]; long=long+df; elseif exp(-df/T)>=rand %%% 概率接受 path=[path(1:c1-1),path(c2:-1:c1),path(c2+1:length(sj))]; long=long+df; end t=0; for i=1:length(sj)-1 t=t+d(path(i),path(i+1)); end long_temp=[long_temp,t]; T=at*T; if T<e break; end m=m+1; end path; long subplot(2,1,1) xx=sj(path,1); yy=sj(path,2); plot(xx,yy,'-*') subplot(2,1,2) plot(long_temp,'-')
总结:小编通过对算法和代码进行多次运行。对算法进行分析,小编个人看法,模拟退火算法在求解TSP问题上有许多优势,但是,在模拟退火过程中,由于新的状态完全依赖于上一个状态,并且在新状态接受过程中,需要满足接受概率。因此,对于同一个问题,每次运行的结果也略有不同。同时,降温速度的快慢,需要具体情况具体把握。
就本文的问题欢迎感兴趣的小伙伴私聊,同时,小编存在的问题欢迎大家随时指正。最后,喜欢小编的小伙伴点个赞,加个关注吧!小编将持续更新
相关文章推荐
- MATLAB--基于遗传算法的旅行商问题(TSP问题)实现
- 【算法】模拟退火算法解决TSP问题的matlab实现
- 模拟退火算法解旅行商问题(TSP)
- 模拟退火算法(SA)求解TSP 问题(C语言实现)
- 模拟退火算法 解决旅行商(TSP)问题
- 在matlab上实现遗传算法解决TSP旅行者问题
- 一个模拟退火算法求TSP问题的C#实现
- 基于MATLAB的模拟退火算法求解TSP问题
- Matlab模拟退火算法解决TSP问题
- 利用Matlab以蚁群算法(Ant Colony Algorithm)求解不闭合的旅行商问题(Travelling Salesman Problem, TSP)并进行可视化
- 模拟退火算法解决旅行商问题_SA_TSP
- 遗传算法与TSP问题的MATLAB实现
- TSP_旅行商问题 - 模拟退火算法(三)
- 利用模拟退火算法求解TSP问题(C++实现)
- 启发式算法之模拟退火算法 旅行商问题TSP C++实现
- Matlab遗传算法用于旅行商问题优化TSP
- 模拟退火算法解决TSP问题+Python实现
- 遗传算法与TSP问题的MATLAB实现
- 模拟退火算法解旅行商(TSP)问题
- 模拟退火算法之TSP旅行商问题~