老饼讲解:一步一步上手学习
好了,这节我们开始讲智能优化算法,由于模拟退火算法在智能优化算法中相对纯粹、简单一些,所以我们以模拟退火算法作为我们的上手算法,当我们把模拟退火彻底,我说的是彻底,弄明白之后,其它智能优化算法就像砍菜一样,一刀一个,毕竟都是换汤不换药的东西。好了,闲话不说,马上开始!
模拟退火算法(Simulated Annealing,SA)是一个借鉴物理退温过程设计的智能优化算法,我们这节先不急,先把模拟退火算法大概是个什么,流程是什么,具体的了解一下,大家也不用太扣细节,有个印象就好了,等后面我们剖析了本质后,再回头来看细节就非常明白了。
模拟退火算法就是借鉴物理退温的过程,那么我们先来简单看一下什么是物理退温,如下:

一个高温物体,在冷觉后的能量并不总是一样的,它与退火(降温)的过程有关。如果让它缓慢退火,最终物体的能量会比急速退火更加低,因为在降温过程中,粒子有充足的时间,来转移到不同位置,在高温时甚至能凭借热能跃迁到能量更高的位置来寻找更好的位置,而如果急速降温,则会使每个粒子被迫迅速收缩到稳定位置,导致最终能量更高。好了,随便了解一下就好了,都是故事背景。
模拟退火算法借鉴物理退火的原理,用来解决函数优化问题,我们不妨来看下它的思路。
借鉴物理退火的原理,我们所要优化的目标函数,就相当于物体的能量E,我们希望它越小越好。而函数的自变量,它里面的每个就相当于物体的粒子,通过充分调整它,来使得目标函数尽量小:

模拟退火算法先设置一个较高的初始温度T,然后慢慢地降低温度T,而在每个温度下,都对进行充分的调整,在温度较高时,的调整相对也较自由,哪怕的调整会令目标函数值更高,也以一定的概率接受它,而随着温度慢慢下降,x调整的自由度也渐渐变小,最后,当温度下降到一定程度时,基本只接受更优的X,随着不断的迭代,最终收敛到一个局部最优。
好了,我们先来展示一下模拟退火算法的流程图,如下:

比较值得注意的是,模拟退火共包含了内外两层循环,外循环是温度的变化,内循环是当前温度下X的迭代。大家结合下面流程描述来看,就理解它的每一步了。
模拟退火算法的流程描述如下:
一、初始化
1.1. 初始化初始解
1.2. 初始化温度
二、外循环
2.1. 内循环(直接循环N次):
(1) 生成新解
从x的邻域随机选择一个x作为新解
(2) 计算新解的能量
(3) 根据能量差按概率接受新解
(3.1) 计算新解与旧解的能量差
(3.2) 根据能量差决定接受新解的概率
(3.3) 如果 则接受新解,否则放弃新解,进入下一轮
每次接受新解时,需要更新以下信息:
更新当前解
更新当前能量
更新历史最优解
更新本轮内循环找到的最优最差解所需的能量
2.2 降温
2.3 判断终止条件
如果本轮找到的最优、最差解的能量差异不大,则终止循环
三、输出
输出历史找到的最优解X
在模拟退火算法中,对于是否接受新解使用了下述公式:
该公式是非常巧妙的,下面让我们来分步讨论它的意义。
1. 当新解比旧解更优秀时
当新解比旧解更优秀时,此时,则
因此,不管随机数是多少,条件一定成立,即只要新解不比旧解差就一定接受新解。
2. 当新解比旧解更差时
当新解比旧解更差时,此时,则。

p的取值能量差成正比,与温度T成反比,也就是:
1. 新解越大时(越大),p就越小,这就意味着新解越差接受新解的概率越小。
2. 温度T越大时,p越大,这就意味着温度大时接受新解的概率越小。
总的来说,就是新解越差,接受的概率越小,但同时温度会提升这个概率,如果温度很高,即使新解很差,也有很大的概率接受新解。
所以说,这个公式非常的巧妙,仅仅用一个公式,就蕴含了多个机制。
在这一节里,我们讲了模拟退火算法的大概思想和流程,这里我们仅仅知道它大概是怎么做、怎么一回事就好了,后面我们再通过代码,来更具体的展示它是如何实现的,但是,大家也不用过份地去强记它的流程,能大概地知道就可以了,之后等我们更本质地剖析一下这家伙,理解它的意图,就会对它非常清晰了。
评论