模拟退火算法简介

原理:起源于固体的物理退火过程。固体中的原子会停留在是内能有局部最小值的位置,当温度升高,原子会离开当前的位置;温度下降,原子会随机在其他位置移动,有可能寻找到比当前局部最小值更小的局部最小值。

重点:概率性的跳出局部最小从而趋向全局最小值,所以"概率如何计算?"十分重要。

概率如何计算:P(dE)=exp(dE/(kT))   (范围为0至1的开区间,因为dE是负值);

公式表示:在温度T时,出现能量差为dE的降温的概率为P(dE)。公式来源于Metropolis准则,kBoltzmann常数。

那么我们如何应用模拟退火算法,在此举一个例子:最小化问题F(x)

共有100W输入,也就有100W个解,我们需要一个最小的解。

设置参数初始温度T0=1000,每次降温为1,新温度为T;每个温度T的链长为L,设置为100。(温度链长即为迭代次数)

首先,求得两个解F(i)和F(j)。F(i)定为旧解,F(j)为新解;

初始温度T为1000,1000温度时链长为100,在100链长内,开始算法;

如果F(j)小于F(i),不需要进行退火概率的计算,直接接受新解,即F(j)定为旧解,F(i)删除;

接受解即新解替换掉旧解的位置,那么我们要根据新解再求一个新解替换掉,继续进行比较。

如果F(j)大于F(i),进行模拟退火概率的计算,P(dE)=exp(dE/(kT))。此时的dE(负值)代表的是两个解(新解和旧解)的差值,T是当前温度。我们算出来概率P(dE)后,随机一个0至1的数字,如果P(dE)大于它,我们接受这个解,若个小于它,我们不接受这个解;

新解的求解思路一般是随机更改一些解的参数。

结论和想法:

1.e的-n/m次幂,该函数是关于m的增函数,n的减函数。所以当前温度T越高,概率越大,温度T越低,概率越小;当前解与旧解差值越大(当前解越差),概率越小,差值越小,概率越大;

2.所以说稍微好点的解(与旧解不能差太多)才大概率被接受,降温次数多了,温度下降到一定程度,再接受稍微好点的解的概率也很小了;

3.算法存在着缺点。假如最后一次降温,新解为b,比旧解a差一点点,但根据退火概率接受了,正好退火算法结束,输出最终解b。就丢掉了一个曾找到过的比最终输出的解更好的解。

 

 

你可能感兴趣的:(算法)