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

本文共 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

你可能感兴趣的文章
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>
flink watermark介绍
查看>>
[Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
查看>>
Android Xutils 框架
查看>>
C#基础知识整理 基础知识(21) 委托(二)
查看>>
Sysbench 0.5版安装配置
查看>>
书摘—你不可不知的心理策略
查看>>
【博客话题】毕业——开始人生的艰苦历程
查看>>
Linux安装telnet
查看>>
sap scriptfom 多语言翻译
查看>>
黄聪:3分钟学会sessionStorage用法
查看>>
Entity Framework 全面教程详解(转)
查看>>
Windows上Python2.7安装Scrapy过程
查看>>
Chapter 3:Code Style in Django
查看>>
挖掘数据金矿 领军协同创新 曙光荣膺“2016大数据创新应用领袖企业”称号
查看>>
Fast通道获得Win10 Mobile Build 14977更新
查看>>
《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.6节识别操作系统...
查看>>
linux系统防火墙iptables命令规则及配置的示例
查看>>
10 个顶尖的 Linux 开源人工智能工具
查看>>
Firefox 跟踪保护技术将页面加载时间减少 44%
查看>>