一. 爬山算法 ( Hill Climbing ). V. p1 P. B( i( _1 ]( b
: n/ B* Q r+ M/ s$ ~* w
介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 - [2 }8 e ^: r/ D' M4 ^% W / e% M1 h) X% W r5 F 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。# [' w. m g9 @% U0 b' { 8 z8 [( [# E% i2 k # a! ~* Z7 F$ U9 w& }4 i二. 模拟退火(SA,Simulated Annealing)思想: Q+ Z+ F# g t$ r) B- v1 i) b
9 o& q) J; t' i4 F9 w& s3 V8 c( F9 e7 I 爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。1 l" R }0 t+ q# U4 C! O
7 C1 ]" L# d/ M' r* V
模拟退火算法描述: : N, r2 v9 _; E+ U9 m6 x0 W $ m! K4 l' e" {( s1 o 若J( Y(i+1) )>= J( Y(i) ) (即移动后得到更优解),则总是接受该移动- K* D7 |0 I9 t/ W E& i6 D, ~: ~! k
& w$ Q3 r5 }3 M" \, G2 u 若J( Y(i+1) )< J( Y(i) ) (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)5 ^: t1 ~6 z6 n. P( H" ]8 o