应用篇-第12章-模拟退火算法的仿真与实现.pptx
- 文档编号:1772350
- 上传时间:2022-10-24
- 格式:PPTX
- 页数:32
- 大小:252.12KB
应用篇-第12章-模拟退火算法的仿真与实现.pptx
《应用篇-第12章-模拟退火算法的仿真与实现.pptx》由会员分享,可在线阅读,更多相关《应用篇-第12章-模拟退火算法的仿真与实现.pptx(32页珍藏版)》请在冰豆网上搜索。
模拟退火算法(SimulatedAnnealingalgorithm,简称SA)是柯克啪垂克于1982年受热力学中的固体退火过程与组合优化问题求解之间的某种“相似性”所启发而提出的,用于求解大规模组合优化问题的一种具有全局搜索功能的随机性近似算法。
与求解线性规划的单纯形法、Karmarkar投影尺度法,求解非线性规划的最速下降法、Newton法、共轭梯度法,求解整数规划的分支定界法、割平面法等经典的优化算法相比,模拟退火算法在很大程度上不受制于优化问题的具体形式和结构,具有很强的适应性和鲁棒性,因而也具有广泛的应用价值。
本章我们将学习模拟退火算法的matlab实现;运用模拟退火算法解决相关实际问题第第12章章模拟退火算法模拟退火算法的仿真与实现与实现的仿真与实现与实现12.1.1物理退火过程物理退火过程固体退火是先将固体加热至熔化,再徐徐冷却使之凝固成规整晶体的热力学过程。
退火过程是系统在每一温度下达到平衡的过程可以用封闭系统的等温过程来描述。
由Boltzmann有序性原理,退火过程遵循热平衡封闭系统的热力学定律自由能减少定律:
对于与周围环境交换能量而温度保持不变的封闭系统,系统状态的自发变化总是朝着自由能减少的方向进行当自由能达到最小值时,系统达到平衡态。
设E为系统的微观状态的能量,则系统处在状态i的概率为:
其中A是无关的常数。
(2)式Gibbs正则分布.。
该分布给出温度T时固体处于能量的微观态i的概率。
显然,固体处于能量较低的微观态概率大,在温度降低时,那些能量相对较低的微观态最有可能出现。
当温度趋于零时,固体基本上只能处于能量为最小值的基态。
12.1.2Metropolis准则准则固体在恒定温度下达到平衡的过程可以用MonteCarl方法加以模拟,该方法虽然简单,但必须大量采样才能得到比较精确的结果,因而计算量很大。
1953年,Metropolis等提出了重要性采样法,即以概率接受新状态。
具体而言:
在温度为T,由当前状态i产生新状态j,两者的能量分别为和,若0,然后转第2步。
#includestdafx.h/*MINf(x,y)=5sin(xy)+x2+y2*/#include#include#include#include#include/*ObjectiveFunction*/doubleobjectfunction(doublex,doubley)doublez=0.0;z=5.0*sin(x*y)+x*x+y*y;returnz;/*RandomNumberfrom0to1*/doublernd()doubler;r=(double)rand()/RAND_MAX;returnr;intmain()inti;intmarkovlength=10000;/马可夫链doubledecayscale=0.95;/衰减参数doublestepfactor=0.02;/Metropolis的步长doubletemperature=100;/初始温度doubletolerance=1e-8;/容差doubleprex,nextx;doubleprey,nexty;doubleprebestx,prebesty;doublebestx,besty;doubleacceptpoints=0.0;/Metropolis过程中总接受点doublexmax,ymax;time_tt;srand(unsigned)time(&t);printf(TheMaxNumberXis:
n);scanf(%lf,&xmax);printf(TheMaxNumberYis:
n);scanf(%lf,&ymax);printf(xmax=%f,ymax=%fn,xmax,ymax);prex=-xmax*rnd();prey=-ymax*rnd();prebestx=bestx=prex;prebesty=besty=prey;dotemperature*=decayscale;acceptpoints=0.0;for(i=0;i=-xmax&nextx=-ymax&nextyobjectfunction(nextx,nexty)/是否全局最优解/保留上一个最优解prebestx=bestx;prebesty=besty;/此为新的最优解bestx=nextx;besty=nexty;/Metropolis过程if(objectfunction(prex,prey)objectfunction(nextx,nexty)/接受,此处lastPoint即下一个迭代的点以新接受的点开始prex=nextx;prey=nexty;acceptpoints+;elsedoublechange=(objectfunction(prex,prey)-objectfunction(nextx,nexty)/temperature;if(exp(change)rnd()prex=nextx;prey=nexty;acceptpoints+;/不接受,保存原解while(fabs(objectfunction(bestx,besty)-objectfunction(prebestx,prebesty)tolerance);printf(abs=%gn,fabs(objectfunction(bestx,besty)-objectfunction(prebestx,prebesty);printf(%f,%f,%f,%fn,prex,prey,objectfunction(prex,prey),temperature);printf(TheMinpointsis:
%lf,%lfn,bestx,besty);printf(TheMindatais:
%lfn,objectfunction(bestx,besty);getchar();getchar();12.2.2模拟退火的算法描述模拟退火的算法描述模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。
模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。
以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。
也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。
图1:
关于爬山算法与模拟退火,有一个有趣的比喻:
爬山算法:
兔子朝着比现在高的地方跳去。
它找到了不远处的最高山峰。
但是这座山不一定是珠穆朗玛峰。
这就是爬山算法,它不能保证局部最优值就是全局最优值。
模拟退火:
兔子喝醉了。
它随机地跳了很长时间。
这期间,它可能走向高处,也可能踏入平地。
但是,它渐渐清醒了并朝最高方向跳去。
这就是模拟退火。
在模拟退火算法中应注意以下问题:
(1)理论上,降温过程要足够缓慢,要使得在每一温度下达到热平衡。
但在计算机实现中,如果降温速度过缓,所得到的解的性能会较为令人满意,但是算法会太慢,相对于简单的搜索算法不具有明显优势。
如果降温速度过快,很可能最终得不到全局最优解。
因此使用时要综合考虑解的性能和算法速度,在两者之间采取一种折衷。
(2)要确定在每一温度下状态转换的结束准则。
实际操作可以考虑当连续m次的转换过程没有使状态发生变化时结束该温度下的状态转换。
最终温度的确定可以提前定为一个较小的值eT,或连续几个温度下转换过程没有使状态发生变化算法就结束。
(3)选择初始温度和确定某个可行解的邻域的方法也要恰当。
模拟退火算法的参数控制问题:
模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:
(1)温度T的初始值设置问题。
温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。
实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。
(2)退火速度问题:
模拟退火算法的全局搜索性能也与退火速度密切相关。
一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。
实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。
(3)温度管理问题:
温度管理问题也是模拟退火算法难以处理的问题之一。
实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:
式中k为正的略小于1.00的常数,t为降温的次数。
main.mzuobiao=0.370.750.450.760.710.070.420.590.320.60.30.670.620.670.20.0.350.270.940.820.370.610.420.60.390.530.40.630.50.980.68;0.910.870.850.750.720.740.710.690.640.640.590.590.550.550.5.0.450.430.420.380.270.260.250.230.190.190.130.080.040.020.85plot(zuobiao(1,),zuobiao(2,),g),holdonplot(zuobiao(1,),zuobiao(2,)length=max(size(zuobiao);%求初始距离.zhixu=randperm(length)%随机生成一个路线经过点的顺序temp=zuobiao(1,);newzuobiao(1,)=temp(zhixu);temp=zuobiao(2,);newzuobiao(2,)=temp(zhixu);newzuobiaof=juli(newzuobiao)%参数定义区-%初始温度为10000tmax=100;tmin=0.001;down=0.95;%退火算法的函数.figuret=tmax;whilettminforn=1500newzuobiao=newpath(zuobiao,length);newf=juli(newzuobiao);ifnewffzuobiao=newzuobiao;f=newf;endendhuatu=zuobiao,zuobiao(,1);plot(huatu(1,),huatu(2,),holdonplot(huatu(1,),huatu(2,),ro),holdoffpause(0.00001)t=tdownendnewpath.mfunctionzuobiao=newpath(zuobiao,length)%随机交换两个点的坐标.a=ceil(rand(1,2)length);qian=a
(1);hou=a
(2);temp=zuobiao(,qian);zuobiao(,qian)=zuobiao(,hou);zuobiao(,hou)=temp;juli.mfunctionlucheng=juli(zuobiao)length=max(size(zuobiao);s=0;fori=2lengths=s+sqrt(sum(zuobiao(,i)-zuobiao(,i-1).2);endiflength=2s=s+sqrt(sum(zuobiao(,1)-zuobiao(,length).2);endlucheng=s;12.2.3模拟退火算法的伪代码实现模拟退火算法的伪代码实现while(TT_min)dE=J(Y(i+1)-J(Y(i);if(dE=0)/表达移动后得到更优解,则总是接受移动Y(i+1)=Y(i);/接受从Y(i)到Y(i+1)的移动else/函数exp(dE/T)的取值范围是(0,1),dE/T越大,则exp(dE/T)也if(exp(dE/T)random(0,1)Y(i+1)=Y(i);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 12 模拟 退火 算法 仿真 实现