- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.
; f4 n" m. S5 q( g& n4 b$ Y目前使用较普遍的、有影响的7 D4 ]! } O# P7 o
全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;
- i2 L. y4 Y+ T0 n& w局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.- B& [+ G2 t, Q4 |1 V9 |' T
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.
* Z1 q4 K3 o5 f此外,接触问题的并行计算也是不可忽视的研究内容+ [& v4 e7 R7 f8 f7 H, a
6 r" J; e% `1 K! s4 G5 e5 u局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
( J3 i4 F" |, q9 {
7 Y, B4 b4 L0 M% J! ~, c局部搜索算法是从爬山法改进而来的。
9 K% `6 G, c/ N$ G8 m; c* r. Q1 y6 n2 \/ @+ s5 S" P
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
$ P! a4 i0 `0 p2 ?5 _2 K0 a. j! @5 t' f" C( [3 y$ @
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。
! S% _! n3 O, \, a+ M! ^+ D- f# ^- [" o$ B6 V: k) O
现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。
* u9 r9 ]7 _( i# T* f- e, o
' f6 L( ^ {6 Z: C4 m5 |一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
; c; X9 X5 S& ]* W" A7 K
0 ]: _ [6 }, @# \爬山算法
4 {; K3 b5 o3 a% V: [3 P/ d' P# q4 R
1, n := s;
0 v# a, R% {9 y# }2 v
T6 ~5 o+ m8 H! |2 Y9 V! @2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);# b7 m4 R/ _* Y. y1 B. p0 G: g
9 ~* k6 B3 Y) x* ?: T, Z) s
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}4 G! Q! \9 d5 e) L$ R/ f
$ w; d U+ v3 b& \
4, IF h(n)<h(nextn) THEN EXIT(Fail);9 S) _4 a" O- K5 m6 P0 \
" g: @8 J0 y5 O& H, k
5, n:=nextn;
1 u+ B9 ~' G x! R" ?8 t" q. W, Z, z: c/ _2 Z# a- C/ _* w
6, GO LOOP;* n, G/ U9 n! m' D# M6 s& b, C) H
5 |' Q P) b$ I
该算法在单峰的条件下,必能达到山顶。
) {3 g J2 t) ?& ~% b6 M' z! p s* P1 F3 K- t' Q
局部搜索算法/ \+ {* `$ h. b! }" Q& E
6 z- ]. M/ _0 t8 u(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
& N4 S R5 V0 r+ X2 R! y: T; `; d# J
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。+ [0 y- `" Q9 D/ e+ }
1 o: R; _: N) G* V8 N
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
% k; N1 ]" S( q
, \+ }; [, p3 g, z3 j" [0 s(3)Begin) q+ l" S( c2 U8 a$ {6 P1 ~
; _7 [2 x' o7 k. T$ r(4)选择P的一个子集P‘,xn为P’的最优解 8 I% |; m+ |' }% F
: u* e9 |% p! K$ f3 h0 j R // P’可根据问题特点,选择适当大小的子集。可按概率选择
& f D4 ^1 a4 G* X7 z- D# G( q* U4 g7 _8 y* g5 W4 r
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)+ k. {: c/ A, C5 J& ^
( j; ~- ]( g3 e" o0 Y5 F$ ~ // 重新计算P,f(x)为指标函数- f7 O6 u- |. y; x0 ]
" U' ?+ M& K2 y
(6)否则P=P-P‘,转(2)
4 n& m' f1 B' I3 r9 p' z
, F# T" z0 j# S0 p. F; ?7 l/ r9 C* I5 V(7)End0 T- T: Z, O" J8 ]2 }
! ` O& h N3 ]' N* w3 n3 z& J* C, m
(8)输出计算结果
' j% A* r) @& R( O8 ~
3 s" V# D; m" F% C: ^1 Y(9)结束
: U$ \4 H! h7 i" i4 Q! }
- U3 d+ p6 Z j) R: c3 N+ j( o
' L* M0 k/ A1 X- d" s4 g/ N& |. Z局部搜索算法2——可变步长
@" O0 \$ T, X3 |! Q1 ]
u9 y2 K# z6 N/ {1 P' j 0 _3 J% [# h) w2 V, @3 ^
) Q# O- u6 {+ J(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);5 m* Y- ]# L9 J, q6 f5 K7 s/ s6 M
* X/ T% [/ ~4 Y2 [0 ^ t //D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。$ F( C _4 W) q( r$ M
" o& P7 s8 p" q& R) N" u1 S
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等' n ~1 R+ \, g) J0 l- ]
1 d7 ^, b( J$ x" ^: d(3)Begin6 R( N( o% G+ f/ b( x* k
2 k# T2 {) Y7 Y1 T/ J' V( Y
(4)选择P的一个子集P‘,xn为P’的最优解 : Y6 e- t/ a$ a1 s6 u
5 P4 W& k" B. p6 H2 z(5)如果f(xn)<f(xb),则xb=xn
( h$ f* X1 e# i6 B9 N! `+ t, c. k, T( w5 r& v8 D6 p: }
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续
9 N" a, L9 W6 ?2 @, x' D; B8 R, ?# p4 S+ C
(7)否则P=P-P‘,转(2)
5 w+ q2 P5 E/ g! [% L, a& w
/ a7 b: ~5 f; V4 |3 Z(8)End8 p( n" g% ]7 w; i1 A$ r" U
d5 M: ^, _0 L, q$ s9 ]6 j
(9)输出计算结果8 V/ s7 I# u* F* j# ]
' d s* j% w. {8 z! E& A
(10)结束+ _) E9 L! j) J) X5 e( _4 p
0 [0 A, c0 ^* r; p 4 F# o6 O: F8 k% A+ m, \
局部搜索算法3——多次起始点
3 u5 ^, l) q* h5 p& z
+ p3 t! Z+ c+ z9 u$ \. H& |1 H8 Z
, j2 `* b# m4 ~+ Z8 f1 _& K& D
+ R# |- S3 W9 j B(1)k=0: B3 _( K8 L: L' L2 E# h
; c# y: _+ Z3 Y) {. c
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
2 S+ j5 @9 f) [ L t c @, Z
; G9 {/ @0 Q2 o5 [# ^! ?) e(3)如果不满足结束条件,则:4 \' w' K! X+ h# ?
$ F8 ?4 A( u; }2 `) r! |+ e(4)Begin
4 T. W }9 B% H1 r! }1 l0 h0 _
+ F7 U2 i+ ^2 E) V(5)选择P的一个子集P‘,xn为P’的最优解
6 }& {/ \+ m8 I; U9 s. W/ b$ J) G4 P4 N
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3): ]7 M6 V2 u% `. ?, _
" H+ |) k+ z2 H5 L9 d! K
(7)否则P=P-P‘,转(3)
8 l7 V: e8 j3 i) Z6 p# l
" W0 V3 t0 Z: m8 I* p(8)End3 z: F/ l8 W9 H. U: a4 ^
* G7 V- p- s6 |6 \$ n( y(9)k=k+1
|& K4 H- B- y7 \6 s* X; [( F) X7 U% p- _+ X" p
(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
% p/ o9 b, x9 B
, d9 k! k( I+ i9 n3 A4 j) v- D(11)输出结果
# j) V: e" H% ^# V O7 ?9 k
8 I( V7 x( Z; D' b(12)结束 |
zan
|