- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.3 c+ w: a" p1 Q/ i% m9 }2 {) n3 a
目前使用较普遍的、有影响的" W9 z0 @) U+ |; h- T2 Q( a, D
全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;
. r8 I$ v3 {' B* x7 G+ {3 f7 B; M局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.
. Q1 G9 H" g1 d( a接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.
& a6 Z+ F: t3 c& e. ^2 z此外,接触问题的并行计算也是不可忽视的研究内容
# ]: p1 `" q2 e5 U/ V. U1 z
. u7 D# a4 [+ H/ x7 w6 L: X局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。! ?+ M. s# H% B/ O; N1 E
8 z% [$ B$ K7 G" f9 e局部搜索算法是从爬山法改进而来的。
, }- B1 h! F8 h0 ?0 P+ T- h1 Y, |' h- K* u9 Y) [/ q
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
% G# P8 f% @4 W" ?' G" J8 ~+ p& {- |6 M* W1 |, G) ^8 ?) [8 `
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。
3 S2 n6 g$ z3 R
! ^, ^$ q' l* Y3 h' v1 w/ i现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。/ \5 d2 O9 ?2 d" Y
& `* b3 h" @* r, ]& v% _
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图: E1 t2 i6 n+ a( B4 M% h
0 \0 b" U- [5 `; n$ _爬山算法
- ]: u) z2 M# B) Y' z5 e: L8 T
! |2 j0 H5 J) |0 m& d$ v8 \1, n := s;
9 O# w4 C2 C# H* _0 I" Q# p) u: o; ^5 A" W, X* U2 d7 Z
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);
# J/ q2 w. j& B9 G% r' m( h) ?( \3 B. m, f6 q0 X. c7 V& L
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
; ^- B0 s" O2 I" P% U& h: ]0 o1 b7 \; z) r. s; e; W, m
4, IF h(n)<h(nextn) THEN EXIT(Fail);
( C" o+ u- J! W( d' w- _% h) X
$ \( U3 P& A& l. B- `5, n:=nextn;* k6 Q6 I; R- D5 r8 @% k% k
) n( A$ P5 W6 d6, GO LOOP;7 |* J' |6 V/ g% y6 k5 ~
3 k7 u# Q% x/ i# P7 f$ Y( d0 U9 @
该算法在单峰的条件下,必能达到山顶。
/ o `% L: f [5 Z# ^2 q& V% M) k6 ^& j) Y/ r9 {) t# B ]
局部搜索算法
) e0 V& x9 ^4 {/ E+ `9 L z
. C! j; m# m2 r4 v, S: N(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);) \8 c- n% M$ K/ b0 p& x
6 |! W; \/ W+ G' W f4 R) P2 t
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。* ~2 v, u3 c3 C
3 x/ X. d4 ]9 i) V R" P8 Q$ M9 k
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
3 n6 D- L$ x6 d Y u" k: B3 u
% o. L) v3 I" e0 j* N, E(3)Begin+ f* n# m$ L/ D/ ?4 k5 S" V7 u
8 L8 ?6 G' y2 M+ [$ M4 f& T(4)选择P的一个子集P‘,xn为P’的最优解
$ M7 c+ @: ?9 m9 ~- w4 L o
8 ] t- [7 \" {1 i* k // P’可根据问题特点,选择适当大小的子集。可按概率选择
/ E0 E1 p, N0 \# C1 ~# p* |* G) ?
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)" p8 } O$ V/ m
: p5 e7 C; @* p8 V! m* n
// 重新计算P,f(x)为指标函数$ t" u/ n; X) L. p7 P
t: H" Y" R2 b5 }(6)否则P=P-P‘,转(2)
|7 n' V) E. i% S/ M: L" R0 ~7 o3 s z. I$ ] B" |
(7)End* n+ ?; l* U ?$ k
) \ y) c) u* ]. j(8)输出计算结果
1 o6 E2 |7 C( E: E V1 _4 Z' ]5 V+ M
(9)结束
' I1 X& _, q& ~( U) s& q
6 T9 X3 Z/ D V6 g( E) J1 ]! J5 e9 z. h1 H8 A0 `
局部搜索算法2——可变步长
' u* [1 E7 r4 `) D2 Q- T+ K8 x% G5 o- _: }; C$ W% [
" `- h. I- s9 e7 i0 O& O' @8 S o4 i& T5 ?" V& d9 i
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb); U8 g1 ]7 w8 O
7 Q. s/ z. t% ?$ B; h
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
* r+ `# t; }2 ?2 r( P2 H/ `9 Z6 l$ A5 S
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等9 t+ k" p" D4 e! U7 S% ]
' {7 W1 i0 Y5 x. v(3)Begin7 c# X; c9 N" c d( i
8 g4 |# ~8 ^1 ] E$ L ^
(4)选择P的一个子集P‘,xn为P’的最优解 # j7 n. @6 E6 {
, t" {4 G3 ?/ u) ~5 _, T0 S' K
(5)如果f(xn)<f(xb),则xb=xn" \0 ~$ L. }* P7 C4 I
6 |. m+ c4 F2 G(6)按某种策略改变步长,计算P=N(xb),转(2) 继续 X. c& Y3 H. v! U4 l" Z) t: h9 {6 S
: t! p1 |: s* c' N(7)否则P=P-P‘,转(2) $ r+ [1 F5 q2 n. H
8 J" F& A7 {% }& b(8)End A! B& ?6 [9 m B+ L% P& F
& E8 C) `1 G/ k/ i9 y9 J) u
(9)输出计算结果
; V4 u" L" q6 |/ e4 D& P( ]5 T. D' k1 J% U' t1 ` M
(10)结束
; m. @+ R) V% T* Q
7 O& l( \) i W* F' m1 c! N) t 3 R6 U' C: z P3 G, G
局部搜索算法3——多次起始点
) {! r8 l, O: t; f+ z0 m7 N, ^$ l+ C8 l$ V& F, E
1 Q; s( m2 t0 ]0 R( C7 g
: v# t2 U' t- e. ^+ L
(1)k=08 ]' z2 R& ~$ U: N
2 ]2 S) Q1 B% b2 T* j6 J# W9 j
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);. @. N$ x( h6 b% p3 o6 h
2 M: @% C( N, V/ s2 C5 C' a2 e' j(3)如果不满足结束条件,则:' {* ^* g4 H5 K L
0 e, @ V" n3 g(4)Begin2 Z4 T0 }3 n6 s; i: j
" B' e a- E7 z6 @) z# @
(5)选择P的一个子集P‘,xn为P’的最优解 ! }/ p! F. t" o; b& |/ \
# V8 ~: `& C! m" `6 t: m
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)/ P+ j; U* n1 a8 k4 y3 c
9 T. z* S2 I& K. R- ]& E0 K4 l
(7)否则P=P-P‘,转(3)
( S. w4 K& e& L" \6 H b0 E& k9 ~
: P# S8 D3 k' b$ H2 \) H0 d2 g" s(8)End
+ L0 G0 M2 w- L7 c3 l! x# [
! Z/ v9 P) z7 q/ t! w(9)k=k+1
) ~& t8 Q/ }; o" k! a0 x( u. |* J" q9 D9 J
(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
6 N& R0 ^( z1 S: E. u+ m7 ~2 b+ a
(11)输出结果" \: A$ N5 D# |$ H7 _6 I
, B# W% M! V! d6 T; A: g0 h; L(12)结束 |
zan
|