简介
模拟退火算法是启发式算法的一种,启发式算法就是从对自然现象的直观感觉或人类的工作经验中启发出来的算法。有些实际问题根本就没有最优解,或者最优解几乎是不可能被求出来,这种情况使用启发式算法可以求得较优解,或者是与最优解差别不是很大的较优解,然后由于最优解是无法得知的,所以启发式算法也就无法描述所求解与最优解的差别。启发式算法所求得解无法保证可行性和最有性,这是启发式算法的特点。
模拟退火算法是一种概率算法,也就是它依概率求得最优解。退火来源于冶金学的专有名词退火。它主要是模拟这样的一种过程:将金属材料加热后,再经缓慢速率冷却,这样粒子就可以在特定的温度下,达到热平衡状态。金属材料经过加热后,粒子会离开原来的使内能具有局部最小值的状态,然后达到一种比较内能比较高的状态,在冷却的过程中,温度退却速度较慢,那么粒子就会有更多的机会停留在使得内能更低的位置,最终达到内能更低的晶体。
算法模型
算法思想
模拟退火算法主要的步骤:
- 将实际问题抽象到解空间中,解空间一般是离散的一些点。
- 初始化变量:包括初始温度,特定温度下的迭代次数,结束温度, α \alpha α,
- 随机生成一个初始解,初始解对算法的结果没有影响。
- 计算初始解的目标函数值,可以理解为初始解的代价
- 对初始解进行扰动,生成一个新解(邻解),计算邻解的代价,并跟原解进行比较。
- 如果代价变小,则接受新解,并且代价更新为新解的代价。如果代价变大,则依据Metropolis准则接受新解,这是一个依概率接受的过程。
- 在特定的温度下循环一定的次数。循环结束后进行一次降温。
- 温度不满足结束条件时,继续循环。
模拟退火算法的核心是新解的产生和接受,几乎在任何时候,算法都在进行这样的工作。也就是邻解生成函数,接受准则。
主要元素
- 解空间:就是从实际问题中抽象出来的描述解的数学表达,一般是一个数组。
- 目标函数:描述邻解和原来解的差距的数学函数。一般就是指新解和原解的增量差。通常目标函数就是优化的对象,这里的目标函数也不例外。不过这里的目标函数的优化并不是通过求导(梯度下降)等方法进行优化,而是通过遍历完尽可能多结果,来取这些结果中的最小值,那么这么多尽可能的结果是怎么产生的呢,这就要依靠一种生成函数。
- 生成函数:生成函数可以叫做邻解生成函数,叫什么无所谓,关键看它是否便于理解这个过程。生成函数用于生成原解在邻域内的一个解。邻域应该尽可能的小,并且生成函数应该充分探测到邻域中的所有情况。邻解生成函数应尽可能保证产生的侯选解能够遍布解空间。当遍历完邻解内的所有可能的情况时,算法能得到这些情况中的最小值,并且更新原来的数据,这样我们就可以认为在这种温度下,我们达到了热平衡状态,接下来就要进行降温,在下一个温度下再去找它的热平衡状态。
- 降温方式:降温方式有很多种。比如:
经典降温方式 T ( t ) = T 0 l o g ( 1 + t ) T(t)=\frac{T_0}{log(1+t)} T(t)=log(1+t)T0快速降温方式: T ( t ) = T 0 1 + t T(t)=\frac{T_0}{1+t} T(t)=1+tT0常用降温方式: T ( t + Δ t ) = α × T ( t ) T(t+\Delta t)=\alpha\times T(t) T(t+Δt)=α×T(t) - 结束条件:当循环温度降低到一定程度后,可以认为达到了最优,而这个一定程度的温度就是结束条件,一般是温度大于1。
注意问题
- 初始解:初始解最好是随机从解空间中获取。如果初始解经过挑选,那么初始温度应该设置的较低一些,这样可以减少计算时间。初始解如果太好也容易导致算法很难在这个初始解的邻域中跳出。
- 邻解生成函数:尽可能的产生邻域内所有的情况。邻域应该尽可能的小,以保证能够探测到邻域内的所有情况。每次的改变不应该引起较大的变化,这样逐步进行。
- 确定初始温度:一般来说,初始温度应该设置的尽可能的大,这样可以保证最终解不受初始解的影响。但是过大的初始解又会加大计算时间,所以可以提供一种选择初始温度的方法:在正式开始退火算法前, 可进行一个升温过程确定初始温度: 逐渐增加温度, 直到所有的尝试运动都被接受, 将此时的温度设置为初始温度。
- 确定等温步数:也就是特定温度下的迭代次数。等温步数的设置决定了产生的邻解的个数。而选择等温步数可以通过检测目标函数的均值是否稳定,当目标函数的均值稳定时,确定该等温步数。等温步数,可以是变化的,高温下等温步数可以较少,低温下等温步数可以较多。为了方便,可以确定一样的等温步数。
- 确定降温方式:权衡降温过程和解的最优性。
算法流程图
![](https://img-blog.csdnimg.cn/20190710133251421.jpg?x-ossprocess=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM0Mjgz,size_16,color_FFFFFF,t_70)