- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.
9 F1 o# o2 A# ~) m: z目前使用较普遍的、有影响的
: p; I% b) f O全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;8 e I O3 x' d. {, ^( J
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.- \9 g6 `- Y7 p8 I) n
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.9 B$ e* Q/ K: j" X
此外,接触问题的并行计算也是不可忽视的研究内容, G- {( a. ^5 P6 a! w+ T, K1 I
4 R/ J1 T; A& u- b" l
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
/ ^' G3 E$ t4 Z1 \
* ^5 U* [' p) a局部搜索算法是从爬山法改进而来的。
5 h5 N+ T3 {1 N* n$ l+ {# v/ w: @, o6 M; g5 F) ^. o8 m
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。2 v' f+ G( s0 J" Z/ E
0 }9 Z# \* z9 k
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。: c( s' {% v2 x
2 y) J/ Y+ }: s, V现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。1 k. r4 X3 }1 l
) w" |- C; U3 [- c* a" @2 e
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图0 e; A) Y% [- b; H0 q, i2 t8 G
8 l* v" J R5 c- D* D: \
爬山算法
4 r/ k2 ~2 t4 I |+ s( P& Q$ S3 x( m8 f7 |
1, n := s;1 o4 ~# u1 e# \
+ L8 N! _% e3 N; _' y3 |0 ?
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);
* h, Q9 b0 d2 q5 t- P0 R; n5 U2 n# z/ M
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
% a- o; ? p1 x, I; h( |$ i" Y: P
# ~* V4 L, U* S8 J/ }4, IF h(n)<h(nextn) THEN EXIT(Fail);
! u! J6 S. M: g `4 n9 e. V# Y
+ Q ~0 q0 \: g) Y+ i% t* P5, n:=nextn;2 r- Z5 f" u2 ?; Q. _& M
# d2 `% c8 C, s* I' p I; D6, GO LOOP;( k& b8 D1 ]* q8 o$ v, J6 t" o
' u6 e; d; ]! Z( j; x% y
该算法在单峰的条件下,必能达到山顶。
0 s- ^1 z. v) n. [
) M3 t" {/ u& u. F, i局部搜索算法+ S- R8 I4 Z% Q
. H5 j/ g, p" Q4 q' f1 z
(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
: Y. m. S3 p- g7 o) O& a
2 `) J. C; g( _5 \, W //D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。$ ~# c H/ D0 V( g$ d5 C- ~0 x: F
" [, B* i, G5 ~# D4 y& N* g" F(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等5 v7 R; g( r* y& ^) r, A8 |. ^3 a
5 d/ S# U. J+ Y" e
(3)Begin- A) ?+ H) G% o& v5 W
9 u/ @. H: G6 U1 D(4)选择P的一个子集P‘,xn为P’的最优解 ( r) N6 g- r* H' d$ J% a6 @
4 X8 h& a; J' {7 R+ |4 I7 B
// P’可根据问题特点,选择适当大小的子集。可按概率选择9 X' v9 w* L2 N9 X, D/ B+ o6 j
2 N/ k) X2 C6 [: w; g3 r
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)$ ]/ E* E# u; I) ]8 f
2 b& Q7 l' `, n2 M // 重新计算P,f(x)为指标函数6 C" U/ w2 \1 H0 p# }' I
6 y+ T& N, q0 R' X4 ]7 a# t- o2 g
(6)否则P=P-P‘,转(2)
* Y0 f+ [9 P5 U( e1 T* w
m/ \3 V& r; q(7)End: L5 b" [! g1 M1 H* f
% w% ?; [( U1 M- Y) A
(8)输出计算结果' |; \; U: u/ z5 c3 _ r) ^
2 d2 y% |! [$ z/ A
(9)结束* y( Y- Y1 {, `6 u9 i- E
2 C3 G) l$ b3 v7 k% v! V) t4 T' F3 u t v# _( M2 w
局部搜索算法2——可变步长
( u. A/ j' P+ ^- g' @' {( l7 F4 N9 F
: f8 n a. E2 R0 Q/ x' L: a4 i) }
+ L% M! b4 M$ [8 [ a% e6 Y; Q
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
/ P/ [5 ~% ~, e
4 K" M. Z3 V9 t, N& ` //D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
: U) ^3 }4 r0 q- s6 ~- p% j1 E) B
7 q$ `9 r1 ^9 [# K9 ]# m! `- P(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
" e7 e" x. Z0 V3 p4 e: g1 t2 @% ]. g
' w: ~3 e' @/ n(3)Begin
$ A# y5 H5 s4 Q3 M2 _0 ^
9 M6 e" z- u, {* g0 ~(4)选择P的一个子集P‘,xn为P’的最优解
7 X- u6 q; T& [6 Q, V& Y6 l( g- K2 W2 y9 M* a9 B
(5)如果f(xn)<f(xb),则xb=xn
# \& _2 q; r+ \6 Q. m/ ~
2 X( z- O/ h( y# R+ E- u5 {: S/ j(6)按某种策略改变步长,计算P=N(xb),转(2) 继续' J& N: i: _: z( V" D' K; H
" T* c/ k' t3 k8 b# G& N- c
(7)否则P=P-P‘,转(2)
- t1 V3 E3 [0 r8 V, ]' K- p# B; r3 N; s j, @$ Z4 z6 S$ c
(8)End4 o2 [, c8 c( i" s
& l3 ^* A$ L) X3 g4 M9 {3 I8 M
(9)输出计算结果
& a2 z/ h/ E8 }7 a+ p' z# E7 Y( Q8 b6 C& b( S$ L6 }) _
(10)结束
* x- P- u* I& U
( [; v1 h% d. y& e
' z8 {$ a) A/ G- @局部搜索算法3——多次起始点& J$ o. E* h! i( L) H# p
) a) ]* c) P; t o. O% v
8 S2 n* S" D# z. w6 G
' D( z2 a3 h# h/ V1 l(1)k=0
9 S1 D1 p/ ?: Q: y8 t* ]. k; S; M, g) P& S, O! s" m! E
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);4 w. z/ A5 ]) b$ y) _% b
& e; s7 i$ e' n7 ?
(3)如果不满足结束条件,则:
. c8 w) V# l; w: q6 p% I9 K
, e- d: @ X, U1 `' ~1 L4 _0 J(4)Begin6 H( |- @; q5 d0 W2 f0 D
. l' A, B* Z1 \(5)选择P的一个子集P‘,xn为P’的最优解 - w1 }5 U0 ?8 N' H2 M) X
( t9 u/ y- ?7 v% b# e" I4 r(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)2 p5 a: ]; c' \, }# R) ?! ]/ l
+ w* r" R, z$ f4 P( y(7)否则P=P-P‘,转(3)
, L3 Q2 R# ~4 b4 Y
" I( a7 H& o, z1 E5 J! P; L(8)End9 |# T) @$ e" z( f( |
X* p% o. c1 u
(9)k=k+1( N u2 u3 {, g a# g* ?
+ M% P5 c3 w/ J( ]0 F/ i% ]3 ]9 O' k(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2); V* p+ S* J8 m
/ x& ~* ]6 {/ G4 Q
(11)输出结果
- Y2 i, O/ r- u, |' M2 ~- B$ B/ j) N9 I/ s/ f
(12)结束 |
zan
|