- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.
/ T9 ]; Q4 [# X目前使用较普遍的、有影响的4 U/ i* d% q9 Q1 X1 d) d
全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;
& S- F, W4 ^4 N# T7 H$ k局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类., T Q% C( c" p! t1 L1 j
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.
7 m. `+ ?* Y6 w: J, o- _3 e此外,接触问题的并行计算也是不可忽视的研究内容, M6 a' P& }2 J o
1 l5 w7 o2 v( \( b; a局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
o1 m u# n- C6 n- u/ [
4 b5 p; s) K0 z局部搜索算法是从爬山法改进而来的。1 t; W1 `, K3 q& w3 m- y- E: {
- f( P5 m( u2 E( q, U5 d爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
6 `- f; C0 }7 ~9 i3 `* j+ v. f0 w k0 B2 s
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。! H/ p% R8 D% T5 A v1 N+ }, W+ K
, t6 {" m5 D8 E& m1 O; R
现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。3 P/ Y2 @7 m% S/ E3 Y6 {' L
5 h) J! |+ i ?0 d+ E一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
6 Y7 e" T9 f% s8 I* j. n" i$ S. \# g5 w) n1 D( p9 ?$ f' ?( y$ s2 g
爬山算法
' D2 w# [3 ]9 O1 m( W3 A
( O: o, `- _$ Y. @7 }1, n := s;
4 s! C8 y" o/ G& w1 v& w2 w/ F- A* r
3 i8 m* E) S/ M- {# q$ |2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);0 K/ e6 p- _; z, B) @' @6 x& m
5 x6 H+ X( M$ _# o1 X
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
1 U8 u6 _2 }# \* m) @/ I0 ?: |
* M( @7 p3 p' u1 _4, IF h(n)<h(nextn) THEN EXIT(Fail);6 I0 ~: z' K8 T9 n4 m( a1 a
6 L1 D) @/ U4 _7 N+ ^5, n:=nextn;& A% t& E0 r ~# _* {# d6 W
$ X" E7 L2 X0 [1 b! _' O) G% z
6, GO LOOP;: ]3 ~$ ~3 o% {8 q* ?1 H
6 N% v4 F: C* K+ g) o9 {5 {. V
该算法在单峰的条件下,必能达到山顶。6 `; b, u% r9 q; V) n1 q/ e5 p/ Y
/ Z) [- K2 I3 f1 o3 X
局部搜索算法
) M7 [: N y: p' N' X% H \* }; b& o- ?" B
(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);8 h; U3 E4 C! n- V% O
7 {- R% J% E; ^! N0 b8 V //D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。3 }* N7 K1 m1 T( b+ U
9 w- s2 D! _' b' m' g
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
; I3 y' Q3 @ ~: D* k; d
1 j2 v* t0 h3 h* d+ e& p(3)Begin5 ]6 ]2 R, d! w& Q6 P0 A( L, k
: u9 n( E- ~8 e(4)选择P的一个子集P‘,xn为P’的最优解 5 T% [4 b+ P2 P [4 H) H, L: y ]
@5 z& l: d7 P( e4 d, H S" F* l
// P’可根据问题特点,选择适当大小的子集。可按概率选择
. t8 e# k- l% i% p& B) Z
. A7 _4 A0 U0 t(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
o6 D1 x% [. z: \$ r% m% d! V3 o% N, v: O- @6 z4 q
// 重新计算P,f(x)为指标函数
. F, K9 W: {7 t( _) B8 I M3 f* k7 ?- U# {' K* ]; f6 ?
(6)否则P=P-P‘,转(2)1 d- {9 r- ~) i: t5 |
s5 s Q+ |# T `% ^# O. E
(7)End
9 V( N9 C2 x- Q$ I. ^* I7 D' t: q9 S; p1 N
6 T% l. L$ t- ](8)输出计算结果
! s7 R a$ x- t* b) k; k( }$ @
3 g; t1 d# X1 f5 u(9)结束6 |: C, a3 j% U4 o
. ~$ f8 ?5 |( t- C/ t/ I: r1 V" V6 l9 A7 {+ M2 {
局部搜索算法2——可变步长# \+ z' ^5 c# y
" l1 [' b+ a: p- ` - f( D8 k& g3 w7 O, y; h- V
8 v0 W7 Q# h; j$ K z
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
! b4 g( \, F% l9 {! p' k) N% Q8 Z3 S( ]. c# S3 D: l) u
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
}2 G& a$ F8 ?) e
/ }* G, A1 Z) Q5 ]3 [/ C( S8 A3 a(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
E; b! r. H2 `
; B+ a1 p, r( x(3)Begin
/ ?" \3 V6 j9 h" d; s; ^8 V7 h2 Q* V( c; t6 z( u; e* S
(4)选择P的一个子集P‘,xn为P’的最优解 , x6 X1 A% g9 O# S8 p
+ T& O) I- T' ]' Q
(5)如果f(xn)<f(xb),则xb=xn- S7 Q6 t% F4 U9 K6 R9 o7 _$ {, k
; z; f1 r. z5 y' Z' N7 H2 @(6)按某种策略改变步长,计算P=N(xb),转(2) 继续5 f7 O4 g& t+ v& [0 ]3 {2 I; ~3 K1 u
+ S' i" ]0 [2 ?" s$ r& c! S1 {
(7)否则P=P-P‘,转(2)
0 E" U/ e; \% }$ i" L. \* c5 P( e9 `- |- ]) i' ?/ G: d
(8)End( \3 u/ J) r6 g4 `' Z
& e! ? T& `- y9 M" U$ H' W(9)输出计算结果
. _( j* v* G5 X1 R. [# z( l' S7 i8 O `3 ~, W3 a* I
(10)结束" ]% c; i) s4 t0 O$ X/ l6 O! \
6 Y. P9 u+ d+ g3 E' f
, L! \! }2 T# u' d局部搜索算法3——多次起始点5 [$ i+ r2 I, b5 C
: i7 ~: j: S8 B8 ]- f
% k+ a" u! K6 ^
4 G {# F+ v7 O0 ?0 l) F1 H) C(1)k=09 o$ G* c1 a2 _$ E3 G( X, }
. s; w5 i$ e, s
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
c% a; A$ Y* h
; s2 F( I( ^+ U7 }4 L(3)如果不满足结束条件,则:- y; X# v/ ~' c2 u
|: `& M3 D: S' G" A2 j
(4)Begin x& I# n3 L# u8 l- o$ ^, D( x6 m
( b9 G4 S$ u9 g1 h. d! ~% z" D(5)选择P的一个子集P‘,xn为P’的最优解 T7 R0 N3 X& `/ j$ ^9 K( G6 R
: N J5 b5 L5 `" @" x- ?
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
* d3 T6 Z! \* A0 m' M9 n1 ?2 u& ~
(7)否则P=P-P‘,转(3)
4 H! S8 I$ n' ?" K' Q' ? V. ?
0 y% n4 S/ S7 j' s5 w: C' f) `* V(8)End
$ o% j8 h3 x9 O8 }& y( z" p3 Y, F. F. b& l" [' D
(9)k=k+16 \- v! I# z& d8 J5 v4 L5 |
+ G. Z0 U* }+ b: D, C x1 U9 q(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)3 l: N6 t1 J. d' Z7 t
V- Q1 k# k' ?/ b0 o1 s
(11)输出结果; @' q3 e+ K. k
. { v% P& X/ q0 H5 E. G, ~/ z(12)结束 |
zan
|