模拟退火算法——仿真篇
理论部分不再赘述,详情请查看我以往文章。
(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 仿真结果
模拟退火算法——仿真篇相关推荐
- 模拟退火算法——理论篇
模拟退火算法(Simulated Annealing,SA)是模拟物理退火求解组合问题的算法,核心是要理解Metropolis 采样算法,具有算法简单.适用范围广.可靠性高等特点. 图片来自网络 1 ...
- C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑
C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑 写在前面 图像处理算法-仿真篇 DSP硬件移植篇-挖坑篇 DSP硬件移植篇-坑的种类 写在前面 时间如白马过隙,今天登录CSDN ...
- 模拟退火算法从原理到实战【基础篇】
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...
- java模拟退火算法求函数_模拟退火算法从原理到实战【基础篇】
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...
- 美赛 8:模拟退火算法、遗传算法、粒子群算法(智能算法篇)
目录 一.模拟退火算法(Simulated annealing algorithm,SA) 1.SA的基本理论 2.SA求解函数最值 3.SA工具箱 二.遗传算法(Genetic Algorithm, ...
- 算法学习之模拟退火算法路径规划(python代码实现)
模拟退火算法路径规划(python代码实现) 一.引言 二.算法介绍以及伪代码 1.算法通俗介绍 2.路径规划算法伪代码 三.算法流程及代码实现 1.地图创建 2.初始化路径 小结 3.计算适应度值 ...
- 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】
简述 代码我是基于我之前写的两篇,一篇是遗传算法TSP的Python实现,一篇是模拟退火算法的解决TSP的C++实现. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题 遗传算法解 ...
- music算法_“要热爱 请深爱”系列(5)浅谈模拟退火算法
黄乐天 浅谈模拟退火算法 背景 在实际生活中, 数学问题中,我们常常会遇到(一定范围内)函数求最值的问题.一般可以用数学方式解答,但如果遇到如下恶心的函数: 它的函数图像是这样的: 我们只好用计算机科 ...
- 模拟退火算法(代码可直接运行)
模拟退火算法(SA) 模拟退火是很经典的算法,针对大多数模型.应用,受限于SA运行时间长等特点,已不能直接应用SA,这样的算法值得去改进,我试图找一些缩短运行时间的方法,已经在测试,这里是模拟退火第一 ...
最新文章
- mysql5.7安装教程图文详解
- c++可视化开发_页面可视化配置搭建工具技术要点
- Android --- BaseQuickAdapter 子控件设置了addOnClickListener(R.id.xxx);点击的时候还是没反应
- Linux下查看文件和文件夹大小的df和du命令
- 腾讯面试Android必问11题,我说的,不信就来看看
- 系统总线频率和外频有何区别?
- samba-设定文件共享
- 基本数据类型的值传递 和引用数据类型的引用传递 Day06
- Bailian2945 导弹拦截【最长上升子序列+DP】
- beeline hiveserver2 start
- 抖音短视频在线下载无水印,
- 用python做小黑屋的游戏
- R语言笔记-分类变量列联表和独立性检验
- pythonweb项目微服务_python web微服务器端
- c语言解一元二次方程虚根oj,请问怎么用C语言求一元二次方程的虚根
- Tomcat 运行 maven项目报错 com.sun.faces.config.ConfigureListener
- MPC+HSM造就了安全的数字托管人
- 卷积神经网络中全连接层、softmax与softmax loss理解
- filezilla关闭更新检测
- Symbian知识汇集