首先看一下度娘的定义html
模拟退火算法(Simulate Anneal,SA)是一种通用几率演算法,用来在一个大的搜寻空间内找寻命题的最优解算法
模拟退火是一种很是好用的随机化算法,它是登山算法的改进版spa
登山算法的思想就是一个劲的找最优解,若是接下来的任何状态都比当前状态差,那么就中止htm
可是这样显然是错误的,好比下面这种状况blog
登山找到A点以后就GG了,可是模拟退火算法会以必定的几率走向F,进而走向B,找到更优的解utf-8
至于这里为何叫作“退火”,还要从物理学提及get
在热力学上,退火(annealing)现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大天然在缓慢降温(亦即,退火)时,可“找到”最低能量状态:结晶。可是,若是过程过急过快,快速降温(亦称「淬炼」,quenching)时,会致使不是最低能态的非晶形。input
这里的最低能量状态,也就是咱们题目中的最优解it
由于要模拟退火的过程,所以咱们先定义一些变量io
$T$:当前温度,由高温到低温,表明算法进行到了什么程度,通常为double类型
$\Delta T$:每次温度的变化率,通常取$0.95 - 0.99$,模拟缓慢降温的过程(上一次的温度乘温度变换率即为这一次的温度)
$f(x)$ 当前状态对应的值
上面咱们提到,模拟退火会以必定的几率转移到比当前差的解,那么这个几率是多少呢?科学家通过分析,当这个几率为$e^{-\frac{\Delta f}{T}}$时最优
那么根据退火的过程,咱们不可贵到模拟退火的算法流程
由于模拟退火算法具备偶然性,所以咱们通常须要对一个问题进行屡次模拟退火算法
至于温度的设定,以及执行算法次数的肯定,这个须要看rp依题目而定
据说模拟退火在计算几何中有很是重要的应用,可是本蒟蒻如今连叉积都不会,因此这一块等之后再补吧
两道很水不错的题目