- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.' u6 k t0 ]( {
目前使用较普遍的、有影响的
( c5 i/ U g" J/ k- v+ X全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;* a0 ?8 x, P* n8 C6 X( I
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.
5 U# A; @8 F+ v, I- A' C接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.$ Y* u; _* p' _
此外,接触问题的并行计算也是不可忽视的研究内容
& s# v* K! _/ e1 r/ v; L3 d1 J+ M6 y% ~, o0 Y2 x
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
1 p* S6 y L: z' [1 t* m" F# j5 c* c& ?1 M% ^
局部搜索算法是从爬山法改进而来的。- K' ?6 G+ a# Q+ _- Q$ G" {
' _: }! M5 T0 A m/ A爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。: i/ E( w8 a7 }6 r
- K+ V$ k. ~1 @局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。
2 q3 ?) O5 F0 \2 L: D
1 i9 }# C2 J( c& ?6 c现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。
" z. o; d* L! s+ z; O
$ z! w6 }5 j# y一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
( |" S+ N/ X) Z# w) L7 b) W
$ }8 }! `! j, s* X7 Y6 T+ M( f! X爬山算法& A5 E8 `5 k. ]9 ~
5 i2 N# A& o( P/ N0 d- N0 ~
1, n := s;3 S( u q! D6 A* `! W! [. U4 K
7 U0 n1 i) P% U6 z y' O2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);
2 a( d2 [$ t2 X! i! ~: t. @
. b3 t3 d9 t0 d k. ` l3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}. @- [# q' q& ^# T" B& V0 x
3 w: r+ A( T& q! Q0 d6 Z3 O4, IF h(n)<h(nextn) THEN EXIT(Fail);
% U7 G# f0 s& y0 r% ]5 d
- V( H+ T, j5 |2 h5, n:=nextn;
. n6 P* Y. f0 g5 \1 `, B7 G6 f( \3 k( F% R$ y
6, GO LOOP;
/ ~1 o* a& \/ k7 Q; Z( Z
7 _0 q0 O! k I: k/ _该算法在单峰的条件下,必能达到山顶。" V1 v" K: B k8 ~
2 Q" i9 Q% T; c" D0 X: l1 u/ P局部搜索算法
, [ n( o& I2 \( F8 _7 i+ B
* F; Z+ i8 n% Q% @/ ]5 T' t(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
) @. T4 Y8 ?( f2 h' r; A u
" ?5 G X9 x7 @8 O* I //D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。% e7 t5 T6 K& d7 ?( b( i
' n2 k2 w* N3 s% O4 M+ x( R
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
3 T+ c- \0 |+ t' D* \6 T( j, Q6 B) | F8 g
(3)Begin
( H& \+ g# n2 k1 l$ k
[! c5 p4 r0 ]+ D(4)选择P的一个子集P‘,xn为P’的最优解
! j& S" v# ~0 W6 Y1 o* S$ P5 b
' x5 `' T0 p( d/ o; f: t // P’可根据问题特点,选择适当大小的子集。可按概率选择! ?+ k4 a3 A' e6 m: f
4 U2 j8 C/ H8 L* v$ f7 t
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
5 R, |4 K; [2 e8 Z
2 B2 W# ~! t. F6 M // 重新计算P,f(x)为指标函数9 L# C$ g: c- k" S" p/ E$ Q! k
. x+ G, E( D+ P2 Q% o
(6)否则P=P-P‘,转(2)* h! j9 o) j3 q5 D8 n
6 L, b3 f9 s* H8 }! q
(7)End2 _& R5 B0 h" N* \- Z+ y6 X
( t9 Q( S* G, {/ @, @(8)输出计算结果
' i+ P4 t d6 P+ m8 Z9 \0 e& F8 ~# I9 k( h0 N) F
(9)结束, v; m2 M2 H# e x- y8 n& U. v$ I- c
6 t i S8 J* @- k# E1 H, l1 r7 z; ^
局部搜索算法2——可变步长3 J: C. n( q" e9 U. p7 L
4 g3 P& p1 y1 u. s
; \* I1 k8 ?5 I) H& M" P
) ^1 V1 E' y' G3 ~6 U1 }( C; h(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);" R3 i" K3 f+ ~% T* J4 O0 p5 r# t! F( p
9 l6 k! f) `, Q% P# ~5 x0 o( ?
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
+ _, X# }" {) s0 W1 b0 v: d3 D4 S- m' U* i' M" O' e3 f
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
3 \& X$ z8 s/ ^) U. E) a' f j m# R. d; i1 a
(3)Begin
z/ a0 w/ z; _* E+ D! m
' w% N3 @) y* Y. S/ A(4)选择P的一个子集P‘,xn为P’的最优解
; o6 |4 h# ?: ~; V/ Q# [0 B! h8 @' n7 e9 |# O+ Z6 i+ w- o% w. U
(5)如果f(xn)<f(xb),则xb=xn
7 U, v I7 r* n2 p! ^; W. H) G4 P K9 n/ `+ \$ o h
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续- M& y ?: h1 c
' i7 ^7 }9 `' S" V1 H(7)否则P=P-P‘,转(2) 5 e( j! n# |' T0 d; c
( J, q% a6 U! D. v' k; M" S(8)End
5 M6 D& D$ v+ [9 v; U2 G! l$ b! ]9 ^8 X
(9)输出计算结果) |* m Z& R* Z( u3 L# T
2 ^% x0 p. R4 T' J, W
(10)结束
. d* ]' b: v" }. |! m/ ^0 l0 }2 ^0 f, s7 q3 C
3 U8 x* n$ o/ R" @" r h
局部搜索算法3——多次起始点+ Q* H J( R7 x7 q$ S& ]5 O
3 r* C6 l \1 c8 P2 X" k" H + _5 M: }' q. r. G& q2 V7 b5 K& `
0 e' y- K$ o! Z; X/ \0 D5 i(1)k=0) M0 A: ]6 v# R8 N9 M' {; C
; j0 W. K% N/ w$ b+ M
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
1 b& a$ }7 Y$ z3 |+ i/ x! m9 W2 v+ K3 s: p0 s A0 H
(3)如果不满足结束条件,则:
. ]9 n2 n: g9 V+ ]; x( N% X# Z! u0 c1 _' o# [/ \$ ]) \
(4)Begin1 f0 v. m% J+ L8 Q
0 Y, i B) x& w8 D% E7 @& H# y
(5)选择P的一个子集P‘,xn为P’的最优解 3 g9 W5 ?/ ]: ~1 J# G
% T5 f2 ~$ I& P8 r" ]1 C(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
' t- A8 n5 l! q' v% w6 r( _% I: x# H* S7 J
(7)否则P=P-P‘,转(3)
4 d; [( V5 H: J1 m
! z9 A, D* C' g: _# `(8)End
% @; l* [; u& f1 u$ m4 k+ B1 @7 o, i6 C) G g+ L3 y. W* i
(9)k=k+1' |+ ?& M; ] a6 E
! K. ] X2 ~" g+ E(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
1 m3 p+ ]. u9 \, d, l0 r' _, d$ m% {: ~4 y) y) R6 F
(11)输出结果; \: H) F9 j, k& |( R
! Z0 q- ]0 S* _1 l) s* l(12)结束 |
zan
|