* w# H) F# n: s0 }% _遗传算法 ! [9 ^# v- z3 t3 f) ~: @ . `2 q0 E, U0 t' n" H- |* G9 w : t) a' }7 H0 C3 y ' H8 P2 K# B, \遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,生物在繁衍发展的过程,会通过繁殖,发生基因交叉,基因突变,适应度低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的。 p/ b6 c/ }0 K0 H e
0 q/ K( |; Y/ j& N/ d: B
遗传算法初始是一个较差解的解集种群,通过遗传交叉繁殖出下一代的解集种群。在交叉的过程中,有一定的概率发生基因突变。在下一代的解集种群中,通过适者生存的自然选择,淘汰那些较差的解(个体),只让较好的解(个体)繁殖后代,这样产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境。经过许多代的繁殖和自然选择后,就能得到接近于真正最优解的解。7 H( R. K4 u0 ~8 q" f/ k
: X2 X9 Q$ k+ s8 j( r, _/ g
1 p& A4 v3 q6 P. |# X: h. G J' ^' K. |; j. C1 W3 n可以用精英主义原则来对基本遗传算法进行优化。所谓精英主义原则,就是为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中。" X2 C8 _$ V f3 L2 A, k
( c4 ~# O# e ^; J& F$ H . g6 ^ d2 q) ]
2 ~; m; S: j1 D蚁群算法6 I; F! G/ y d
2 j; s& f, B ?+ v! ]
蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。8 E- ^6 K9 l: r, ]# F7 s5 J
* R% O# G- @& n+ g" x蚂蚁在路径上前进时会根据前边走过的蚂蚁所留下的分泌物选择其要走的路径。其选择一条路径的概率与该路径上分泌物的强度成正比。因此,由大量蚂蚁组成的群体的集体行为实际上构成一种学习信息的正反馈现象:某一条路径走过的蚂蚁越多,后面的蚂蚁选择该路径的可能性就越大。蚂蚁的个体间通过这种信息的交流寻求通向食物的最短路径。 ' B# {: u" ~, ^/ T) [" o' j, L2 K9 V8 F% b# \
7 b$ s( b( O$ D7 H" F
9 w: }( x$ U4 P' R% n
蚁群算法就是根据这一特点,通过模仿蚂蚁的行为,从而实现寻优。当程序最开始找到目标的时候,路径几乎不可能是最优的,甚至可能是包含了无数错误的选择而极度冗长的。但是,程序可以通过蚂蚁寻找食物的时候的信息素原理,不断地去修正原来的路线,使整个路线越来越短,最终找到最佳路线。; e b6 B3 M4 W6 v
. U, I4 [4 |' x. [1 f' i. y + X+ `0 [/ Z% A9 [
- Z: F6 L2 k" q+ S: F# B; b
这种优化过程的本质在于: ) _+ q' x( E4 C2 _9 h r# a/ J- y7 l+ @
0 {* E, \- b7 L6 q& o8 i
# i' r3 |( d4 Z T
选择机制:信息素越多的路径,被选择的概率越大。! _; q0 ^5 |+ t. R" v
3 M7 @% k, z2 m. F更新机制:路径上面的信息素会随蚂蚁的经过而增长,而且同时也随时间的推移逐渐挥发消失。' q5 q$ l' Q }6 S; R2 b
: b5 s: C5 Y9 U- S' u& d: s " A, _8 a/ G$ T' W |% M9 ^
3 {5 i; b4 M% U9 U
协调机制:蚂蚁间实际上是通过分泌物来互相通信、协同工作的。通过个体之间的信息交流与相互协作最终找到最优解,使它具有很强的发现较优解的能力。 9 ~7 r, S4 t0 q: F( ]; u ! X4 n' D6 `, Q8 V7 b6 }/ b9 t 7 C& ^0 D+ h4 c . [5 `& N# P" H6 Q8 T# V出错机制:显然如果蚂蚁都往信息素多的地方移动,会导致局部最优解的问题。可是,总有些具有叛逆精神的蚂蚁,会不往信息素较多的地方移动,从而可以跳出局部最优解,找到全局的最优解。, X0 p1 r, Y4 i; w/ ?8 Q
( B5 n$ W6 k- [( H5 y5 k! Y 5 p% `" h1 H% K" G, r; p5 u7 Z( v2 M: Z N
总结:2 y, A# c( J4 X0 G/ p" T
' f$ v) x# s6 H: A
遗传算法:优点是能很好的处理约束,能很好的跳出局部最优,最终得到全局最优解,全局搜索能力强;缺点是收敛较慢,局部搜索能力较弱,运行时间长,且容易受参数的影响. " P, _# @: H& D模拟退火:优点是局部搜索能力强,运行时间较短;缺点是全局搜索能力差,容易受参数的影响.& j8 m. ?- v) E" [5 h# B- Z7 x
爬山算法:显然爬山算法较简单,效率高,但是处理多约束大规模问题时力不从心,往往不能得到较好的解." H, u7 u1 w: ]& u4 `
: m7 H, y w' x0 q$ q) Y( K0 @8 E