用模拟退火算法求解TSP问题
模拟退火算法是一种基于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问题相关推荐
- 模拟退火算法求解TSP问题
前言:模拟退火(simulated annealing)技术,在每一步都以一定的概率接受比当前结果更差的结果,从而有助于"跳出"局部极小.在每次迭代过程中,接受"次优解& ...
- 模拟退火算法求解TSP问题(python)
- matlab算法大全 pdf_遗传模拟退火算法求解旅行商(TSP)问题
hello大家好,很高兴又和大家见面了.在之前的遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解和模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解这两篇推文中,分别讲解了 ...
- 基于模拟退火算法的TSP算法
文章目录 一,理论基础 二,TSP问题介绍 三,思路和步骤 控制参数的设置 初始解 解变换生成新解 Metropolis准则 降温 四,MATLAB程序实现 五,结果分析 六,算法的改进 七,算法的局 ...
- 模拟退火算法求解旅行商问题(python实现)
模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...
- 蚁群算法求解TSP问题的源代码
蚁群算法求解TSP问题的源代码 分类: 智能算法2014-05-07 17:25 524人阅读 评论(1) 收藏 举报 蚁群算法 TSP win32程序设计 旅行商问题大都是用遗传算法求解,不过蚁群算 ...
- 《MATLAB智能算法30个案例》:第19章 基于模拟退火算法的TSP算法
<MATLAB智能算法30个案例>:第19章 基于模拟退火算法的TSP算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析&g ...
- 模拟退火算法求解旅行商问题
模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 旅行商(TSP)问题 一.TSP问题分析 二.模拟退火算法 1.一秒理解算法 2.算法原理 3. 算法流程 三.伪代码 四.运行结果 ...
- MATLAB模拟退火算法求解超市物流配送选址问题实例
模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...
最新文章
- 小程序内容审核违规过滤,在小程序使用security.msgSecCheck
- 如何高效地爬取链家的房源信息(一)
- 炉石传说 C# 设计文档(序)
- bitmapdata转成bytearray
- 集群调度框架的架构演进之路
- 关于编译器的一个问题
- linux打包运行python文件_Linux下安装pyinstaller用于将py文件打包生成一个可执行文件...
- python设计问答器_Python文件包装器,最佳设计?
- 经典C语言程序100例之七六
- springboot日志处理
- html 缩略图点击预览,jQuery图片相册点击缩略图弹出大图预览特效
- mysql 利用触发器(Trigger)让代码更简单
- RAN adjusts schedule for 2nd wave of 5G specifications
- (转载)python调用shell命令之os 、commands、subprocess
- web前端开发工程师必会的5种网页布局方法?
- Android Studio导入从Github下载的源码
- 利用哈夫曼编码英文字母表
- ModbusTCP协议
- Oracle密码过期解决办法
- 矩阵分解(5)-- 正定矩阵与半正定矩阵