模拟退火算法及MATLAB代码

  • 什么是单目标全局优化问题
  • 模拟退火算法MATLAB源码
  • 模拟退火算法的基本原理
    • 算法流程图
  • 模拟退火算法的要素
  • 模拟退火算法提出者及国内主要研究者及个人主页
  • 基于模拟火算法的一些变形算法
  • 测试问题集
  • 可改进方向

什么是单目标全局优化问题

单目标优化问题指的是所评测目标只有一个,只需要根据具体的满足函数条件,求得最值的问题。
多目标优化问题的各个子目标之间是矛盾的 ,一个子目标的改善有可能会引起另一个或者另几个子目标的性能降低 , 也就是要同时使多个子目标一起达到最优值是不可能的 , 而只能在它们中间进行协调和折中处理 , 使各个子目标都尽可能地达到最优化。其与单目标优化问题的本质区别在于 ,它的解并非唯一 ,而是存在一组由众多 Pareto最优解组成的最优解集合 ,集合中的各个元素称为 Pareto最优解或非劣最优解。
全局优化研究的是多变量非线性函数在某个约束区域上的全局最优解的特性和构造寻求全局最优解的计算方法,以及求解方法的理论性质和计算表现。由于很可能在一个全局优化问题里存在多个局部最优解,且它们不同于问题的全局最优解,因此人们无法借助于经典的局部优化方法求解这些问题,特别是至今还没有很好的全局性判定准则,使得全局优化的研究极具挑战性。然而,自从20世纪70年代中后期以来,全局优化以惊人的速度在许多方面取得了长足的进展,许多新的全局优化理论及算法也相继出现,并得到了广泛应用。目前全局优化已作为最优化领域中一个独立的学科分支,引起了国内外学者的广泛重视并掀起了该领域的研究热潮,成为一个强有力的工具,被人们应用于对实际问题进行的建模和分析中。

模拟退火算法MATLAB源码

clear
clc
%生成初始解
sol_new2=1;     %(1)解空间(初始解)
sol_new1=2-sol_new2^2;
sol_current1 = sol_new1;
sol_best1 = sol_new1;
sol_current2 = sol_new2;
sol_best2 = sol_new2;
E_current = inf;
E_best = inf;
rand('state',sum(clock)); %初始化随机数发生器
t=90; %初始温度
tf=89.9; %结束温度
a = 0.99; %温度下降比例while t>=tf%(7)结束条件   for r=1:1000 %退火次数              %产生随机扰动(3)新解的产生       sol_new2=sol_new2+rand*0.2;      sol_new1=2-sol_new2^2;       %检查是否满足约束
if sol_new1^2-sol_new2>=0 && -sol_new1-sol_new2^2+2==0 && sol_new1>=0 &&sol_new2>=0       else           sol_new2=rand*2;
sol_new1=2-sol_new2^2;
continue;       end               %退火过程
E_new=sol_new1^2+sol_new2^2+8;%(2)目标函数       if E_new<E_current%(5)接受准则
E_current=E_new;
sol_current1=sol_new1;               sol_current2=sol_new2;               if E_new<E_best                   %把冷却过程中最好的解保存下来 E_best=E_new;                   sol_best1=sol_new1;
sol_best2=sol_new2;               end
else
if rand<exp(-(E_new-E_current)/t)%(4)代价函数差
E_current=E_new;
sol_current1=sol_new1;
sol_current2=sol_new2;               else                   sol_new1=sol_current1;                   sol_new2=sol_current2;               end       end
plot(r,E_best,'*')       hold on
end
t=t*a;%(6)降温
end
disp('最优解为:')
disp(sol_best1)
disp(sol_best2)
disp('目标表达式的最小值等于:')
disp(E_best)

模拟退火算法的基本原理

模拟退火算法是一种随机搜索算法(启发式算法),随机搜索方法也称作概率搜索算法,这很好理解,是一种能够在优化问题的可行集中随机采样,逐步完成搜索的算法。模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e(-ΔE/(kT)),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S

算法流程图


1)初始化:初始温度T(充分大),初始解状态S(足算法选代的起点),个T值的迭代次数L
2)对k-1.,… L做第(3)至第6步
3)产生新解S’
4)计算增量At=C(S)-C(S),其中C(S)为评价函数
5)若△t’<0则接受S作为新的当前解,否则以概率exp(-△t/T)接受S作为新的当前解。
6)如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续着干个新解都没有被接受时终止算法。
7)T逐渐减少,且T->0,然后转第2步

模拟退火算法的要素

①状态空间: 即解空间,也称为搜索空间,是经过编码的可能解组成的集合。
②状态产生函数: 应尽可能保证产生的候选解遍布整个状态空间,可采用附加扰动、随机产生、移位、平滑、边界取值等多种算子作为模拟退火的状态产生函数。状态产生函数通常产生的候选解的方式和候选解产生的概率分布两部分组成。
③初始温度: 实验表明,初始温度越高,得到高质量解的概率越大,但算法计算的时间越长。兼顾算法求解的质量和执行效率,选择初温的方法常有:随机产生一组状态,确定最大值和最小值间的差值d,利用函数得到初温,如 T0= dp,其中 p 为初始接受概率; 或均匀抽样一组状态,以各状态的目标值的方差为初温。
④冷却进度表: 是指从某一高温状态向低温状态冷却时的降温管理表,也即温度衰减函数,也可称为退火策略。最简单的控制参数衰减函数为:Tk= aTk - 1= akT0( k = 1,2,…)
( 1)其中,a 是常取值 0. 5 ~0. 9,这种退火策略是很常用。经典的模拟退火衰减函数为:Tk=T0lg( 1 + k)( k = 1,2,…)
( 2)其中,Tk为第 k 步时的温度值,T0为初始温度。也可以选择其它的衰减函数如 Tk=T0ln k,Tk=T0k等等。衰减函数应选择小的比较合适,可避免过长的马尔可夫链和迭代次数增加。
⑤Metropolis 准则: Metropolis 准则是 Metropolis等人在 1953 年提出的重要性采样法,其基本思想是采样是着重选择那些具有重要贡献的状态,则可以较快地达到较好的结果。该准则是 SA 算法收敛于全局最优解的关键。粒子初始状态 i 为当前状态,Ei 是该状态的能量,即目标函数在状态 i 的值,某个粒子位移随机产生一微小变化,得一新状态 j,其能量为 Ej。如果 Ej< Ei,则 j 状态是重要状态,如果 Ej> Ei,则要根据概率 p 来判定,p 计算公式如下:p = exp(Ei- EjκT) 式中,T 为温度,κ 为玻耳兹曼常数,exp 表示自然指数。温度越小,则降温概率 p 就越小,温度越高,与出现一次能量差为 dE 的降温概率 p 就越大。p 越大则 j 状态是重要状态的概率就越大。若 j 是重要状态,则取代 i 成为当前状态,否则舍弃新状态。再重复以上新状态产生过程。这种接受新状态转移的准则即为 Metropolis 准则。
⑥内循环终止的准则: 也称为 Metropolis 抽样稳定准则,用于决定各温度下产生候选解的个数,该准则包括有: 目标函数的平均值是否稳定; 连续若干步目标函数值变化较; 按一定的步数抽样。
⑦外循环终止的准则: 即决定算法何时结束,主要包括: 循环迭代的次数设置; 终止温度的阈值设置; 检验系统熵值是否稳定; 检验算法收敛到最优值连续若干步保持不变。其中终止温度的设置常用的是 Kirkpatrick 等提出准则: 在若干个马尔可夫链中解无任何变化( 恶化或优化) 就终止算法。迭代次数 Lk的选取了冷却进度表密切相关,一般 Tk小衰减,则 Lk值就适当大。

模拟退火算法提出者及国内主要研究者及个人主页

模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis 等人于1953年提出,1983年S.Kirkpatrick成功将退火算法引入组合优化领域。杨若黎和顾基发提出了一种高效的模拟退火全局算法。陈华根快速模拟退火算法。钟勇加入了记忆功能

戴金海 国防科技大学航天与材料工程学院
http://xueshu.baidu.com/scholarID/CN-B075PQ2J?site=author_jump
阳春华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BV74HC0J?site=author_jump
郑大钟 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-BZ733OWJ?site=author_jump
王士同 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-B275DHMJ?site=author_jump
李振坤 广东工业大学计算机学院
http://xueshu.baidu.com/scholarID/CN-BZ74VI1J?site=author_jump
桂卫华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BL73QACJ?site=author_jump
郭英 空军工程大学电讯工程学院
http://xueshu.baidu.com/scholarID/CN-BM75IITJ?site=author_jump
潘全科 聊城大学计算机学院
http://xueshu.baidu.com/scholarID/CN-BY739AXJ?site=author_jump
张跃 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-B375KYNJ?site=author_jump
吴小俊 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-BK75SDDJ?site=author_jump
吴敏 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BW74CLAJ?site=author_jump
彭宏 华南理工大学计算机科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BX74YT5J?site=author_jump
孙雨耕 天津大学电气与自动化工程学院
http://xueshu.baidu.com/scholarID/CN-B173YCNJ?site=author_jump
郑启伦 华南理工大学计算机科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BA75GWLJ?site=author_jump
唐泽圣 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BV75DYVJ?site=author_jump
查建中 北京交通大学机械与电子控制工程学院
http://xueshu.baidu.com/scholarID/CN-BV75TKNJ?site=author_jump
杨善林 合肥工业大学管理学院
http://xueshu.baidu.com/scholarID/CN-BO75AS9J?site=author_jump
陈松乔 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BW746BXJ?site=author_jump
桂卫华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BL73QACJ?site=author_jump
郑纬民 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BI74PNLJ?site=author_jump
孙家广 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BJ7346CJ?site=author_jump
吴澄 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-BY74OPIJ?site=author_jump
须文波 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-BL75KSNJ?site=author_jump
金以慧 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-B973R97J?site=author_jump
杨炳儒 北京科技大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-B174EZEJ?site=author_jump
(此数据为19年在知网查找到的数据,必然有大量疏漏,请见谅。)

基于模拟火算法的一些变形算法

陈华根,李丽华等提出基于 Ingber 提出的非常快速的模拟退火算法(VFSA)
李红军提出模拟退火与遗传算法相结合
刘敏等提出自适应的模拟遗传算法
余建军,孙树栋提出将模拟退火与免疫算法混合
杨静宇等提出基于模拟退火的粒子群优化算法。

测试问题集

旅行商问题
三维装箱问题
最大流问题
背包问题
np问题
马尔可夫随机场
图着色问题
CEC测试集

可改进方向

设计出合适的状态产生函数,使其根据搜索进程的需要表现出状态的空间分散性或局部区域性
设计高效的退火策略
避免状态的迂回搜索
采用并行搜索结构
为避免陷入局部极小,改进对温度控制的方法
选择合适的初始状态
设计合适的算法终止准则
增加升温或重升温,算法进程的适当时机将温度提高,避免陷入局部最优解
增加记忆功能,避免迂回搜索
补充搜索功能,以最小解再次执行退火
对每一当前状态,采用多次搜索策略,以概率接受区域内最优状态
结合其他搜索机制算法,如遗传,混沌
并行策略(操作并行策略,试演并行策略,区域分裂策略和混乱松弛策略)

模拟退火算法及MATLAB代码相关推荐

  1. PSO-LSSVM算法及其MATLAB代码

    挺完整的一篇博客,这里转载记录一下. 原文链接:PSO-LSSVM算法及其MATLAB代码 一.PSO 1.概念 粒子群优化算法(PSO:Particle swarm optimization)是一种 ...

  2. 哈里斯鹰优化(HHO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  3. 直流电机,传递函数,模糊控制pid算法,matlab代码

    直流电机,传递函数,模糊控制pid算法,matlab代码 ID:1466674483342194夹竹丶桃

  4. 最短路径 Dijkstra算法的Matlab代码实现

    为了搞清楚最短路径的算法过程,自己编写代码实现dijkstra算法寻找路径 % 文件名:dijkstra.m % 时间:2020年9月12日 % 来源:https://blog.csdn.net/li ...

  5. 下料问题的列生成算法,matlab代码,简单易懂

    下料问题的列生成算法,matlab代码,简单易懂 ID:18300606016240721绿兔叽

  6. ncut算法matlab实现,ncut_multiscale_1_6 经典的图像分割算法 的Matlab代码。 238万源代码下载- www.pudn.com...

    文件名称: ncut_multiscale_1_6下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 587 KB 上传时间: 2015-04-17 下载次数: ...

  7. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)

    二.photoshop图像滤镜--素描算法 素描的算法,网络上有多种,但是效果并不是特别理想.熟悉photoshop的朋友都知道,把彩色图片打造成素描的效果仅仅需要几步操作:1.去色:2.复制去色图层 ...

  8. matlab 浮雕算法,photoshop图像滤镜——浮雕算法(含matlab代码)

    一.photoshop图像滤镜--浮雕算法 浮雕的算法是对图像的每一个点进行卷积处理,采用的矩阵如下 [100:00 0:00-1]: 假设原图像为X,处理后的图像为Y ,也就是说,对于坐标为(i,j ...

  9. 白鲸优化(BWO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 原文在这里:点一下 白鲸优化(BWO)算法: 白鲸优化(Belug ...

  10. 【WSN通信】基于最佳簇半径的无线传感器网络分簇路由算法附matlab代码

    1 内容介绍 无线传感器网络(WirelessSensorNetwork,WSN)是由若干个分布在被监控范围内的传感器节点构成的网络,这些节点以随机或者确定位置分布的形式布置在被监测范围内,可以收集温 ...

最新文章

  1. svn官方备份hot-backup.py强烈推荐
  2. homework-04
  3. Pig自定义过滤UDF和加载UDF
  4. 【数据结构与算法】双链表V2.0的Java实现
  5. spring核心包功能解析
  6. Kostya the Sculptor
  7. 即刻起,加速您的前端构建
  8. MQ发送的消息都到了死信队列中了
  9. 5个好用的搜索小技巧:搜索引擎的办法
  10. JDK17下载和配置及官网地址教程(新版JDK12之后,较简单)
  11. 加密php大马,webshell加密-加密你的大马
  12. 搭建一个QQ机器人叫女友起床
  13. ios app真机测试到上架App Store详细教程-必看
  14. qt程序在win10正常运行win7电脑上崩溃
  15. 经济学人精读笔记10:员工休假居然对企业有好处?
  16. Day51:HEIL AI
  17. python怎么画圆螺旋线_Python turtle 绘制彩色螺旋线
  18. Tracup体验报告
  19. 通过php内核变量绕过,利用PHP内核变量绕过disable_functions(附完整代码)
  20. Python官网主页改版 http://www.python.org/

热门文章

  1. spss之数据预处理
  2. 单片机c语言取反符号怎么打,arduino取反怎么写
  3. 网络爬虫---微信爬虫
  4. vsCode编写Latex文本( texlive +vsCode )
  5. 阿里副总裁、达摩院自动驾驶负责人王刚离职!
  6. 【电机测速】一文搞懂M法、T法测速原理
  7. app安全渗透测试详细方法流程
  8. 怎么修改游戏ip地址
  9. adc0808模数转换实验报告_ADC0808模数转换显示 单片机程序
  10. leach算法的实现过程_LEACH算法源代码