在线时间 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 |& P! t$ C$ L( r4 E3 m 目前使用较普遍的、有影响的
7 k A6 O8 s& N6 o 全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法; E! i6 _9 o: B' ~. x6 F% F
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.
2 K0 r0 j/ E$ Z( `/ B 接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.0 X9 u6 [+ A4 n0 S: T& ?8 Z
此外,接触问题的并行计算也是不可忽视的研究内容
/ D. f# |: L# s
& ^' g# a: Y9 j5 G% m% m 局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
! F. M" ^5 s/ q
! A! @* m3 x' }3 ~% b/ ? 局部搜索算法是从爬山法改进而来的。
7 u& i v; m1 j& I) c4 [8 Y , U1 s5 T7 t3 c" }" r; W- m0 N
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。# _/ z. [4 F- J: ~6 `/ O
. W. G+ J. G7 w* P( \
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。# q, o& {1 ^" ?" H
3 z( y" i% {2 `; C U 现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。
* Z* F- H0 T ` 8 Z8 m5 V9 G6 d( _6 L# I, `1 _. a
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
. c. p( C: w+ e- q: @8 ~ 2 r4 O* p7 l v" A
爬山算法
/ W8 l9 _$ o8 |* `: h0 E9 `
" u+ T5 Y; F: \! \7 N' c8 N 1, n := s;
& i: f6 G* H( @ . O9 M$ Q: p5 E2 x. R; D, I
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);3 t8 `: l, q% u% @: E3 X
; A; A# K0 T, z& r) A; p& S+ G 3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
U( w% c$ {1 l" H
( u5 h7 Q7 y( @1 i+ P 4, IF h(n)<h(nextn) THEN EXIT(Fail);
0 K% K, b p$ w0 O7 v0 P- ^ 5 S) B0 I% {: K! z
5, n:=nextn;
0 d. h+ Y/ V. d7 |+ B" N; q, h# K * u3 u6 M" X2 z
6, GO LOOP;
# X* B: Z1 ?3 h( `+ [
# o. i/ u1 t; N' g/ A/ p 该算法在单峰的条件下,必能达到山顶。
s' p5 K4 p, Q8 m. |& E E8 \ 1 n' i* e- o2 N5 d! H
局部搜索算法
$ G9 u; f+ ^7 y4 W2 m
, @- Y) H/ Z9 Y) N% f1 j (1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
: ?. g: P$ M) q8 Z : q- k& `! C: L
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。
; K1 g4 v* q- g$ K" W 9 `% ?. w O) M; c% K
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
, }3 f$ N! d* Z+ J8 u2 U # B, P5 i7 ^' B! @
(3)Begin
) E+ h: N0 G5 C+ d5 y$ A/ w9 c
1 }2 |0 P# [. |( c& V0 h (4)选择P的一个子集P‘,xn为P’的最优解 2 C& Z1 d/ V8 M$ ?7 s \# o
9 b# I. b0 h. S
// P’可根据问题特点,选择适当大小的子集。可按概率选择& U# w% L, E! c, c" [) q( y+ Q
/ L/ x% A1 p* n6 ~* @# I
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
" Q" b, I/ a' B- B8 j4 `; Z7 m9 H6 @
* G2 n. y: Q2 J( ^& d6 o3 _ // 重新计算P,f(x)为指标函数% h/ u8 T( ?( i
- z% F7 |: e) |) X2 a' J9 t
(6)否则P=P-P‘,转(2)3 h8 R+ O/ {! W) J4 |1 ]
; N! s: N2 v) G
(7)End
/ z- Z8 W2 f$ G* T
4 c+ s6 u8 \; Y (8)输出计算结果) |. v3 e Q \. T. \/ f
& |6 d: _0 j+ }6 R2 ~' i! A
(9)结束
3 D' j$ ]9 N" E# ? } # Y: x* l) Q/ Q$ Q/ J
2 ~- P+ q1 d1 e) T% n0 a
局部搜索算法2——可变步长: q5 ^4 E0 ?) h- O. @
& i" B& V" a. h+ r; [
, n+ g8 K4 t8 R, \ F
& j- |2 Q' J! |3 q! T. Y/ |$ S (1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
t; @* ~% E- |# O - p" q& l8 F8 R% F" w
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。1 r! p1 H3 d0 v& L3 ^
9 l I) G% p8 s0 a* X; O3 {* c3 ` (2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
& r8 O+ p' X# f1 U/ F0 b$ C
9 T+ U4 s/ E) p0 `2 ?) q (3)Begin
9 ^) D% P- U; q% C 6 s( a9 R6 m5 b/ C
(4)选择P的一个子集P‘,xn为P’的最优解
6 o9 G# t& G4 T 0 ~' z/ [) h( q# f! J
(5)如果f(xn)<f(xb),则xb=xn. B0 [/ y# G# \; w8 O# a! L
* V9 e2 `' D* y, h6 k4 s
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续, m. [1 G9 n$ g: J$ k/ a
^$ b6 i$ D1 c* P e/ \
(7)否则P=P-P‘,转(2) 7 F9 X2 [% f4 e* \8 ^
) g* s# \9 K' s* A2 J% m2 S1 x (8)End
( Y% `) x! n O D
3 l3 W; ]6 ?& n' J/ T: ^0 S (9)输出计算结果
% R7 Y& `( K) |% P g S ' ~" p1 r1 C. {2 V2 g( @: E
(10)结束1 [ V" R3 t4 m1 e0 A. v
' a: C1 I# m. o. X! t1 A
. O2 s& a& e0 F1 R5 y4 ^9 \' ? 局部搜索算法3——多次起始点' @2 I5 B5 ?6 `0 ^
5 I p/ r0 T, v1 I, q* [ ' j2 ^" d: A$ K |
' [) O7 N* F3 V3 }; _+ M. D (1)k=0" l. o7 ?+ A& i4 ?
: X. c5 J; P5 _# ~" C. h) T! l
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
# N U1 l3 |9 g' W( f* F1 M 4 w w* I, |" z6 i) K( g6 `, A9 Z
(3)如果不满足结束条件,则:( l& ?' v& ]1 w$ T8 Q
! b; ^% d# {7 A7 g
(4)Begin
+ T% u, U( ]4 \' F' G7 i ; z- x0 a9 z% F+ D& ]2 y) o
(5)选择P的一个子集P‘,xn为P’的最优解
, n* {2 ?% J p( m5 n
$ n0 ^1 @( ^3 G" i (6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
: l. q& h( J3 g# }; Y5 M s
0 t! H- S. P( a2 J (7)否则P=P-P‘,转(3)
, q h; ?4 _" s/ u! D! b, I$ Q: u 6 B$ @$ j" z7 f4 g
(8)End- C/ o( n* I; T- y
+ A& S2 q8 d. ^- V/ D4 N (9)k=k+1) a) ]5 Y, ?& P- F
$ o9 L2 U5 |7 Q3 s" c
(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
7 t" z% N2 @. Y" }" c+ }" s4 i 7 L2 N: M( a5 ^/ d& `5 M! `& _- _% v
(11)输出结果8 S: n* N. p+ H: ?9 \; k
1 b6 y9 {* N$ ?! h6 v* ~
(12)结束
zan