深入理解模拟退火算法(Simulated Annealing)

原创 2012年07月29日 12:20:50

本文将对模拟退火算法(Simulated Annealing)进行介绍,深入理解这个算法。

模拟退火算法和上一篇文章随机模拟算法中的Metropolis算法有着紧密的联系,在这里将详细探讨这种关系。

我们先从这个算法要解决的问题出发,逐步引出相应的算法。(pku, sewm,shinning)

一. 问题

人们经常遇到这样的问题:在某个定义域S内,求某个函数f(x)的最小值,形式化为Min f(x),x属于S。这是一个优化问题,根据f(x)的形式不同,有很多的优化算法来解决这类问题,简单的有穷举法(适用于定义域小的情况),图解法,数学分析法(求导数法)等精确算法,如果很难精确求得,还有很多的近似求解法,如贪心法(如爬山法,最速下降法,梯度下降法),随机模拟方法(MCMC等)。本文将介绍的模拟退火方法属于随机模拟方法,但是是可以求得精确解的(概率为1求得全局优化解),神奇吧!

二. 算法的基本思想

那怎么求解f(x)的最小值呢?它的思想是利用Gibbs分布:S中的一个点x的概率满足分布:p(x, T) = EXP(-f(x)/T)/Z,Z是归一化因子。现在假设T-> 0,可以看到f(x)越小,p(x,T)越大,意味着f(x)以非常大的概率取得最小值,这就是基本思想。现在是怎么操作的问题,这个分布是确定的,T已知,f(x)的表达式已知(对一个值,就是可以计算出来量),p(x,T)这个分布的形式就已知了,这时候我们利用Metropolis模拟算法去对这个分布抽样,在样本中,出现最多的非常有可能就是我们要求的最小值。似乎问题都解决了,然而如果直接把T设为很小,这个算法的计算时间太长了,因为S可能太大!不实用!

因此,我们采用了层层推进的办法,我们先把T设为一个较大的值Ti,然后在这个Ti的情况下采样,这个时候由于约束条件的限制,p(x,Ti)的定义域只是S的子集,因此速度较快,在采样分布稳定之后,再通过一个T的控制函数g(Ti, Tj)(是一个单调不增函数,T>=0)得到一个更小的Tj,然后在Tj的情况下,再对分布p(x, Tj)采样,直到达到稳定分布,我们可以知道这个时候f(x)比起Ti时候的f(x)变得更加小了,直到达到较小T的时候(自己设定)我们可以认为达到了优化解的情况。

三.模拟退火算法(simulated annealing)

在这一节,我们把算法总结在这里:

设定起始值T0,T的控制函数g(Ti, Tj)

while(T还没有达到我们设定的最小值)

{

     对这时的T情况下的Gibbs分布p(x, T)用Metropolis模拟算法进行采样x(t),直到达到稳定状态为止, 然后进入下一次循环(这句话的伪代码描述见下面)

}

循环中对p(x,T)进行Metropolis采样的算法我们放在这里,它也是一个循环

已知T,当前的样本x(t)(来自上一次循环的最后一个样本),建议分布h(x(t), x(t+1))

while(未达到稳定状态)

{

    先抽取一个建议样本y ~ h(x(t), x(t+1))

    if( f(y) < f(x(t) )  { 令x(t+1) = y; }

   else

    { 

       令a = min{1, p(x(t+1), T)/p(x(t), T)};

        然后抽取u ~ Uniform(0, 1);

        if( u < a) {x(t+1) = y};

        else { x(t+1) = x(t) };

     }

}

上面这个循环完全就是Metropolis算法,详细的解释可以看我的上一篇文章: 模拟计算

(pku, sewm,shinning)

至于,这个算法的名字:模拟退火,来自于我们这个过程和物理学中打造钢铁时候的加热-等温-降温过程,这里的T为温度,f(x)可以令为能量,上述的Metropolis过程就相当于等温过程,p(x, T)就是在T时候系统所处状态的概率分布,可以明显的看到,这个概率与系统的能量和温度密切相关,大部分的资料都是先将这个物理过程,然后再讲算法本身,如果人们不熟悉这个物理过程,简单的介绍反而会使得大家对这个算法搞不清楚。因此,本文为了叙述清楚,没有描述这个过程,反而更加的清楚!

(pku, sewm,shinning)

大白话解析模拟退火算法(simulate annealing)

转自:http://www.cnblogs.com/heaad/ 一. 爬山算法 ( Hill Climbing )          介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪...
  • kai940325
  • kai940325
  • 2015年01月29日 10:46
  • 6381

模拟退火算法(SA,Simulated Annealing)思想

http://www.cnblogs.com/emanlee/archive/2011/07/31/2122727.html 模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温...
  • danteLiujie
  • danteLiujie
  • 2016年06月07日 23:02
  • 1243

模拟退火算法(SA,Simulated Annealing)及其PHP实现

模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小...
  • baidu_22502417
  • baidu_22502417
  • 2014年11月05日 00:17
  • 1048

深入理解模拟退火算法(Simulated Annealing)

本文将对模拟退火算法(Simulated Annealing)进行介绍,深入理解这个算法。 模拟退火算法和上一篇文章随机模拟算法中的Metropolis算法有着紧密的联系,在这里将详细探讨这种关...
  • lcj_cjfykx
  • lcj_cjfykx
  • 2014年03月12日 02:11
  • 873

模拟退火算法(Simulated Annealing)

模拟退火算法(Simulated Annealing)1 模拟退火算法介绍  模拟退火算法属于启发式优化算法中的一种,该算法通过不断地在当前解的周围寻找更优解来进行迭代从而找到问题的最优解。   模...
  • qq_30981697
  • qq_30981697
  • 2017年04月10日 20:28
  • 522

Simulated Annealing 模拟退火

优化算法入门系列文章目录(更新中):   1. 模拟退火算法   2. 遗传算法   一. 爬山算法 ( Hill Climbing )          介绍模拟退火前...
  • sinat_25357975
  • sinat_25357975
  • 2016年02月22日 11:52
  • 1135

机器学习基础(四十五)—— 模拟退火(Simulated Annealing)

模拟退火算法是受物理学领域启发而提出的一种优化算法。所谓的退火是指将合金加热后再慢慢冷却的过程。大量的原子因为受到激发而向周围跳跃,然后又逐渐稳定到一个低能阶的状态,所以这些原子能够找到一个低能阶的配...
  • lanchunhui
  • lanchunhui
  • 2016年04月10日 12:36
  • 1310

代码 退火 模拟 SIMULATED ANNEALING

  • 2013年01月27日 23:54
  • 690KB
  • 下载

模拟退火算法的详细理解

一. 爬山算法 ( Hill Climbing )          介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,...
  • fengrucheng
  • fengrucheng
  • 2015年11月11日 22:26
  • 454

算法理解-模拟退火

求解函数以求解以下这么一个函数为例子,实现代码为R语言 f(x)=x∗sin(10∗π∗x)+2x∈[−1,2]f(x) = x*sin(10*\pi*x)+2 \\ x \in[-1, 2] 其...
  • qq_27755195
  • qq_27755195
  • 2017年03月16日 23:50
  • 1474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解模拟退火算法(Simulated Annealing)
举报原因:
原因补充:

(最多只允许输入30个字)