理论部分不再赘述,详情请查看我以往文章。

(19条消息) 模拟退火算法——理论篇_talkAC的博客-CSDN博客

1 仿真问题

旅行商问题(TSP问题)。

假设1个旅行商要对31个省会城市进行拜访,要求距离最短,不能重复拜访,且最终要回到出发城市。

31个城市坐标:

[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;
    3238 1229;4196 1044;4312 790  ;4386 570  ;3007 1970;2562 1756;
    2788 1491;2381 1676;1332 695  ;3715 1678;3918 2179;4061 2370;
    3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;
    3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;
    2370 2975];

2 仿真过程

初始化参数 -> 初温T、初始访问顺序city即初解

在温度t上进行充分探索 -> 迭代L次

在city上随机交换2个城市访问顺序,产生新解

计算新解增量ΔE

基于ΔE和Metropolis 采样算法,选择是否更新解

降温或终止 ->     减小接受劣质解的概率

3 Metropolis 采样算法

关键点是,当没有增量时并不完全抛弃劣质解,而是以一个概率P接受劣质解,以避免陷入局部最优的情况, 达到全局探索。

当T很大时,接受劣质解的概率达到最大,以保证全局搜索能力;当不断降温,T变小,接受劣质解的概率趋近0, 争取最快的收敛速度。

影响劣质解被接受的还有增量ΔE,ΔE越大,负贡献越大,P越小,被接受的概率越小,反之亦然。

4 求解代码

初始化参数

close all;
clear all;
clc;
%%%%%初始化参数
C = [1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;3238 1229;4196 1044;4312 790 ;4386 570 ;3007 1970;2562 1756;2788 1491;2381 1676;1332 695 ;3715 1678;3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];
n=size(C,1);
T=n*100;
L=100;
K=0.99;
l=1;
%%%%%初始化访问城市顺序
D=zeros(n);
for i=1:nfor j=1:nD(i,j)=((C(i,1)-C(j,1))^2 + (C(i,2)-C(j,2))^2)^0.5;end
end
city=randperm(n);
len(l)=func1(D,city,n);

产生新解

%%%%%算法循环
while T>0.001%%%%%每个温度的探索for i=1:Llen1=func1(D,city,n);%%%%%随机交换位置,产生新的访问顺序p1=floor(1+rand*n);p2=floor(1+rand*n);while p1==p2p1=floor(1+rand*n);p2=floor(1+rand*n);endtemp_city=city;temp=temp_city(p1);temp_city(p1)=temp_city(p2);temp_city(p2)=temp;

Metropolis 采样

%%%%%计算新路径长度及增量Elen2=func1(D,temp_city,n);delta_E=len2-len1;%%%%%判断是否接受新的访问顺序if delta_E<0city=temp_city;elseif exp(-delta_E/T)>randcity=temp_city;endendend

降温、画变化图

    l=l+1;len(l)=func1(D,city,n);%%%%%降温T=T*K;%%%%%画图for i=1:n-1plot([C(city(i),1),C(city(i+1),1)],[C(city(i),2),C(city(i+1),2)],'o-');hold on;endplot([C(city(n),1),C(city(1),1)],[C(city(n),2),C(city(1),2)],'ro-');title([num2str(l),'次最短距离:',num2str(len(l))]);hold off;pause(0.01);
end

结果输出

%%%%%输出优化结果
figure;
plot(len);
xlabel('迭代次数');
ylabel('目标函数值');
title('适应度进化曲线');
%%%%%路径长度函数
function result = func1(D,f,N)len=D(f(1),f(N));for j=2:Nlen=D(f(j),f(j-1))+len;endresult=len;
end

5 仿真结果

模拟退火算法——仿真篇相关推荐

  1. 模拟退火算法——理论篇

    模拟退火算法(Simulated Annealing,SA)是模拟物理退火求解组合问题的算法,核心是要理解Metropolis 采样算法,具有算法简单.适用范围广.可靠性高等特点. 图片来自网络 1 ...

  2. C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑

    C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑 写在前面 图像处理算法-仿真篇 DSP硬件移植篇-挖坑篇 DSP硬件移植篇-坑的种类 写在前面 时间如白马过隙,今天登录CSDN ...

  3. 模拟退火算法从原理到实战【基础篇】

    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...

  4. java模拟退火算法求函数_模拟退火算法从原理到实战【基础篇】

    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...

  5. 美赛 8:模拟退火算法、遗传算法、粒子群算法(智能算法篇)

    目录 一.模拟退火算法(Simulated annealing algorithm,SA) 1.SA的基本理论 2.SA求解函数最值 3.SA工具箱 二.遗传算法(Genetic Algorithm, ...

  6. 算法学习之模拟退火算法路径规划(python代码实现)

    模拟退火算法路径规划(python代码实现) 一.引言 二.算法介绍以及伪代码 1.算法通俗介绍 2.路径规划算法伪代码 三.算法流程及代码实现 1.地图创建 2.初始化路径 小结 3.计算适应度值 ...

  7. 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】

    简述 代码我是基于我之前写的两篇,一篇是遗传算法TSP的Python实现,一篇是模拟退火算法的解决TSP的C++实现. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题 遗传算法解 ...

  8. music算法_“要热爱 请深爱”系列(5)浅谈模拟退火算法

    黄乐天 浅谈模拟退火算法 背景 在实际生活中, 数学问题中,我们常常会遇到(一定范围内)函数求最值的问题.一般可以用数学方式解答,但如果遇到如下恶心的函数: 它的函数图像是这样的: 我们只好用计算机科 ...

  9. 模拟退火算法(代码可直接运行)

    模拟退火算法(SA) 模拟退火是很经典的算法,针对大多数模型.应用,受限于SA运行时间长等特点,已不能直接应用SA,这样的算法值得去改进,我试图找一些缩短运行时间的方法,已经在测试,这里是模拟退火第一 ...

最新文章

  1. mysql5.7安装教程图文详解
  2. c++可视化开发_页面可视化配置搭建工具技术要点
  3. Android --- BaseQuickAdapter 子控件设置了addOnClickListener(R.id.xxx);点击的时候还是没反应
  4. Linux下查看文件和文件夹大小的df和du命令
  5. 腾讯面试Android必问11题,我说的,不信就来看看
  6. 系统总线频率和外频有何区别?
  7. samba-设定文件共享
  8. 基本数据类型的值传递 和引用数据类型的引用传递 Day06
  9. Bailian2945 导弹拦截【最长上升子序列+DP】
  10. beeline hiveserver2 start
  11. 抖音短视频在线下载无水印,
  12. 用python做小黑屋的游戏
  13. R语言笔记-分类变量列联表和独立性检验
  14. pythonweb项目微服务_python web微服务器端
  15. c语言解一元二次方程虚根oj,请问怎么用C语言求一元二次方程的虚根
  16. Tomcat 运行 maven项目报错 com.sun.faces.config.ConfigureListener
  17. MPC+HSM造就了安全的数字托管人
  18. 卷积神经网络中全连接层、softmax与softmax loss理解
  19. filezilla关闭更新检测
  20. Symbian知识汇集

热门文章

  1. DB、DBS和DBMS关系
  2. HTTP/1.1、HTTP/2
  3. Linux 误删文件恢复命令及方法!
  4. linux 基金会 认证,Linux基金会宣布新的Linux认证计划
  5. long long10进制转16进制代码
  6. 字体界的黑科技!输入数字立刻生成酷炫信息图的字体
  7. REW声学测试(四):REW的测试原理
  8. 汇编语言答案(王爽)第三版
  9. 组合最优化——线性规划基本定理
  10. 数据库中索引的填充因子