1 W9 x1 ~4 z3 P% L& C5 R8 H 8 i# `8 L% p8 x1 d) F& z
智能优化算法要解决的一般是最优化问题。最优化问题可以分为(1)求解一个函数中,使得函数值最小的自变量取值的函数优化问题和(2)在一个解空间里面,寻找最- @2 D0 B4 H' ?9 x& |# q' T
优解,使目标函数值最小的组合优化问题。典型的组合优化问题有:旅行商问题(Traveling 6 } {* i) A7 b8 g( o' Y
Salesman Problem,TSP),加工调度问题(Scheduling ' Z' W' g' p8 h& b
Problem),0-1背包问题(Knapsack % |5 j3 `* X( a+ c- w" P; O Problem),以及装箱问题(Bin Packing Problem)等。 8 J# v* Y! T5 s; c 优化算法有很多,经典算法包括:有线性规划,动态规划等;改进型局部搜索算法包括爬山法,最速下降法等,本文介绍的模拟退火、遗传算法以及禁忌搜索称作指导性搜 ! N1 [" l0 L" ?/ B7 F索法。而神经网络,混沌搜索则属于系统动态演化方法。 7 _- z# c- V3 B. e, f8 D: U6 p . i# K l/ {' b8 U6 q$ P% |; S
: R+ i" F: |5 Y2 F! Y' m 优化思想里面经常提到邻域函数,它的作用是指出如何由当前解得到一个(组)新解。其具体实现方式要根据具体问题分析来定。 ) ~3 s. W: ~$ K* K7 h : \# e* l4 O' X6 L$ \ 7 ~! e7 Z( O' o3 ~* E3 a4 K
一般而言,局部搜索就是基于贪婪思想利用邻域函数进行搜索,若找到一个比现有值更优的解就弃前者而取后者。但是,它一般只可以得到“局部极小解”,就是说,可能. w# ?7 b: q3 @3 c
这只兔子登“登泰山而小天下”,但是却没有找到珠穆朗玛峰。而模拟退火,遗传算法,禁忌搜索,神经网络等从不同的角度和策略实现了改进,取得较好的“全局最小解 ”。 + y2 o' P& y! W9 A2 R. ~: | ; s& ]5 `. u6 [
7 h; |9 P$ e/ v1 f
模拟退火算法(Simulated Annealing,SA)3 o- D1 A/ m9 c. e% t
0 }4 B9 N1 S) M4 a4 t6 `
" k6 U9 s. r+ a: f6 w$ w+ M 模拟退火算法的依据是固体物质退火过程和组合优化问题之间的相似性。物质在加热的时候,粒子间的布朗运动增强,到达一定强度后,固体物质转化为液态,这个时候再 ?1 N6 A# K5 \8 w
进行退火,粒子热运动减弱,并逐渐趋于有序,最后达到稳定。$ r2 g P' x$ Y2 `1 q* A- Z A
$ c7 o3 o& {5 m% Q) R& F% Z9 {& [ % ?# r6 }! q5 p+ b; G* f' a4 r 模拟退火的解不再像局部搜索那样最后的结果依赖初始点。它引入了一个接受概率p。如果新的点(设为pn)的目标函数f(pn)更好,则p=1,表示选取新点;否3 v2 Q6 w/ Q5 Q7 j
则,接受概率p是当前点(设为pc)的目标函数f(pc),新点的目标函数f(pn)以及另一个控制参数“温度”T的函数。也就是说,模拟退火没有像局部搜索那! _6 d$ { u1 d% v3 H
样每次都贪婪地寻找比现在好的点,目标函数差一点的点也有可能接受进来。随着算法的执行,系统温度T逐渐降低,最后终止于某个低温,在该温度下,系统不再接受变 8 f+ K) M% k6 V化。 ' n+ U8 I1 S. @1 x3 l& D" E& K 8 Y8 c) l. x: D P( t N 7 A( q8 }' z0 H5 M5 k3 P
模拟退火的典型特征是除了接受目标函数的改进外,还接受一个衰减极限,当T较大时,接受较大的衰减,当T逐渐变小时,接受较小的衰减,当T为0时,就不再接受衰" ~0 @$ [* R, u+ x8 b! D
减。这一特征意味着模拟退火与局部搜索相反,它能避开局部极小,并且还保持了局部搜索的通用性和简单性。 ) U* f+ Y5 f) @1 [5 P1 T 在物理上,先加热,让分子间互相碰撞,变成无序状态,内能加大,然后降温,最后的分子次序反而会更有序,内能比没有加热前更小。就像那只兔子,它喝醉后,对比较" o2 Q/ j: B" i+ Y# C0 r' d q
近的山峰视而不见,迷迷糊糊地跳一大圈子,反而更有可能找到珠峰。7 Q7 |9 o$ z5 ^9 M
, |1 W# e$ V3 D& [
. l; G, y7 W, W- l- ` 当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu ! g, s$ [5 q" F( Y list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一 6 g# `7 w, r+ h! T D个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu $ r5 t% X) x! w8 c9 q
length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当 $ w, T: @4 d( K8 B5 ~( y一个有兔子留守的地方优越性太突出,超过了“best 9 h6 M) p& q+ k
to ; X' @( F; ~* H' I) Y' n) F far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration 3 U7 J- U1 Z8 S6 [+ C1 [
criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 h1 Y- q; f) [5 G( o 4 {# ], \7 v% c6 L3 J6 W 1 ]9 g1 ^5 }4 P' Q% C$ t
伪码表达:4 C1 `2 m9 \4 Z) D A
procedure tabu search; ' N ?+ z& C( q' H# g
begin ! k9 p/ G* E! i# @$ w. ~" p% o initialize a string vc at random,clear up the tabu list; 2 i' t9 h7 l3 R' l( M cur:=vc; 6 [: V% u4 ?& d$ ?9 p8 y repeat 8 f2 {7 a5 L+ V9 D9 J- S select a new string vn in the neighborhood of vc; , y3 b) B- O+ ^) r/ F9 A if va>best_to_far then {va is a string in the tabu list} 8 }* ^, h4 i/ I; ]$ j( \% ~
begin ( b+ b- }- I0 ^. Q0 O1 w cur:=va; - u' l6 p' s. F& C
let va take place of the oldest string in the tabu list; " Z j' N# F; J/ p" l3 f) |
best_to_far:=va; * [' J. G. ]6 D, J! u2 \
end else : Y3 U3 D6 t7 |$ [3 ~( k* T# E/ g3 N begin . B% T7 M h: l
cur:=vn; - }! K% Q1 e% _: E let vn take place of the oldest string in the tabu list; $ [5 B. E# v$ n: F \8 b' P C& F$ ` end; / M8 L" \. F; ?: X
until (termination-condition); - I; p" M- J, @( m l
end; $ d9 J7 ^ F" X0 I9 \! Z- s
, y- q! L- W5 L4 g8 J6 A1 K& k) [
1 B: N5 D, A# Z& H5 Z1 X& f
以上程序中有关键的几点: 1 g# ]* \* X( U( h' g (1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu 5 V- \. i! i' A4 R; C6 o list,也可以把和当然值在同一“等高线”上的都放进tabu / f+ c' i$ w2 }# o9 @
list。 , f+ J+ b* i; e+ J5 J (2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。 ) u" r+ ?+ x& N; I ]$ Q & P% h. B: H/ }, E+ m 7 _3 c6 w' W6 C1 t5 `/ S( n/ ] (3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的 “死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。 5 K& M8 F; S6 M/ n* \ ! k& ^' e- ]2 T) m" r% ] 8 c, k. b1 n1 z( R2 a) p (4)终止准则:和模拟退火,遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步/ P* l1 F/ N5 j" D' A/ g
保持不变时,终止搜索;- A% h% _ ?0 P& U, t
. }7 b( E* }0 l' h ! n) M1 l+ M2 F7 K 禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。' ?( S; k7 r4 n h6 M" R
b3 H9 X7 j0 H
/ b8 E' E% }: o* [! H 人工神经网络(Artificial Neural Network,ANN) : Y. \2 q( P' c$ P& b 6 Q6 P# h& A, o8 B) n
8 a- W8 R/ o6 @
神经网络从名字就知道是对人脑的模拟。它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。和冯·诺依曼机不同 9 |' ^- u( [. ^,神经网络计算非数字,非精确,高度并行,并且有自学习功能。8 Y9 ?7 s: r- k# X* M) }+ n/ W
& U6 h; H& L. p " R/ v* V8 \, g1 _' M 生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突, ! ]" A; O2 ?7 W+ J; p4 [是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高- w& [4 N, f( m+ Y
出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。 4 n, E- z+ H5 [4 K 3 E# ~ r- {/ N