贪心法 - ]9 w5 g0 k6 [# L! g9 t # F2 s+ C# @, [1 B$ q在枚举所有解时,当遇到的解在当前情况下是最优时,就认为它是最优解。如图一,当从A点到B点时,由于B点比A点的解更优,所以会认为B点是最优解。5 x8 s+ Y& P6 o1 i5 Z H" H& [% P
/ L/ n" ]) {2 t$ A6 l( g显然这样的效率很高,但得到的最优解质量也很差。, @- E# }( S! d/ U: o
. P/ b. O1 \& d3 Q9 Z F
爬山法$ `2 `; _, g8 W) Z: z/ g7 q
. @4 s6 t- V4 k4 b( q贪心法是只和前面的一个比较,为了提高最优解的质量,可以不仅和前一个解比较,也和后一个解比较,如果比前面和后面的解都优,那么就认为它是最优解。如图一,当到C点时,发现它比前面的B和后面的D点的解都好,所以认为它是最优解。 8 f1 O1 J* O8 j$ w5 p % [& o8 Q7 B6 q4 k. a8 `! b ! e% B9 i I! \2 L" ?, I' B1 S9 P8 n: k0 i8 R x
模拟退火算法7 o' ?5 n/ C% l4 K/ ?+ o
& Q+ p# O( ]# k( G0 P* b
爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。 2 B i+ ^, g2 M9 ? 1 ^/ q+ @ n% L8 X如图一,搜索到A点后就停止了搜索。如果能跳出局部最优解,那么得到的最优解的质量相对就会好很多。如当搜索到A点时以一定的概率跳转到另外一个地方。这样就有可能跳出局部最优解A。如果经过一定次数的跳跃,跳到了E点,那么就会找到全局的最优解了。# k7 i1 F& _ Q5 l" ?9 i- `7 {) t
: O! G, x: h! x( P. z5 |2 j
如果这个概率不变,那么就会一直跳跃下去,不会结束。可以让这个概率逐渐变小,到最后趋于稳定。这里的概率逐渐减小类似于金属冶炼的退火过程,所以称之为模拟退火算法。( E g- v- G! O; r
6 h! x; d2 g8 C1 I - O- N( D; G* |, m2 c5 i 2 s+ c5 \" w/ N! l4 U2 R6 W模拟退火算法(Simulated Annealing,SA)最早由Kirkpatrick等应用于组合优化领域,它是基于Mente-Carlo迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。( K! l* J9 v* R0 ^1 @4 B2 y
! \9 m) E" z0 o8 W' p$ F模拟退火算法的关键在于控制温度(概率)降低快慢的参数r,这个参数范围是0<r<1。如果参数r过大,则搜索到全局最优解的可能会较高,但搜索的过程也就较长。若r过小,则搜索的过程会很快,但最终可能会达到一个局部最优值。% i5 `' v) W; }/ V+ u! p
# c& }6 R- e' S R
模拟退火算法不能保证得到真正的最优解,但它能在效率不错的情况下得到质量较高的最优解。, d5 J2 z s% |; t
- k0 u" g4 s" [* [2 G/ y / D* B& c" [5 y/ z: ]/ r" S8 ]7 }7 a8 w W
遗传算法 , E8 O- g* m1 c& T8 b5 X / }/ R- R# [/ Z9 M& v # y: X: ]0 z* `" L, H0 d
, Y6 j/ }. p" q1 U; F" o
遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,生物在繁衍发展的过程,会通过繁殖,发生基因交叉,基因突变,适应度低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的。 # o. A* E# p: o) E' b$ t3 {% X8 s. Z' ?+ ^
遗传算法初始是一个较差解的解集种群,通过遗传交叉繁殖出下一代的解集种群。在交叉的过程中,有一定的概率发生基因突变。在下一代的解集种群中,通过适者生存的自然选择,淘汰那些较差的解(个体),只让较好的解(个体)繁殖后代,这样产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境。经过许多代的繁殖和自然选择后,就能得到接近于真正最优解的解。 3 I& Y4 j9 N7 {/ T0 H/ ? 5 P4 F' ?; r! r/ E ' w( S/ W" b' M5 b2 D6 g) G! ~
) J6 L9 f" T8 [$ X2 L可以用精英主义原则来对基本遗传算法进行优化。所谓精英主义原则,就是为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中。1 P9 P' m3 D Q6 u) i- j
( O$ n7 K! b+ H
5 ]/ i; E% O" q; O4 x# c. o( t$ q
8 P& b! s; z) G" M$ H% u蚁群算法 7 b2 \! Y4 v( Y- ~ ( _9 R6 N6 G! H1 r. B3 w蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。5 h a. D) x- c) F$ _& a9 E
6 a2 c. k% e+ W! {
蚂蚁在路径上前进时会根据前边走过的蚂蚁所留下的分泌物选择其要走的路径。其选择一条路径的概率与该路径上分泌物的强度成正比。因此,由大量蚂蚁组成的群体的集体行为实际上构成一种学习信息的正反馈现象:某一条路径走过的蚂蚁越多,后面的蚂蚁选择该路径的可能性就越大。蚂蚁的个体间通过这种信息的交流寻求通向食物的最短路径。 : `. G# I. Y @* Y: @ 8 w5 I8 v, b( M3 r7 e$ m* U " m8 a6 s$ x& `7 s; F; x/ V" o3 K 7 i. S8 P. w) [# T- z+ I' ^蚁群算法就是根据这一特点,通过模仿蚂蚁的行为,从而实现寻优。当程序最开始找到目标的时候,路径几乎不可能是最优的,甚至可能是包含了无数错误的选择而极度冗长的。但是,程序可以通过蚂蚁寻找食物的时候的信息素原理,不断地去修正原来的路线,使整个路线越来越短,最终找到最佳路线。, c- m+ {6 V& Y8 ~( h! C4 P