5 j4 U# l( O; B 模拟退火的伪码表达:2 a u! e0 `3 A3 S8 C
procedure simulated annealing F: r: v5 E ?+ Y3 A9 ^ begin 8 i) a5 F3 }7 W2 i% D6 r/ }. G: U' g P t:=0; ; C9 X( T% s" _+ g2 { initialize temperature T ! U5 p8 G$ E7 D9 g+ r
select a current string vc at random; # I' E! `2 P: w5 Z+ H0 c: |
evaluate vc; + x6 S3 @# H2 `9 I* A S repeat 8 |7 m& Z j" z- ]/ R6 A1 l4 L4 i
repeat . T: p/ w& Q+ A4 m9 {
select a new string vn in the neighborhood of vc; (1) * S; _; ~+ g1 M1 U8 S4 I6 M
if f(vc) then vc:=vn; . U8 r- w8 g" e9 H2 z6 f else if random [0,1] then vc:=vn; % T+ p" G3 v8 P: L' J
until (termination-condition) (3) 8 K4 {3 J8 X7 z3 A
T:=g(T,t); (4) 9 y0 r- `2 j; o3 ~7 Q; k# X
T:=t+1; 9 y0 B) n% h* t7 \" o0 Y until (stop-criterion) (5) ) C( {+ [+ h) V: \9 A
end; ; _8 H w, g1 B' h* n) P' y/ G
4 \' O0 H4 {2 }6 z' q: S, m# w9 p* F
0 W/ y# n: x% w" B
上面的程序中,关键的是(1)新状态产生函数,(2)新状态接受函数,(3)抽样稳定准则,(4)退温函数,(5)退火结束准则 l6 y' G# H0 O8 B (简称三函数两准则)是直接影响优化结果的主要环节。虽然实验结果证明初始值对于最后的结果没有影响,但是初温越高,得到高质量解的概率越大。所以,应该尽量选+ n8 U j& A9 }) h/ K9 W
取比较高的初温。- Q. f( E4 H# j/ V: M7 K8 ?, T
B" B' A* [# {' x, x$ ~, S+ o + n+ E- X- u: p 上面关键环节的选取策略: t4 b/ a5 f. i2 A2 A0 P (1)状态产生函数:候选解由当前解的邻域函数决定,可以取互换,插入,逆序等操作产生,然后根据概率分布方式选取新的解,概率可以取均匀分布、正态分布、高斯6 C7 j1 O. M' B5 U3 d7 q' p
分布、柯西分布等。 6 [/ {0 L2 q% y1 M! h 3 D4 O, X3 U5 z" W 3 |5 j$ e6 ^8 y' z (2)状态接受函数:这个环节最关键,但是,实验表明,何种接受函数对于最后结果影响不大。所以,一般选取min ( o% V% |/ _1 E% D+ _0 D' N u& p [1, exp ((f (vn)-f (vc))/T)]。; K \, g3 Z. H3 w# X0 B% f
(3)抽样稳定准则:一般常用的有:检验目标函数的均值是否稳定;连续若干步的目标值变化较小;规定一定的步数; ' M% Z; ^6 R; r# y " q/ E( P% Y; T, h; V 2 C, q* W( i2 h0 U/ \9 W
(4)退温函数:如果要求温度必须按照一定的比率下降,SA算法可以采用 R5 q" `0 N, F8 E
,但是温度下降很慢;快速SA中,一般采用 " e0 g( D5 V, D1 U 。目前,经常用的是 , 是一个不断变化的值。; k* f7 x# B0 W/ F( c/ M
(5)退火结束准则:一般有:设置终止温度;设置迭代次数;搜索到的最优值连续多次保持不变;检验系统熵是否稳定。 {; s" ?, ^, Y8 U2 k
3 B; E1 z; e- r9 p: k
6 s( g: a( W% P( P( u9 {- B 为了保证有比较优的解,算法往往采取慢降温、多抽样、以及把“终止温度”设的比较低等方式,导致算法运行时间比较长,这也是模拟退火的最大缺点。人喝醉了酒办起 h9 h! S, E' t/ ]7 J. t事来都不利索,何况兔子?! W ^# S/ D3 n" y( A v
! s. ?7 ?4 v ^1 |
# s. N1 S! Y4 l9 z( W8 b2 I9 y 遗传算法(Genetic Algorithm, GA)% h3 v! V& N( t5 H' J, ]! D7 F, O4 j9 a
) M" |9 d e9 a) i; }" f & L6 ~: v: \! O2 a6 U1 ?1 d2 g
“物竞天择,适者生存”,是进化论的基本思想。遗传算法就是模拟自然界想做的事。遗传算法可以很好地用于优化问题,若把它看作对自然过程高度理想化的模拟,更能 J- d% S' n! T6 Y$ Y显出它本身的优雅——虽然生存竞争是残酷的。; O, j5 R- f7 W+ m
) f+ `! ^1 h4 C' ~1 ^% A; R : V+ f8 j' {7 r, a) V$ `
遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码 0 |# Y& X6 U( q, m、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。# U- i; C9 f' Q) u
作为一种新的全局优化搜索算法,遗传算法以其简单通用、健壮性强、适于并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,取得了良好效果,并逐渐成 * C' k; a( j3 L; x为重要的智能算法之一。 ! n6 F9 R, A. r5 `7 H4 e4 f$ y% \% o 1 Q M2 |! D$ e, g& O) O ^ * v1 X- ^2 I6 p. E
遗传算法的伪码:3 |, ^( ?% j, W- z
& j8 V2 G! X5 L1 l
, ~1 o) ^) X1 h `4 Y! I
procedure genetic algorithm % ]- H. M- p' Z( x$ D$ Z# _
begin ; y5 a2 n0 ^' T) Z/ M& H& ]/ p2 a1 I
initialize a group and evaluate the fitness value ; (1)) g7 M$ u( _9 e0 @+ }* g
while not convergent (2)- O" ?7 |3 J8 ?1 j
begin , y2 R. X. R: ?) t7 T' Z$ y. r select; (3) 0 p; A+ w4 U/ Y1 o- s; h/ P if random[0,1] crossover; (4) ( R) s, a% l& P% P0 {+ r0 V6 ~# h if random (0,1) mutation; (5)& [* `1 n& N7 L p. d) i+ }
end; * p9 C" e" s6 t! E" w end 3 ^$ W* E( R9 v. f
上述程序中有五个重要的环节:8 z) \$ Z v& ^( @* @/ s; u
(1)编码和初始群体的生成:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。然后随机产( z! a* ^ P$ H8 q2 V8 d
生N个初始串结构数据,每个串结构数据称为一个个体,7 L1 `% ]; e0 o* @
N个体构成了一个群体。GA以这N个串结构数据作为初始点开始迭代。 ) M2 Z4 t) E2 s' S5 Q1 o' @ : _2 V' b( L) v- D) c0 C
1 P' r* g" F C F3 p
比如,旅行商问题中,可以把商人走过的路径进行编码,也可以对整个图矩阵进行编码。编码方式依赖于问题怎样描述比较好解决。初始群体也应该选取适当,如果选取的 ( ]8 _2 v' ^& s' T0 G过小则杂交优势不明显,算法性能很差(数量上占了优势的老鼠进化能力比老虎强),群体选取太大则计算量太大。7 X3 S: O6 K' ?# S. B! l y
* C. s/ }' ~: ~+ {- H# I ; Y# \" i. Z' H7 V* o3 Y0 R
(2)检查算法收敛准则是否满足,控制算法是否结束。可以采用判断与最优解的适配度或者定一个迭代次数来达到。' r' ]4 @' ^* x; l3 q) i
0 i0 u$ z- F5 _ ( v$ Z, W% L. M Z6 }1 q8 e (5)变异:按照变异概率(pm)进行变异。变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。同生物界一样, GA中变异发生的概率很低。变异为新个体的产生提供了机会。( M' g: b7 X' {! U( t" ?
( y! B H/ m1 ?% j5 l
/ T3 M" P) x6 M7 `3 F 变异可以防止有效基因的缺损造成的进化停滞。比较低的变异概率就已经可以让基因不断变更,太大了会陷入随机搜索。想一下,生物界每一代都和上一代差距很大,会是 ! X; l7 N# N: k- @; \怎样的可怕情形。 6 L. p3 v: b9 n" f9 ? 7 M; k0 w- q9 f1 x! p4 q; B 7 q$ C/ R8 ]: Q' q: a/ Q
就像自然界的变异适和任何物种一样,对变量进行了编码的遗传算法没有考虑函数本身是否可导,是否连续等性质,所以适用性很强;并且,它开始就对一个种群进行操作! R- ~' b/ l5 W7 f+ f' }2 `" W
,隐含了并行性,也容易找到“全局最优解”。: y* k6 p: ?+ C( t! P2 z
. F7 u% L% [4 c
) f0 c# t6 {3 N 禁忌搜索算法(Tabu Search,TS) % L. f w/ x: l9 s W2 Q+ \. v 6 k" X9 |; F4 ~# Z L " c) `0 z% f8 j2 Z y1 a0 O 为了找到“全局最优解”,就不应该执着于某一个特定的区域。局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是 # ^" {. D+ a- ]6 P4 g- N, M对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地 d' F5 y( ?5 l( y* P i
方寻找。就这样,一大圈后,把找到的几个山峰一比较,珠穆朗玛峰脱颖而出。 A% d0 y b! S3 g8 A% I1 [& ]
9 S) M3 R- y! a4 O% ~- S6 V# x \
7 M' X1 v* S7 B! h
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu . |' X) e$ l; R$ Z# Y
list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一! w( R4 y+ A, ^1 r) S( x
个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu 0 F& h, ~ [$ x8 L3 y5 Z0 g length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当 $ Q" W- ^# c" }3 Y8 n% U3 G一个有兔子留守的地方优越性太突出,超过了“best 0 `) b8 e, F, V4 O+ s) @ to 6 ~% P/ F. d& f% Q0 l
far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration 0 l/ h% B- Q) Z2 y# x3 T
criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 : j# [' j% p2 d0 o # L* n1 ^# ]" q* ?1 q1 U* w+ H
7 o3 B4 b. [3 w# W5 c3 y2 f 伪码表达: & z- D% k7 r9 u+ y procedure tabu search; 3 h1 P" h! J. J* C$ }! G. y begin $ M, R9 ~3 b% o& ?6 f initialize a string vc at random,clear up the tabu list; ( k+ S9 ~1 ]7 T+ H' J
cur:=vc; % I ^- g+ g3 H3 Q2 \* f: q! T7 E
repeat ) t$ _5 N. z r4 h+ V
select a new string vn in the neighborhood of vc; 2 L# ?# W) o4 s- S; w9 T
if va>best_to_far then {va is a string in the tabu list} + s; a6 ~1 ^8 q7 _& q, _ begin , L+ `6 l2 P0 l! c5 i( P4 N" E
cur:=va; . Y$ y4 q6 @) X, l7 Y( j9 w& `
let va take place of the oldest string in the tabu list; # k) O# }, J% ]& `' u
best_to_far:=va; " x; A1 d1 u# p9 d8 {/ g end else + m4 k4 q' }' `* g begin " E: U- k& ^3 L" A- C5 B) [ cur:=vn; 1 ^% e* T' I+ h( k; z& U# g
let vn take place of the oldest string in the tabu list; ' n1 T; ]3 @! o! [# I) c
end; ! R3 d& `* g9 m* ` until (termination-condition); . t8 X, j) t7 l3 ]
end; A }/ V+ w' U8 y1 J2 E9 v 0 K: G% `. h4 l: _4 I% p6 h. i - T+ E- n% X/ u2 k 以上程序中有关键的几点:! B. g6 ]6 R. p
(1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu 7 P$ T* o; U' m& _6 k- T list,也可以把和当然值在同一“等高线”上的都放进tabu 0 G% J: X9 z0 D2 X) M8 h list。, l t# y& I8 H% _
(2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。 " k2 x' j3 O0 ~8 \' G# ^# L 1 j4 w. t; K { $ W- m$ E& G1 g! ~0 F9 ]
(3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的 “死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。 ' \1 r/ r" M" d5 u . j0 b9 N0 e' p2 q$ F; d
. E7 [1 P: h( ]& n (4)终止准则:和模拟退火,遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步 2 |" b# |! I: z保持不变时,终止搜索; " ^# ~ ~! m+ T5 q1 U+ ? 7 Q9 H3 M2 q4 t ! n6 \& H- B. A4 \% s9 f ~5 B& d) X 禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。 0 L# O# D$ b6 V. y& R% H9 s ) T( f+ }" B( |# P! l 9 X3 {% @; j* U
人工神经网络(Artificial Neural Network,ANN)6 m, m6 C* N4 n
+ @# A' i; s1 i# g9 q
# d7 _4 w! j% P# {0 Y 神经网络从名字就知道是对人脑的模拟。它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。和冯·诺依曼机不同 ' d( C$ ]; Z& J) E1 A,神经网络计算非数字,非精确,高度并行,并且有自学习功能。* e: K X8 r+ |3 C
! T t- f* w% d& }6 g' t( u+ ` % q: C7 ^! {+ v ]4 _6 i 生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突, ) ~ ?$ ?& D9 F5 i1 H& n4 D是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高9 |9 p# Y* K5 v0 @: d( _$ x' D
出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。) b3 |( p2 U, }( e9 d) n! v3 B
3 |* B# e7 V. x6 `# a
}! b" q% `# H. U9 E; [- o 而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素:(1)形式定义人工神经元;(2)给出人工神经元的连接方式,或者说给出网络结构;(3)给出) p! _* F: F3 Q( ]0 E4 h
人工神经元之间信号强度的定义。 : J& v* d9 m/ |- l$ ] |4 D5 I 9 `+ d* y! x5 P2 p/ I " m) P: ]9 }2 k
历史上第一个人工神经网络模型称作M-P模型,非常简单: ! m% S9 ?6 W& H8 }* J 3 h) O: N. r5 x
2 U9 r6 X0 x8 ^' x% X$ b3 ?% f; e& N
其中,9 ^( y& O& r- e& }! d6 k, {$ L
表示神经元i在t时刻的状态,为1表示激发态,为0表示抑制态;- ]# _, F7 e+ y
是神经元i和j之间的连接强度;) C) e3 R) Z V; j6 ^! u8 E
表示神经元i的阈值,超过这个值神经元才能激发。 ) k7 E6 u! P2 l& E9 O 这个模型是最简单的神经元模型。但是功能已经非常强大:此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前数字! X; E# q1 G0 @# J
计算机的任何工作。 - W- j, G# U& J' [$ a8 L3 U 2 E- a$ W$ _& x3 w( C; |
9 }0 k9 v# {8 h1 `
以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个半平面,却不能够选取特定的一部分。而解决的 ' d: O7 A, ^1 Z办法就是“多层前向网路”。' y, V* n1 k# _! Y' G/ C
+ @% ?5 } G# X9 ?2 z% u/ { . c. s0 u0 r9 k7 |+ ~
图2 / d1 |0 z- u7 g* k; }4 F 图2是多层前向网络的示意图。最下面的5 q* @! Y3 G' w) V! X
称作输入层,最上面一层称作输出层,任何一个中间层都接受来自前一层的所有输入,加工后传入后一层。每一层的神经元之间没有联系,输入输出层之间也没有直接联系' v; _- c- m0 J+ s# m, s3 F
,并且仅仅是单向联系,没有反馈。这样的网络被称作“多层前向网络”。数据在输入后,经过每一层的加权,最后输出结果。 ( f9 x9 U4 {. }+ N- a/ T( Z " l+ c/ ~4 N; ?: u' L. a
5 C3 S9 v2 H5 ? 图3 " c; u5 y6 K: f7 b$ X6 [7 F3 S 如图3,用可覆盖面来说明多层网络的功能:单层网络只能把平面分成两部分,双层网络就可以分割任意凸域,多层网络则可以分割任意区域。 $ q1 }9 w+ X+ v; V; b5 H/ {7 r 为了让这种网络有合适的权值,必须给网络一定的激励,让它自己学习,调整。一种方法称作“向后传播算法(Back 0 T$ J( M" [* l. Q1 t9 Y1 d
Propagation,BP)”,其基本思想是考察最后输出解和理想解的差异,调整权值,并把这种调整从输出层开始向后推演,经过中间层,达到输入层。/ D* F4 G7 B2 O7 Q: k
5 Y5 A/ r* c: G* |. e+ y
4 J& d* R1 a [: M B; u 可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有直接联系,这里学习的作用 ) f$ [; w& ]6 s是根据神经元之间激励与抑制的关系,改变它们的作用强度。学习样本中的任何样品的信息都包含在网络的每个权值之中。 * p0 k: }3 m1 d . K# G/ T5 \4 ^, o5 V
/ z7 _: N0 \8 K |/ B1 U% n- Z* N
BP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。这就又包含了前文所说的“最小值”问题。一般的BP算法采用3 K& R( q5 i+ O! [
的是局部搜索,比如最速下降法,牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,遗传算法等。当前向网络采用模拟退火算法作为学习方法的时候,一般成$ f3 ^1 R; }% i; H1 F
为“波尔兹曼网络”,属于随机性神经网络。 & I) | a+ o4 ] " ?9 G& `. `( n : {0 i1 L0 [! h) a, J 在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。如果没有了监督,人工神经网络该怎么学习? & e- y( y5 _" ~% d" Z1 T ! F# e5 J* O1 |
/ |- d- K8 r* q+ f$ Q3 M+ d' m9 o 就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神 + |6 ^: a# N9 Z经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利; 1 r! y& f; _/ h* r } 2 X M f8 p4 \6 @: o# B* m % M) P- d9 K2 H( Q5 f 人工神经网络还有反馈网络如Hopfield网络,它的神经元的信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量函数值不断下5 I: Q. ?7 W- m/ M( L/ t
降,最后能给出一个能量比较低的解。这个思想和模拟退火差不多。4 y: ?1 {; k4 `
: W4 x% ]4 f$ }2 n0 B4 W" x$ {- k
- s" V/ P. M% ?% z- h# L. ] 人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。这种思想已经和冯·诺依曼模型很不一样。6 j% d# V6 V- k8 J, b& l$ e$ D
" a: I3 V( ~; V: i: n0 I 7 b+ ~) v, R% e( N. M1 a 总结 6 R, p5 F" R. p$ U 模拟退火,遗传算法,禁忌搜索,神经网络在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点:都是模拟了自然过程。模拟退火思路源于物理学中! t9 i% w6 O6 w! C+ C( D
固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。6 W" N/ r) m* M+ _( J/ \8 ?
" w A5 ?0 C" T , ~7 L! {6 m8 M4 g! ?- j: o
: v+ C$ Y- l2 ~& o
它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。 $ S' k, [/ C" _, x( |3 G# u / s: F4 X, p9 R2 a. C& @ 这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计 ' @9 E4 ]' d# `: Z: _8 i的计算机有着广阔的发展前景 0 j7 v$ Q( \4 _; e+ j禁忌搜索算法(Tabu Search,TS) f# v; u9 U3 ]) B7 \+ W* Q为了找到“全局最优解”,就不应该执着于某一个特定的区域。局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地方寻找。就这样,一大圈后,把找到的几个山峰一比较,珠穆朗玛峰脱颖而出。2 W8 B: L, a( P- G8 W% w
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当一个有兔子留守的地方优越性太突出,超过了“best to far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 " d/ [4 X3 q1 f! W& n: g伪码表达:* t0 ^" W3 K7 S
procedure tabu search; 7 N: z- W" i* x1 P) E9 ~, Vbegin) Z% y' |6 e1 _6 a! V% f2 S, w
initialize a string vc at random,clear up the tabu list; 2 `, @) d9 K* j. [cur:=vc; ( |4 A: B. ], lrepeat 2 J+ c# B: x7 t. T+ d% L- Hselect a new string vn in the neighborhood of vc; 6 j$ v q: ~6 d- @1 V! r$ I$ I% b
if va>best_to_far then {va is a string in the tabu list} % O1 U' G- {! G! j2 o2 |begin5 z# g( O: j" b
cur:=va; z4 C# B8 U r4 a9 glet va take place of the oldest string in the tabu list; ( J+ i& K1 F* d& m' n9 N, Bbest_to_far:=va; ' m0 @. W3 ]% Z, R8 {end else ( k0 P; g3 X& ubegin ( h( K) q3 F/ m# K) H3 o7 ^cur:=vn;$ m$ T# T( \3 V* d% d! v8 R
let vn take place of the oldest string in the tabu list; * d7 j/ K; D+ bend; * g, Y- ?9 A/ K8 r M9 \until (termination-condition);! E; T V7 g% v: C
end; ( Z6 Y% E0 B+ o5 b$ ?# l8 J $ G6 K0 Q) J! S1 `* ]以上程序中有关键的几点:( t2 ?: C @$ |! Y( J
(1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu list,也可以把和当然值在同一“等高线”上的都放进tabu list。 * L' L+ V! X# R1 _8 G% q(2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。7 x7 G+ b- e# q! _
(3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的“死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。9 N8 P% i S& F: t: h2 V) I
(4)终止准则:和模拟退火,遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步保持不变时,终止搜索; & T9 T2 j( x0 y$ `. w$ M- r/ \ y禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。 6 Z s6 g: L+ q: f人工神经网络(Artificial Neural Network,ANN)% x' e/ V& H9 ^# }$ L
神经网络从名字就知道是对人脑的模拟。它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。和冯·诺依曼机不同,神经网络计算非数字,非精确,高度并行,并且有自学习功能。 ' B# F- s1 p* ]+ C8 [" C. O生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突,是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。 ! t& O4 L8 F% }8 ]. [3 e# F7 r: L& B而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素:(1)形式定义人工神经元;(2)给出人工神经元的连接方式,或者说给出网络结构;(3)给出人工神经元之间信号强度的定义。) l/ k. l, n- F" A! J* @) y
历史上第一个人工神经网络模型称作M-P模型,非常简单: : U) R, v* M" Q! _: l% ^5 t+ i其中, 表示神经元i在t时刻的状态,为1表示激发态,为0表示抑制态; 是神经元i和j之间的连接强度; 表示神经元i的阈值,超过这个值神经元才能激发。, O$ A) j7 B# A- T
这个模型是最简单的神经元模型。但是功能已经非常强大:此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前数字计算机的任何工作。; N$ D6 r' j3 m. N/ W" g% \/ T
以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个半平面,却不能够选取特定的一部分。而解决的办法就是“多层前向网路”。/ O2 l/ Y7 E& k! O
图2 6 E& v8 D' H2 h& m. y! r% R7 S1 O图2 是多层前向网络的示意图。最下面的称作输入层,最上面一层称作输出层,任何一个中间层都接受来自前一层的所有输入,加工后传入后一层。每一层的神经元之间没有联系,输入输出层之间也没有直接联系,并且仅仅是单向联系,没有反馈。这样的网络被称作“多层前向网络”。数据在输入后,经过每一层的加权,最后输出结果。 ) b8 ]; W$ R, X: r6 A4 D. @# g图3, w1 k" h2 k+ s
如图3,用可覆盖面来说明多层网络的功能:单层网络只能把平面分成两部分,双层网络就可以分割任意凸域,多层网络则可以分割任意区域。 + X7 z# A" J+ ?为了让这种网络有合适的权值,必须给网络一定的激励,让它自己学习,调整。一种方法称作“向后传播算法(Back Propagation,BP)”,其基本思想是考察最后输出解和理想解的差异,调整权值,并把这种调整从输出层开始向后推演,经过中间层,达到输入层。 d- `( [7 ?( W; F0 e) q2 M
可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有直接联系,这里学习的作用是根据神经元之间激励与抑制的关系,改变它们的作用强度。学习样本中的任何样品的信息都包含在网络的每个权值之中。& t) { u- m+ w. Y# H
BP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。这就又包含了前文所说的“最小值”问题。一般的BP算法采用的是局部搜索,比如最速下降法,牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,遗传算法等。当前向网络采用模拟退火算法作为学习方法的时候,一般成为“波尔兹曼网络”,属于随机性神经网络。 9 W6 @( l. { P* B& ^! Z在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。如果没有了监督,人工神经网络该怎么学习? 2 r$ q4 s! a1 r- X: M ]就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利;: I0 p0 ]' H/ Y4 d( x
人工神经网络还有反馈网络如Hopfield网络,它的神经元的信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量函数值不断下降,最后能给出一个能量比较低的解。这个思想和模拟退火差不多。 . B7 I ~/ G( I/ H- r人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。这种思想已经和冯·诺依曼模型很不一样。+ L/ n; _0 t( J- j
总结) a' _: W! N4 v$ V) o' A$ `' q
模拟退火,遗传算法,禁忌搜索,神经网络在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点:都是模拟了自然过程。模拟退火思路源于物理学中固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。* H1 X+ f; j. E' f9 [/ l
它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。' A; H) V, ^: z4 t( I
这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计的计算机有着广阔的发展前景' j8 O: E& [' E5 b 作者: 花映碧水 时间: 2013-9-27 01:09 作者: shuang0813 时间: 2013-12-18 21:04
嘿嘿~~有点意思!作者: 梦里花111 时间: 2013-12-19 08:44
有意思吧。