博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TSP 模拟退火
阅读量:5130 次
发布时间:2019-06-13

本文共 942 字,大约阅读时间需要 3 分钟。

TSP——模拟退火解法

都知道TSP是经典的NP问题,从一个点开始遍历所有点,不重复,求最短路径。

可以用枚举终点,跑流量为2的最小费用,图论来做,时间复杂度为 ​ 费用流已经用到堆优化了。显然点,边较多将无法承受。

 

如果不要求精确解,使用模拟退火也是一个不错的选择。模型简单,转移很暴力。

先随机生成一些解,然后随机挑两个点,开始试探转移。

 

 

这里,几乎是按照退火算法模板写的了,有初始化,有状态转移,有接受准则。

clc, clearsj0=load('sj.txt');x=sj0(:,[1:2:8]);x=x(:);y=sj0(:,[2:2:8]);y=y(:);sj=[x y]; d1=[70,40]; sj=[d1;sj;d1]; sj=sj*pi/180;d=zeros(102);for i=1:101   for j=i+1:102    d(i,j)=6370*acos(cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2)));   endendd=d+d';path=[];long=inf;​rand('state',sum(clock));  %初始化随机数发生器​for j=1:1000  %求较好的初始解    path0=[1 1+randperm(100),102]; temp=0;    for i=1:101        temp=temp+d(path0(i),path0(i+1));    end    if temp
rand path=[path(1:c1-1),path(c2:-1:c1),path(c2+1:102)]; long=long+df; end T = T*at; if T < e break; endend​xx = sj(path,1);yy = sj(path,2);plot(xx,yy,'-*');

 

 

 

 

转载于:https://www.cnblogs.com/TreeDream/p/8394766.html

你可能感兴趣的文章
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>