模拟退火算法原理 模拟退火算法

模拟退火算法每次的解为什么不一样?模拟退火每次的解不同是很正常的,因为模拟退火本身是一种随机算法,转移向更差的解不是必然而是概率性的,也就是说每次执行算法时,执行过程转移到的解可能都是完全不一样的 。
至于TSP问题,本身属于NP-hard问题,找不到存在多项式时间复杂度的解 。
如果要求精确的解,目前可行的方法有枚举、分支限界、动态规划等,但这些方法适用的数据范围都很小,一旦数据规模变大,它们都将无能为力 。
所以目前广泛使用的大都是一些随机算法,比如蚁群、遗传等,模拟退火就是其中的一种,这些算法的一大特点就是通过随机去逼近最优解,但也有可能得到错解 。
只有穷举法可以保证得到最优解,但是穷举法在数据量比较大的时候运行时间通常是不能接受的,所以用了各种近似方法 。
模拟退火算法新解的产生和接受可分为如下四个步骤:
第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响 。
第二步是计算与新解所对应的目标函数差 。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算 。事实表明,对大多数应用而言,这是计算目标函数差的最快方法 。
第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则: 若ΔT0则接受S′作为新的当前解S,否则以概率exp(-ΔT/T)接受S′作为新的当前解S 。
第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可 。此时,当前解实现了一次迭代 。可在此基础上开始下一轮试验 。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验 。
模拟退火原理介绍 在优化问题中,我们希望找到一个最优解,但实际上这是难以达到的 。尤其是当问题较为复杂,求解空间维度较高时,我们需要在巨大的求解空间中搜索所有的可行解,并确定最优解 。这样做计算量十分巨大,几乎无法在有限的计算时间和计算资源下完成 。在实际问题中,我们并不需要精确的最优解,只需要一个近似最优解即可,这个近似最优解与完美的最优解应该足够接近 。
模拟退火(Simulated Annealing, SA)算法是对热力学中退火过程的模仿 。将金属加热到高温,此时金属内部分子热运动非常剧烈,内部的分子结构会出现很大变化;之后让它缓慢降低温度,随着温度的降低,分子热运动的剧烈程度逐渐减弱,内部分子结构变化较小,逐渐趋于稳定 。在寻找问题的最优解时,我们可以先给定一个初始解 。此时温度较高,初始解有很大的概率发生变化,产生一个新的解;随着温度的降低,解发生变化的概率逐渐减小 。假定我们需要求解一个函数f(x)的最小值,那么模拟退火算法的过程描述如下:
产生新解的方式很多,以二进制编码为例,假如一个解为01001101,可以随机选取一位进行取反 。假如选中了第3位,则第3位按位取反,新解为01101101 。这个过程有点类似于遗传算法中的基因突变 。上述算法描述中每个温度值只产生了一次新解,实际问题中可以产生多次 。
【模拟退火算法原理 模拟退火算法】 算法的关键在于Metropolis准则 。如果新解的函数值较小,自然要把新解作为当前解;如果新解函数值较大,则它仍有一定概率被选作当前解 。这个概率与df有关,df越大,说明新解越差,它被选作当前解的概率也越小;此外,这个概率还和当前温度有关,当前温度越高,概率越大(类似于分子热运动越剧烈) 。
参考资料
[1] Lee Jacobson, Simulated Annealing for beginners,

模拟退火算法原理 模拟退火算法

文章插图
模拟退火算法是监督学习吗是 。模拟退火算法来源于固体退火原理是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时固体内部粒子随温升变为无序状,内能增大而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态内能减为最小 。模拟退火算法是监督学习 。模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法 。

秒懂生活扩展阅读