- D* h$ w$ X' ^# s2 [3 b) C 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。 % d, g7 }/ @0 o S+ Y7 ^+ r. j A
+ x6 N1 `; l* [$ Q- `0 `# q二. 模拟退火(SA,Simulated Annealing)思想2 Y4 u( P8 t- h; r
8 Z* R$ W2 y, C, K& W
爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。# s8 O- p3 t9 C4 K
2 B e) l: p9 t8 \7 R
模拟退火算法描述: 1 _& X- D# |/ C 9 a7 e3 p- h1 {) P4 n1 o 若J( Y(i+1) )>= J( Y(i) ) (即移动后得到更优解),则总是接受该移动% C x7 n: C+ U! ~; H0 N& ` U
- S* o _2 `2 d% I% z( c: W- H 若J( Y(i+1) )< J( Y(i) ) (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定) H: V, |. } U0 A
. Y6 L! U9 r' U4 m7 X8 w 这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。% X! e' n1 {6 {4 U$ }