模拟退火算法是一种基于MonteCarlo迭代求解策略的一种随机寻优算法。该算法从某一较高初温出发,伴随温度参数的不断下降,结合概率的突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。

模拟退火算法的基本思想是:在一定温度下,搜索从一个状态随机地变化到另一个状态;随着温度的不断下降直到最低温度,搜索过程以概率1停留在最优解。

模拟退火算法的基本步骤如下:

用模拟退火算法求解TSP问题的MATLAB代码如下所示:

function [ E ] = Sum( C,X )
%UNTITLED2 此处显示有关此函数的摘要
%   此处显示详细说明
L = size(X);
E = 0;for i = 1:L(1,2)-1E = E + sqrt((C(X(1,i),1)-C(X(1,i+1),1))*(C(X(1,i),1)-C(X(1,i+1),1))+(C(X(1,i),2)-C(X(1,i+1),2))*(C(X(1,i),2)-C(X(1,i+1),2)));
end
E = E + sqrt((C(X(1,1),1)-C(X(1,30),1))*(C(X(1,1),1)-C(X(1,30),1))+(C(X(1,1),2)-C(X(1,30),2))*(C(X(1,1),2)-C(X(1,30),2)));
end
clc,clear
load('City.mat');Loop = 1000;
alpha = 0.9;
tf = 0.0001;X = zeros(1,30);
for i = 1:30X(1,i) = i;
end%scatter(City(:,1),City(:,2),'p')
%hold on;sumarray = zeros(1,Loop);
sumarrayx = zeros(1,Loop);T = 10000;
for i = 1:Loopif T<tfbreakendfor k = 1:2000index1 = 0;index2 = 0;while index1<1 || index1>30index1 = round(30*rand);endwhile index2<1 || index2>30index2 = round(30*rand);endY = X;Y(1,index1) = X(1,index2);Y(1,index2) = X(1,index1);dsum = Sum(City,Y)-Sum(City,X);if dsum<0X = Y;elseaccept = rand;if accept < exp(-dsum/(k*T))X = Y;endend       endT = T*alpha;sumarray(1,i) = Sum(City,X);sumarrayx(1,i) = i;
end
%scatter(sumarrayx(1,1:i),sumarray(1,1:i))
scatter(City(:,1),City(:,2),'p')
hold on;
for i = 1:29line([City(X(1,i),1) City(X(1,i+1),1)],[City(X(1,i),2) City(X(1,i+1),2)])hold on;
end
line([City(X(1,1),1) City(X(1,30),1)],[City(X(1,1),2) City(X(1,30),2)])
hold on;
Sum(City,X)

所用的数据散点图(共有30个城市)如下所示

迭代100次效果如下所示

迭代200次结果如下所示

迭代1000次结果如下

路径和随迭代次数的变化如下所示

参考资料:《模拟退火算法》(PPT)卿  铭

用模拟退火算法求解TSP问题相关推荐

  1. 模拟退火算法求解TSP问题

    前言:模拟退火(simulated annealing)技术,在每一步都以一定的概率接受比当前结果更差的结果,从而有助于"跳出"局部极小.在每次迭代过程中,接受"次优解& ...

  2. 模拟退火算法求解TSP问题(python)

  3. matlab算法大全 pdf_遗传模拟退火算法求解旅行商(TSP)问题

    hello大家好,很高兴又和大家见面了.在之前的遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解和模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解这两篇推文中,分别讲解了 ...

  4. 基于模拟退火算法的TSP算法

    文章目录 一,理论基础 二,TSP问题介绍 三,思路和步骤 控制参数的设置 初始解 解变换生成新解 Metropolis准则 降温 四,MATLAB程序实现 五,结果分析 六,算法的改进 七,算法的局 ...

  5. 模拟退火算法求解旅行商问题(python实现)

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...

  6. 蚁群算法求解TSP问题的源代码

    蚁群算法求解TSP问题的源代码 分类: 智能算法2014-05-07 17:25 524人阅读 评论(1) 收藏 举报 蚁群算法 TSP win32程序设计 旅行商问题大都是用遗传算法求解,不过蚁群算 ...

  7. 《MATLAB智能算法30个案例》:第19章 基于模拟退火算法的TSP算法

    <MATLAB智能算法30个案例>:第19章 基于模拟退火算法的TSP算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析&g ...

  8. 模拟退火算法求解旅行商问题

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 旅行商(TSP)问题 一.TSP问题分析 二.模拟退火算法 1.一秒理解算法 2.算法原理 3. 算法流程 三.伪代码 四.运行结果 ...

  9. MATLAB模拟退火算法求解超市物流配送选址问题实例

    模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...

最新文章

  1. 小程序内容审核违规过滤,在小程序使用security.msgSecCheck
  2. 如何高效地爬取链家的房源信息(一)
  3. 炉石传说 C# 设计文档(序)
  4. bitmapdata转成bytearray
  5. 集群调度框架的架构演进之路
  6. 关于编译器的一个问题
  7. linux打包运行python文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...
  8. python设计问答器_Python文件包装器,最佳设计?
  9. 经典C语言程序100例之七六
  10. springboot日志处理
  11. html 缩略图点击预览,jQuery图片相册点击缩略图弹出大图预览特效
  12. mysql 利用触发器(Trigger)让代码更简单
  13. RAN adjusts schedule for 2nd wave of 5G specifications
  14. (转载)python调用shell命令之os 、commands、subprocess
  15. web前端开发工程师必会的5种网页布局方法?
  16. Android Studio导入从Github下载的源码
  17. 利用哈夫曼编码英文字母表
  18. ModbusTCP协议
  19. Oracle密码过期解决办法
  20. 矩阵分解(5)-- 正定矩阵与半正定矩阵

热门文章

  1. 《炒股的智慧》--陈江挺
  2. 家庭NAS服务器(2)VM测试-Ubuntu组建Raid10
  3. SQL Server 如何读写数据
  4. java 毕业设计源码-基于Vue助农扶贫电商平台ssm电子商务网站
  5. 10.1 单片机数字秒表程序
  6. kubernets 集群搭建
  7. 【python掩膜及多子图colorbar】
  8. LocalDateTime计算两个时间的间隔
  9. 2022年深圳适合拍古风照的地方有哪些
  10. 面向产业互联网eSIM终端的激活方案研究