模拟退火算法 Simulated Annealing

模拟退火算法 Simulated Annealing,第1张

模拟退火算法的思想受启发于自然界中固体由高温到低温的过程中其内部分子状态及内部能量的变化规律。

退火 指物体 逐渐降温冷却 的物理现象。温度越低,物体的能量越低,在结晶状态是系统的能量状态到达最低。在自然中,缓慢降温(退火)可以导致结晶,而与之相对的快速降温(淬火)会导致不是最低能态的非晶体形态。

退火的过程可以表示为下图,左边为最初的非晶态状态;经过升温,系统能量增大后到达中间的状态;再缓慢降温到达晶体态,此时能量最小

我们用一个搜索函数最优解来直观表示:C为函数的全局最优解,在只采用贪心策略的情况下,如果从A点开始搜索,最终得到的解为B点,然而这只是一个局部的较好解。

为了避免陷入局部的最优解,模拟退火算法在搜索过程中加入了一个随机因素,会以一定的概率接收一个比当前解较差的解,因此就有可能越过B与C之间的高峰,到达全局最优解

在这里,可以将解(横坐标的值)理解为固体的状态,函数值理解为系统的内能。算法以固体所处的温度T为控制参数,随着T的下降使固体内能(目标函数值)也逐渐下降,直至趋于全局最小。

根据Metropolis准则,在温度为T时, 接受 能量从 的概率为P:

在特定温度下,经过充分转换,材料达到热平衡。这时材料处于状态 的概率为

其中 表示材料当前的状态, 表示材料的状态集合, 为玻尔兹曼常数。根据上式可以得到以下结论

因此,如果我们运用退火思想放在优化问题上,在降温过程中问题的解进行充分地“热交换”,即进行充分地重新排列,同样可以帮助我们寻找最优解,理论上也会具有达到全局最优解的性能!

可以看出,算法实际上是两层循环嵌套,外层循环控制温度,内层循环来进行扰动产生新解。

随着温度逐渐降低,算法最终由可能收敛到全局最优,这里说有可能的原因是因为,在温度很低时,虽然从地内能状态跳到高内能状态的可能性不大,但是也有可能发生。

在已知的某个定义域内求函数最优值的问题通常有以下三种情况,以求最小值问题为例(求最大值可以转换为求最小值)

模拟退火算法就是为了应对第三种情况而提出的

参考资料:

>

至于TSP问题,本身属于NP-hard问题,找不到存在多项式时间复杂度的解。

如果要求精确的解,目前可行的方法有枚举、分支限界、动态规划等,但这些方法适用的数据范围都很小,一旦数据规模变大,它们都将无能为力。

所以目前广泛使用的大都是一些随机算法,比如蚁群、遗传等,模拟退火就是其中的一种,这些算法的一大特点就是通过随机去逼近最优解,但也有可能得到错解。

只有穷举法可以保证得到最优解,但是穷举法在数据量比较大的时候运行时间通常是不能接受的,所以用了各种近似方法。

模拟退火算法新解的产生和接受可分为如下四个步骤:

第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。

第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。

第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则: 若ΔT<0则接受S′作为新的当前解S,否则以概率exp(-ΔT/T)接受S′作为新的当前解S。

第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。

遗传算法:其优点是能很好地处理约束,跳出局部最优,最终得到全局最优解。缺点是收敛速度慢,局部搜索能力弱,运行时间长,容易受到参数的影响。

模拟退火:具有局部搜索能力强、运行时间短的优点。缺点是全局搜索能力差,容易受到参数的影响。

爬山算法:显然爬山算法简单、效率高,但在处理多约束大规模问题时,往往不能得到较好的解决方案。

数值算法:这个数值算法的含义太宽泛了,指的是哪种数值算法,阵列算法与爬山算法一样,各有优缺点。

扩展资料:

注意事项:

遗传算法的机制比较复杂,在Matlab中已经用工具箱中的命令进行了打包,通过调用可以非常方便的使用遗传算法。

函数GA:[x,Fval,reason]=GA(@fitnessfun,Nvars,options)x为最优解,Fval为最优值,@Fitnessness为目标函数,Nvars为自变量个数,options为其他属性设置。系统的默认值是最小值,所以函数文档中应该加上一个减号。

要设置选项,您需要以下函数:options=GaOptimset('PropertyName1','PropertyValue1','PropertyName2','PropertyName3','PropertyValue3'…)通过该函数,可以确定一些遗传算法的参数。

作为模拟退火算法应用,讨论旅行商问题(Travelling Salesman Problem,简记为TSP):设有n个城市,用数码1,…,n代表。城市i和城市j之间的距离为d(i,j) i,j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短。

求解TSP的模拟退火算法模型可描述如下:

解空间 解空间S是遍访每个城市恰好一次的所有回路,是{1,……,n}的所有循环排列的集合,S中的成员记为(w1,w2,……,wn),并记wn+1= w1。初始解可选为(1,……,n)

目标函数 此时的目标函数即为访问所有城市的路径总长度或称为代价函数:

我们要求此代价函数的最小值。

新解的产生 随机产生1和n之间的两相异数k和m,

若k<m,则将

(w1,w2,…,wk,wk+1,…,wm,…,wn)

变为:

(w1,w2,…,wm,wm-1,…,wk+1,wk,…,wn)

如果是k>m,则将

(w1,w2,…,wm,wm+1,…,wk,…,wn)

变为:

(wm,wm-1,…,w1,wm+1,…,wk-1,wn,wn-1,…,wk)

上述变换方法可简单说成是“逆转中间或者逆转两端”。

也可以采用其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法。

代价函数差 设将(w1,w2,……,wn)变换为(u1,u2,……,un),则代价函数差为:

根据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:

Procedure TSPSA:

begin

init-of-T; { T为初始温度}

S={1,……,n}; {S为初始值}

termination=false;

while termination=false

begin

for i=1 to L do

begin

generate(S′form S); { 从当前回路S产生新回路S′}

Δt:=f(S′))-f(S);{f(S)为路径总长}

IF(Δt<0) OR (EXP(-Δt/T)>Random-of-[0,1])

S=S′;

IF the-halt-condition-is-TRUE THEN

termination=true;

End;

T_lower;

End;

End

模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)、调度问题(Scheduling Problem)等等。 模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:

⑴ 温度T的初始值设置问题。

温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。

⑵ 退火速度问题。

模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。

⑶ 温度管理问题。

温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:

T(t+1)=k×T(t)

式中k为正的略小于100的常数,t为降温的次数 优点:计算过程简单,通用,鲁棒性强,适用于并行处理,可用于求解复杂的非线性优化问题。

缺点:收敛速度慢,执行时间长,算法性能与初始值有关及参数敏感等缺点。

经典模拟退火算法的缺点:

⑴如果降温过程足够缓慢,多得到的解的性能会比较好,但与此相对的是收敛速度太慢;

⑵如果降温过程过快,很可能得不到全局最优解。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9305375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存