在线时间 60 小时 最后登录 2017-2-18 注册时间 2011-5-31 听众数 5 收听数 0 能力 0 分 体力 807 点 威望 0 点 阅读权限 30 积分 288 相册 0 日志 0 记录 0 帖子 136 主题 8 精华 0 分享 0 好友 4
升级 94%
TA的每日心情 怒 2012-2-25 00:11
签到天数: 95 天
[LV.6]常住居民II
一. 爬山算法 ( Hill Climbing )
$ J- G6 J; o$ m4 f 4 {& u8 @# P3 @8 w7 H+ y [) E3 U9 X
介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。7 D! ^8 ?3 {; J7 t3 n8 C8 e/ X
; Y2 f$ o* |9 r+ ?0 r
爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。5 x" P/ e# N+ |( P, s" U
+ F4 n: H$ h: I4 d) C
* L6 k( d2 F9 S 二. 模拟退火(SA,Simulated Annealing)思想
# x0 I$ u+ A& \3 F/ n9 Z 5 s8 F/ h$ `% }! _. y
爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。: | r/ N) k) w0 A5 R& c
0 z& ~) Z, B8 m" o2 G 模拟退火算法描述:% Z9 I" B S9 r+ O
- O" R; x" H; g! T% H 若J( Y(i+1) )>= J( Y(i) ) (即移动后得到更优解),则总是接受该移动. B1 F4 b. Q8 ?5 }3 j- J# }' y
4 v7 j3 a: \7 ~ 若J( Y(i+1) )< J( Y(i) ) (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定); A3 I1 [% u0 _( ~6 t% ?
3 w& R* \, d3 C' E# ?; e6 X3 ^
这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。
' `) k `; X1 Q* W6 c; d G0 Z
3 i' o3 P7 p! E6 T7 S- J* W 根据热力学的原理,在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:' I6 M/ z$ i3 z# k2 g) S/ p
j7 e3 H, [7 a; x9 m. L& {1 D7 s P(dE) = exp( dE/(kT) ). `6 P+ B0 G. |; G a3 z% ^: n
) s+ w: y- y+ R6 p8 m( u+ C% a 其中k是一个常数,exp表示自然指数,且dE<0。这条公式说白了就是:温度越高,出现一次能量差为dE的降温的概率就越大;温度越低,则出现降温的概率就越小。又由于dE总是小于0(否则就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函数取值范围是(0,1) 。4 B' ~: Q7 z7 Y# a
) m" A( ~- y0 w. u: b$ F6 @ 随着温度T的降低,P(dE)会逐渐降低。. c }& \$ e( D( r( T2 q
; l# F9 h T1 n& ?+ l% M" Y" P 我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这样的移动。2 a* Y! \+ `' K3 ~$ a$ B
8 {* r9 Q; R4 e5 G9 ~9 e 关于爬山算法与模拟退火,有一个有趣的比喻:- B! ]5 o/ m$ c9 b2 r% V, C/ c3 V
9 K. R# a( v# Y. m" D& t2 f) F 爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。
6 `1 n, \7 i4 D8 a# L " u, A" z/ e5 z4 {$ i, S1 q8 H$ i
模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。
zan