- 在线时间
- 155 小时
- 最后登录
- 2013-4-28
- 注册时间
- 2012-5-7
- 听众数
- 5
- 收听数
- 0
- 能力
- 2 分
- 体力
- 2333 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 913
- 相册
- 1
- 日志
- 26
- 记录
- 52
- 帖子
- 291
- 主题
- 102
- 精华
- 0
- 分享
- 6
- 好友
- 84
升级   78.25% TA的每日心情 | 开心 2013-4-28 12:11 |
|---|
签到天数: 160 天 [LV.7]常住居民III
 群组: 数学软件学习 |
全局搜索和局部搜索.
. t4 [3 W( R1 C! N" I3 M目前使用较普遍的、有影响的5 y5 Q) R' \3 \: ~0 ~. A
全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;. V. j$ T0 p [5 F6 x
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.9 M) N e3 O3 N+ j
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.5 a, R. W0 h% c! f) c/ T- j1 K( n
此外,接触问题的并行计算也是不可忽视的研究内容0 F2 F! c$ E1 I0 X' Q
: F: {7 ]& _& T1 V7 `9 h4 T7 C4 D$ ]局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。4 m5 j* w0 [; |' m8 h4 h
5 w+ y' |# A! E# F7 w局部搜索算法是从爬山法改进而来的。
0 f x- ?9 O0 k4 O9 v3 [. M8 e, z; y1 h" `
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。* z4 B! f! p* @8 @2 {1 N
% B7 _: I' h# M3 m- ~2 _8 Y9 G
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。 Q( N, p# W6 a7 d
i% S; @, {# F+ {7 I) J# W( ^: |
现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。) `+ d+ z2 }! V3 ] P) W, F* c
! M8 D, L& y+ @+ I# i* L% O h* U一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图! O* {) a7 Z- S2 D
+ D# | Q8 A- I: Q! N$ O
爬山算法
# j" ~/ N+ v4 R2 I5 y
6 f, s! `- e6 X, p0 v4 Y" `' m1, n := s;1 ?0 I1 ^& c2 ^- N0 i1 L/ @
) h+ K, |" W" x# W3 I' | R4 R
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);
1 E5 c- J8 p" J8 y8 ^* _) L. g+ S D+ {
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}/ ?: K2 c# ~7 s& V4 N& q
! `* U" e) r& G7 ]
4, IF h(n)<h(nextn) THEN EXIT(Fail);$ M5 s6 |) b5 I# T2 G( q, m, V
2 ~7 }; b# W! J; C, a \
5, n:=nextn;. X# ~5 b0 C8 ~3 A
# h& N' W( \7 c
6, GO LOOP; [2 H; Y% D( Q c$ g
8 ]& i" A2 I5 T4 M/ o/ J该算法在单峰的条件下,必能达到山顶。
, S1 S3 Z; k8 O/ J4 q5 ?( k' C$ u. h+ P Y* }/ M
局部搜索算法1 s' S0 m3 t! O+ B4 d+ G- b3 G
v$ |2 X5 z: s" B(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
; U1 z x; T8 m0 ^0 x7 q: t/ j5 S9 ]; J# M$ e. m! h; J
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。3 A/ P/ N( k4 C* K- [1 y. h
- e( o: v7 U0 v1 ~$ S
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
# [3 O E! J8 s$ ?7 I o, d% V+ l, e, I/ o
(3)Begin6 S1 h1 x$ D& ^9 N5 e7 u
$ N9 C7 c, Y3 j2 g; X
(4)选择P的一个子集P‘,xn为P’的最优解
; c5 n i* Y2 d0 J! w. ^, p O n7 j4 i! q
// P’可根据问题特点,选择适当大小的子集。可按概率选择
7 Q& O) G3 a, \4 m4 F* f, t e
7 v {( w O k8 Z: L1 j(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
8 l, |4 E9 `2 b, o0 U& U
/ V2 |4 A) B+ A3 t+ h5 Q // 重新计算P,f(x)为指标函数* R( l. V0 J# M$ c; O0 b
- R+ Q% u" a7 `- C& g- `(6)否则P=P-P‘,转(2)/ _! c p' w) p1 U# g" X& I
2 X5 N3 x6 L. b, ^8 I
(7)End
3 @1 H9 e0 s7 O) k6 k; V1 l
+ p! Z% m- e: \; |6 p( R(8)输出计算结果& O( i8 i& `/ K" \- p$ T8 ?" d1 w; @
/ E1 F$ k" a8 i; j
(9)结束
, i/ P+ Z( M5 \/ G H( C& a) e: W9 l$ m: p! L. C
: R* f- }/ n T
局部搜索算法2——可变步长, x- D2 k5 F( h6 w6 C$ i' o& l
/ X! x2 u+ [. }$ f& ?4 D8 }
+ e8 I/ n* ?1 r' M A
4 E( e+ { G4 v* p* g& a; R
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);/ o8 R) R# M F1 v
/ N% H$ e$ i2 Y b' [
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。* `9 m, C, J1 x/ i- f0 m! | h- L
6 K1 H& Z6 |: R' O2 u' l$ G4 A
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等5 Q: e) m% \" G; Q I
! z" ?5 @/ |: d. S" v4 m(3)Begin
3 q# W! |1 t; }1 t/ F% O/ E9 B
# z- F" S5 g( U$ L7 j# q(4)选择P的一个子集P‘,xn为P’的最优解 : c/ I1 A; v2 |2 W2 \3 s. ^
) d3 c5 \4 P: r4 H' ^(5)如果f(xn)<f(xb),则xb=xn
6 Q7 h% I; G+ V7 j h N9 j, Z" B; F/ D/ R S9 d# l+ I6 W" C0 s* M
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续5 l" o+ W! o' ^. e3 b) h
/ k M0 J' X5 t0 G(7)否则P=P-P‘,转(2) * M8 d% p: Z4 }- u; E
$ v v6 Z+ @, l(8)End1 m0 `$ O% I& c* r+ g0 e C2 E
# E1 w5 r @' O- o# q9 |(9)输出计算结果
& K* H, }, q- n# p; s, }
2 H- Y' w4 p. t% g(10)结束
# c, f# e6 ?, @ p
! y" `+ K9 W B2 T0 `
+ x! F/ Y: N: ?7 z; `局部搜索算法3——多次起始点4 a' N/ L! V; k# }
. W7 N' q, S4 q8 \" D
# S1 C5 K" h0 w7 t- J6 h5 U9 I% r' l# r3 a
(1)k=0
1 z( W1 x* Z# D9 r$ y! ~1 V. H: }+ J( \, `7 v! T j
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);6 P8 O3 i @2 c% m
( ~0 h5 D- I6 _; \(3)如果不满足结束条件,则:
& O) r; X3 y: b' N \5 R: O9 l5 T4 [0 p/ C B
(4)Begin; S0 w1 k0 x( P) G6 f
; {. T/ ^1 _. [(5)选择P的一个子集P‘,xn为P’的最优解 9 O9 i# O# z% r5 p& S4 i
9 j0 D) A, N4 L& n+ o* @: j/ c
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
+ o4 V8 d( D# r6 n( z1 ~
4 Y( w4 k3 z6 S! m3 `(7)否则P=P-P‘,转(3)1 N" a/ w% `8 g( h1 ?, `$ ?
4 j: @ ^" i) y5 C3 s(8)End8 |+ I& x- _$ L9 j
% s- k @3 G! N& h' [; q(9)k=k+1
- N' U+ h- h: L1 E- O% q6 ~) Y: E. i/ ]
7 o$ \5 H7 o; L3 F(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2), n7 Y, K a# g/ {( a; I+ V, p# j
/ |. J! j+ N# C9 W7 N( j(11)输出结果
$ C) Z1 H0 s, H3 x& K; o" J
9 ~6 A& `5 ]1 Q(12)结束 |
zan
|