全局搜索和局部搜索.# k: |8 t, ]5 }' @7 q2 i
目前使用较普遍的、有影响的 ' b. ]8 X1 r+ o8 G- M9 j全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;" z0 X) Z; v0 K
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.+ O" B" |7 D: P) t: i! w7 y
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法. 7 m* ~$ b! L& i此外,接触问题的并行计算也是不可忽视的研究内容) A6 T+ c! l" s4 z. G: ~* f6 U
2 H" U: o( D' K7 V1 z( _
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。 ) O' r# }2 C3 `; W- x) _) K! Z6 b2 C' ?6 t/ i" Z
局部搜索算法是从爬山法改进而来的。 }$ s/ N+ d& E; {6 d' B7 ?0 Y
* {$ u# h$ O! W- `
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。 9 v( ^+ U: @9 S+ V3 X+ E F+ V$ M9 o$ k6 x' N" E局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。8 ~$ C) h' K: |5 I1 C7 F$ \7 k
( D% z+ b) n' b$ ?# M2 m7 v* z2 U现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。8 d$ V4 Q& }5 F/ X; D3 ~, y! D/ b! C: z
E% f Q9 k' t+ h
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图 7 X; W& o' m) e2 U' [1 o; J0 ?$ ^3 O
爬山算法+ D. u$ |* t I- J$ I# K' }7 H1 W; I
# c5 S( n. ~2 u/ V" q# q5 i( B" m1, n := s;$ k# r4 B" f5 @7 B* F1 }3 F
5 a& Q. }& h1 v. J3 n) Z4 V2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);! D) m" v: y! ?" P; S5 Y
$ P' E- O) N7 V+ W; @8 j
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}: C" H' P" d: v0 X5 H