模拟退火算法

                                       模拟退火算法

模拟退火算法,相信很多人一开始看到这个名字,如果不加算法两个字,都不会联想到这是一种求解最优值的一种算法。那到底什么是模拟退火算法呢,首先,我们需要知道他为什么叫模拟退火,退火两个字,来源于冶金学,是指“ 将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。"--百度百科。 那模拟两个字是什么意思呢,意思就是我应用退火的思想,去求解目标函数的最小值,通常知道迭代次数够多,参数设置合理,都可以找到全局最优点。

那为什么要用模拟退火算法呢? 我们知道,对于一组离散值,我们可以用穷举法,找到最小值, 对于一个凸函数,我们可以通过梯度下降法或者牛顿法迭代找到最小值,但是对于一个有着几个局部最下值的函数,无论是贪心算法或者梯度下降,都容易陷入局部最小值。而模拟退火算法,在找到最小值的时候,还会以一定概率,去接受更差值,这样就有机会跳出局部最优,从而找到全局最优,当然,这个概率随着时间会慢慢减小。其实这个思想就是Metropolis接受准则(1953)

                                                   

什么意思呢,df 就是y1-y0, 也就是新的函数值比当前的函数值小,那我们就以概率1(也就是一定)接受新的函数值,如果df大于0,我们就以第二个式子的值这个概率接受更差值。可以发现,由于指数函数特性,当我们的df很大或者T0很小时,接受更差值的概率趋近于0。

我们来看看算法流程,考虑一个函数最小化 f(x)的问题。

1. 首先给定一个初始温度 T0, 以及一个初始解 X0,计算 得到 y0 

2. 以一定系数(0.99,0.98)减小T0

3. 扰动X0,也就是随机让X0产生一定的变化,变成X1,计算y1 , 比较y1 和y0 的大小

4. y1小于y0, 即说明新的解比上次的解要更优,我们接受他,否则,则以一定的概率接受y1这个更差的解。这个概率大小为上式中那个指数函数算出来的值。

5. 在每一个T下重复2,3若干次.

6. 判断T是否达到预设下界或者循环次数是否完成,若是,退出。否,回到步骤2.

我们可以发现,一开始T0是比较大的,则exp(-df/T) 的值也会比较大,也就是说如果一开始落入了局部最优,我们有很大的概率往出跳,随机T的减小,接受更差解的概率变小,最终落到全局最优。



            

  

    

猜你喜欢

转载自blog.csdn.net/weixin_37749881/article/details/79946254