- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.
* ]! i* F4 r! a" C8 i目前使用较普遍的、有影响的
* |0 N3 ]5 p0 R3 ]; k0 D全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;- S$ L7 E4 \/ i7 k3 A
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.- W% o' x9 v1 X' j- e. j: r3 X. H
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.) z! O7 v( Q' N6 i& o
此外,接触问题的并行计算也是不可忽视的研究内容
U7 f& y$ H7 D) }, M' ^3 c6 ?6 |* Z6 [ o9 Q8 _1 X: e
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
" O0 m( r% H4 z0 q" H4 E' Z0 F
1 @' q1 J: O' T* O* a! m! J: y局部搜索算法是从爬山法改进而来的。
& b) b, y" G( ~) G: }7 |5 h. K1 i) ~5 ], ~) d; r0 U: C3 Y
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
. a4 X. f4 u9 F3 H2 o& b) u3 n$ H/ n
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。
I; Q/ B' W+ q# u5 k% x$ p; a8 r" D0 t5 l* h3 e
现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。
2 d- A: ]0 g) {$ c$ ]/ G2 u v" I4 z+ f y e" O1 n9 F: p' n
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
" R6 n& L8 N: P9 ]! U Z
, Q2 n, d5 \7 { J+ J/ g爬山算法
+ m5 b8 D8 @ b! o
; v8 F# l# O% e# o1, n := s;8 i& j0 P. B* \! S5 M
. _1 I/ Q3 @* h3 u9 D( ^% r" ]' n I5 n2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);- T& q6 ^* f9 ~3 c7 J
* V/ X2 G- s' f* Z7 ?' P
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}& k9 @- ^% |8 h
2 V; I4 I! a, Y. e3 P# i7 b$ ~
4, IF h(n)<h(nextn) THEN EXIT(Fail);
2 I+ e; E) C& t; @
) v, }% T" z" P1 v8 i k0 U: l p9 P5, n:=nextn;
' { i& j K# H l5 ~ Y/ s; G
4 v/ `% Y# R( k \# g( C6, GO LOOP;
4 X" j- U+ k: Y: _" l; T1 _) `% ~; ^ ]8 v5 W- c
该算法在单峰的条件下,必能达到山顶。
' N% h# j+ Q/ ]6 V. u9 K" s& ]$ @5 }( W
局部搜索算法+ T+ b% H9 H' B' q1 K, e7 I8 \
$ p0 |7 r! w* D) F6 C/ K7 l(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);8 O1 b* h) l! x4 D
3 \6 a9 \1 S8 Q
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。0 K0 r P. Q7 M7 ~% d
4 j7 U( d6 y0 q$ b; ^4 S
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
& k# ^& x' I' F( O8 A' |5 E# k! B& U. X# I! v9 S
(3)Begin
* K/ {* c3 K8 j/ y! a4 x
7 ~) u _$ }, c1 [( F5 ^(4)选择P的一个子集P‘,xn为P’的最优解
- t& ]0 u0 w* V4 d1 X; Z! u
5 a8 S+ v t" Y8 X. e2 F' r- Q6 e; c0 d // P’可根据问题特点,选择适当大小的子集。可按概率选择
' }: q* N! a* ^/ O |' v
: e! K3 ]# k# I0 \, M(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
& D+ k" v: u: y6 Z0 k# G- j' E5 l$ ~5 v1 k
// 重新计算P,f(x)为指标函数
7 J6 H& n; H% L9 t: f6 t; J8 X8 q) L$ v. @6 ?* M" \( K
(6)否则P=P-P‘,转(2)
- x$ i* y' D3 e$ j7 ?- f
4 @1 U) H/ } ~+ V- j" [% ^(7)End
% v/ b7 \& h6 H0 t2 y' t* q1 E6 c% C& v' q1 u1 f. @" X
(8)输出计算结果
% i. f4 H- N* J T$ b# J) t7 A7 G* h4 H9 }
(9)结束
# m2 ]2 p$ P* z$ Q0 s- J. C
8 ?8 {6 X2 b- Z1 [8 z% D0 I
; X" W6 i q9 t1 [# l" N局部搜索算法2——可变步长
/ E) p4 Z3 \* O! @# @: X6 \' z) i& ^) m- f6 l* D4 v- }: Q0 {6 d( B
! w! y/ o8 P f* U7 x9 t
1 {1 f- Z# f* M `
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);/ U4 q; X) O) Y7 h7 }' P
- l3 G' d3 y6 D/ ]7 i. \/ `
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
, b' V, ^2 s2 n* I4 w" I
# v9 Z+ A, n, @% A4 B(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等, Y/ }7 I( {2 t7 f0 X
+ }, v2 \- f: T3 y+ C
(3)Begin! u( \" F4 o2 b c; y) j
1 I+ x# I% V) |- G5 ~(4)选择P的一个子集P‘,xn为P’的最优解
1 f+ F) M( V k2 U
d, u) D$ V5 J' L% c' d(5)如果f(xn)<f(xb),则xb=xn' N' F+ O7 S5 x. a9 x, C
. s6 `0 o7 a) P. o) v
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续/ f7 p& ~6 O f
2 \; |0 j. f7 y$ C: H% h
(7)否则P=P-P‘,转(2)
3 ~& ~ e% ], ]4 d! w4 X, O; m( B0 q
(8)End
( W4 U1 ]% n" {& p& @
. s0 I$ W. j1 _; `, B8 } R(9)输出计算结果
; }- u( s- [$ _7 d" V0 J" h- m/ Z# b7 i* x0 O+ Q
(10)结束0 A5 Y$ ~3 N6 e( L7 i) p1 `
6 [' x/ f q, ~7 U$ m
( o0 w( |4 J7 a& C1 t# N8 Z2 Q局部搜索算法3——多次起始点% L' j- M" F4 c# P
7 a4 R5 ]! I8 U5 l; o- L
1 s1 }- M1 K2 e. m9 F) M5 d) F1 z$ I: A$ t
(1)k=0( o9 w, z7 u' ]& o
* C9 x9 L: e) |, |(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);6 Y- T1 H. A3 f4 y7 F
3 \7 p; _4 ]) F# ~(3)如果不满足结束条件,则:: u" \ P: G% {" M; @# l7 ^+ W0 H/ m
; R& j/ F. Y5 T7 O" T% u(4)Begin
! A0 p% w8 b3 r- n+ V" T# p
) r' [6 ~( `7 ^- O$ D. i(5)选择P的一个子集P‘,xn为P’的最优解
, J8 H9 B0 [3 k/ b! m4 p/ q; m4 |: Q) u2 ^
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
0 [" G5 q& v! p% q$ \
* ] ]( w H( @) q" I4 W+ n(7)否则P=P-P‘,转(3): @3 |5 w# f9 A) h
" a0 Q6 D/ p2 {- K0 b(8)End, y4 g0 G* p$ i, E0 _" v! @
' c, Y9 {3 `5 n* J, U1 @) U
(9)k=k+1
5 j4 ?- _2 L" F8 u' ?& q; X$ F; Q
- D" O# X* E1 s {7 ]9 z(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)9 ?0 H0 T, u3 b% s+ x4 R6 E
: G! |9 e/ S& H0 B% }: p(11)输出结果
' {3 x8 Q) {' O6 |0 w7 m: C, I& L2 z+ G! [" M
(12)结束 |
zan
|