算法简介
模拟退火算法源于金属退火的原理。当固体温度很高时,内能较大,内部粒子进行快速的无序运动,当温度逐渐降低时,粒子运动速度逐渐下降,逐渐趋于有序,也基本趋于稳定。
在搜索全局最优解时,我们也可以先设置一个高温,然后逐渐降低温度,直到温度趋近于0。在冷却过程中,对于每个温度,都去迭代多次,来寻找局部最优解:
- 在当前位置进行一次扰动,模拟粒子从位置 x x x跳到位置 x ′ x' x′
- 对于新的函数值,若更优,则跳到新的位置
- 若新的位置更劣,则有概率跳到新的位置
温度趋近于0时,算法结束,即可得出最终的答案。
算法原理
为什么要有概率跳出而不是不跳出呢?因为如果现在找到了一个局部最优解,虽然它不是全局最优解,但如果在一定范围内没有比它更优的解,那最后的结果就是这个局部最优解了。如果有一定的概率能跳出,则就有可能找到另一个局部最优解。最后取所有局部最优解的最优解,得出的结果有更大概率是全局最优解。
模拟退火算法是一个近似算法,它并不能保证找到的结果是全局最优解。
其中跳出的概率 P P P满足以下公式(假设函数值最小为最优):
P = { 1 f ( x ′ ) ≤ f ( x ) e f ( x ) − f ( x ′ ) k T f ( x ′ ) > f ( x ) P=\left\{\begin{matrix}\qquad 1 \qquad f(x')\leq f(x)\\ \\ e^{\frac{f(x)-f(x')}{kT}} \ f(x')>f(x)\end{matrix}\right. P=⎩