- 在线时间
- 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 )
5 J1 \4 P( _8 u* T6 i9 Q& N" q6 J5 E/ E! p
介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。3 M% T0 G* |5 I% D! e8 k/ F2 D
- L/ ~4 d4 H# L7 ^. h 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。# K" {( J3 e4 z$ V, V& c" \) S
![]()
s; @0 y3 F/ b: {. v, |
4 ?& d- t( u$ ]) A9 I& W二. 模拟退火(SA,Simulated Annealing)思想9 U, O3 p8 H4 h
5 b( F* d7 z! }. T7 z$ `1 N 爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。4 N- l0 N: F% |2 F" T j+ n
& b% {) W, g2 a& G/ `* E% }' ~5 K 模拟退火算法描述:8 U) H% t4 N- A! T& r
0 S4 [1 h& |# ~: ?
若J( Y(i+1) )>= J( Y(i) ) (即移动后得到更优解),则总是接受该移动
, m! D- t; L; {/ w6 f; v
- X% z7 ~6 i# l0 k 若J( Y(i+1) )< J( Y(i) ) (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)
8 d1 j7 ?/ B6 y- j
) H' \0 }( l# R4 Z; m 这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。% e+ n+ p \! O( l! ]
! S! P& \; m1 r* T* i% [
根据热力学的原理,在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:
5 M9 \% o! t6 g+ U. I# b1 U7 V2 d+ T4 g$ [
P(dE) = exp( dE/(kT) )4 ^' i4 L6 O2 d$ c5 i
( A# p& h' J3 E+ W7 z- N
其中k是一个常数,exp表示自然指数,且dE<0。这条公式说白了就是:温度越高,出现一次能量差为dE的降温的概率就越大;温度越低,则出现降温的概率就越小。又由于dE总是小于0(否则就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函数取值范围是(0,1) 。! c1 v2 m% [+ G3 J) ~! p, ^
5 q* [1 j% j+ A0 O' s2 _$ w
随着温度T的降低,P(dE)会逐渐降低。
0 {3 w B& D! S- t# m+ Q' c' ]3 d9 N7 X- ^7 v
我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这样的移动。
4 I+ n8 V/ M) p; f9 v* p; C
; k1 V, o8 o8 r! ^4 p 关于爬山算法与模拟退火,有一个有趣的比喻:- a' N# S& |# _9 _& u1 e
, C0 S$ c5 n( S) b/ @
爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。
, a* a' W. C6 Y; u/ } B7 M. ?8 ^$ f. S R/ [) j0 A
模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。 |
zan
|