模拟退火算法(SA)原理与python实例

模拟退火算法(SA)源自热力学退火过程,通过在解空间中进行随机搜索找到全局最优解。它允许以一定概率接受更差解,有助于避免陷入局部最优。此算法基于Metropolis准则,并详细介绍了其工作流程。

1.概述

模拟退火算法(Simulated Annealing, SA),是一种理论上的全局最优算法。模拟退火算法是源于对热力学中退火过程的模拟,在某一给定初温和初态下,伴随温度参数的不断下降,结合概率突跳特性在解空间中通过邻域函数进行随机搜索,使算法能够给出一个全局最优解 。
SA在迭代更新可行解时,以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的近似最优解。

2.什么是退火——物理上的由来

退火是指将固体加热到足够高的温度,使分子呈随机排列状态,然后逐步降温使之冷却,最后分子以低能状态排列,固体达到某种稳定状态。
如下图所示,首先(左图)物体处于非晶体状态。我们将固体加温至充分高(中图),再让其徐徐冷却,也就退火(右图)。加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小(此时物体以晶体形态呈现)。
在这里插入图片描述
(1)加温过程——增强粒子的热运动,消除系统原先可能存在的非均匀态;

(2)等温过程——对于与环境换热而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡态;

(3)冷却过程——使粒子热运动减弱并渐趋有序,系统能量逐渐下降,从而得到低能的晶体结构。

3.Metropolis准则——以概率接受新状态

先给定以粒子相对位置表征的初始状态old,作为固体的当前状态,该状态的能量是Eold。然后用摄动装置使随机选取的某个粒子的位移随机地产生一个微小变化,得到一个新状态new,新状态的能量是Enew
假设在状态Xold时,系统受到某种扰动而使其状态变为Xnew ,与此相对应,系统的能量也从Eold变成Enew
在这里插入图片描述
(1)若在温度T,当前状态old→ 新状态new

(2)若在这里插入图片描述
则接受 new 为当前状态;

否则,若概率 式(1.1)
式(1.1)
大于[0,1)区间的随机数,则仍接受状态new 为当前状态;若不成立则保留状态 old为当前状态

重复以上新状态的产生过程。在大量迁移(固体状态的变换称为迁移)后,系统趋于能量较低的平衡状态。

由(1.1)式可知,高温下可接受与当前状态能差较大的新状态为重要状态,而在低温下只能接受与当前状态能差较小的新状态为重要状态。这与不同温度下热运动的影响完全一致,在温度趋于零时,就不能接受任何在这里插入图片描述成立时的新状态new了。上述接受新状态的准则称为Metropolis准则,相应的算法被称为Metropolis算法。

4.算法过程描述

(1)初始化:初始温度T(充分大),温度下限Tmin(充分小),初始解状态(2)对l=1,2,…,L做第3至第6步;
(3)产生新解x_new: (x_new=x+Δx);
(4)计算增量Δf=f(x_new)−f(x),其中f(x)为优化目标;
(5)若Δf<0(若寻找最大值,Δf>0)则接受x_new作为新的当前解,否则以概率(6) 如果满足终止条件则输出当前解作为最优解,结束程序。(终止条件通常取为连续若干个新解都没有被接受时终止算法。);
(7) T逐渐减少,且T>Tmin,在实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式: T=α×T.α∈(0,1),为了保证较大的搜索空间, α一般取接近于1的值,如0.95、0.9。
然后,转第2步。
在这里插入图片描述

5.一个小例子

一个小例子的链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值