; C' E4 M2 t' k 这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。. T( L6 P& c% ~- v7 V2 _9 z) [
$ D- o5 `# b' m 根据热力学的原理,在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:% W t: p5 W7 F6 u3 p7 p2 T- W/ _) e
. S; Q3 H9 _, y" Q& o P(dE) = exp( dE/(kT) ) 1 l8 v) a: I: _: U& k: z0 O% R9 a' h4 ?1 Y
其中k是一个常数,exp表示自然指数,且dE<0。这条公式说白了就是:温度越高,出现一次能量差为dE的降温的概率就越大;温度越低,则出现降温的概率就越小。又由于dE总是小于0(否则就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函数取值范围是(0,1) 。, p/ N+ G2 \2 l5 t4 ]/ `2 r/ c8 c; X
& m) y4 K2 _5 q% b* R2 j
随着温度T的降低,P(dE)会逐渐降低。 $ t' F# G, L8 m( J1 u# @' b) Y+ a8 s" q5 C5 A
我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这样的移动。2 U9 R1 j' u5 w* z( l. _: l& m
. k% y* e# K! e8 u% V6 f4 [+ H
关于爬山算法与模拟退火,有一个有趣的比喻:) l, Y r7 Q* Y& A2 {, x! O
# ?6 J- |5 p: I4 U1 W 爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。 6 a+ c+ E! m% K) m; b# `" M 4 W5 z. c5 W% y k" z 模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。