- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.: }2 I" I" z% B% u) q- L
目前使用较普遍的、有影响的, D* l0 `5 c" K
全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法; a' x7 M! n. h2 \* h1 @
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.. a0 L: @- _; ]% X j
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.8 k% \9 |* X$ I
此外,接触问题的并行计算也是不可忽视的研究内容: k( u7 [$ _% L$ N# v+ [; @$ ]
3 f' } u8 E6 K b7 l; I' t
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。6 v' r9 K7 g$ h1 z) p1 V7 o
8 @# k% h) n# S* {& i9 t3 x
局部搜索算法是从爬山法改进而来的。! F U, i% q/ @. b# B- ?* J
4 E! g( L( g2 A S爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
# t" V1 r3 g0 ]1 G2 L0 ~$ }/ p6 j8 S: H9 B1 n9 _
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。2 x9 Z' i- V0 Y0 ^$ d8 V6 f6 y
" K; ]0 H. U+ N/ h; _& A c* z' _
现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。* Y4 p$ o; b) H* l5 k* C- |
S/ ] Y% _& k, X1 b一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图( k8 J; Z' L7 s& p ?
; g `! H1 n5 P爬山算法
+ A% ?" j/ D& U$ M& R% Z6 ?. ]4 x; g8 y4 i- A+ O0 L/ {% j" l
1, n := s;+ {& x+ N) A+ m! B) S) [
+ J8 j1 c* M" q" y3 {$ u
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);$ F6 ?2 q- I/ f$ u; g
- N6 x: v7 `5 v+ O* p9 E
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
7 L& n' V$ p. T; t! U# s
' |# u; n% ^0 O+ T' S4, IF h(n)<h(nextn) THEN EXIT(Fail);& B$ I5 b4 l( J' }
) f2 A' J p0 S
5, n:=nextn;
0 u0 y4 i Y* ~
% }. D! `. H, t _5 w# B( n6, GO LOOP;
: f- c) `& W$ |9 O! y8 t" o* Q
. M. c( u9 i" M该算法在单峰的条件下,必能达到山顶。# ?( U% H& x/ l) _4 w
! g8 V7 a# f: S1 X1 m
局部搜索算法& a; U$ Q+ B: F* J9 C
2 X: d) a5 L. o8 M8 h
(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
$ z* Y) l! p3 u! W7 k' E3 @+ X+ j- `+ q' V1 ?0 ~2 \
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。
& p6 c* U( ^+ |% o8 r- h
$ W& x- H# j/ |0 u(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
7 E. ^1 w; U: y0 W6 }: l) }8 R! U8 w+ J3 q
(3)Begin
[! [6 E3 V4 u9 ?! w y+ {6 [
* g8 F( o( I1 ?+ R4 \( q(4)选择P的一个子集P‘,xn为P’的最优解
3 Y) X$ G2 ~7 ]! U6 ]5 L% ~; U- _2 R0 s
// P’可根据问题特点,选择适当大小的子集。可按概率选择
+ H, M# @' z* A# V% M+ _# |6 {* n; g q" a- u( i6 D9 o5 _, }7 ~) F
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
: ]( I1 S9 t0 b4 m. I) G; w R7 n* b' M" C n8 j
// 重新计算P,f(x)为指标函数
1 W% y( c% k: ^- _- ~2 D+ ]8 f2 c( v O
(6)否则P=P-P‘,转(2)+ u% r6 S0 S& r. C, B+ g
( ]* a7 y/ b8 p* P
(7)End9 d. }& p a0 }3 g( z. o
% c7 m' A, T. R. G(8)输出计算结果
_3 i0 c8 [% H7 d) s1 D: \$ q
. O* r& N( p6 ` N: _(9)结束
/ }0 U' t* V( Q# h& y3 x) ?" }) `& v
3 A$ i& q* T( h9 m: ?; y
局部搜索算法2——可变步长
" c4 x0 f m" X/ n; N$ C9 M' M+ q; J- ^" n" i9 T3 m, A
: G- k% h0 A" J2 I$ z, _
: k" v( e& N( Q4 [* l6 K- W7 l
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
, C+ D% V+ F! \: V+ H; h9 a1 I/ a- A) d, S; f: |
//D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。8 R0 X! V/ J7 p
' I, x# z) g2 u2 c
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
1 h+ S$ p& U( F9 ~- j4 r8 v# z' @" n! o: f$ L/ R9 v
(3)Begin
j, ~. e& t. i4 k0 Y3 V
& G0 U0 J4 K% g- ?! Q(4)选择P的一个子集P‘,xn为P’的最优解 ( [0 x. b" \$ e% x$ E9 Z
# r" F( {. H5 W- a& ^
(5)如果f(xn)<f(xb),则xb=xn) D* F1 \+ \3 ?$ z: B$ \
w1 x& E( V" v+ v+ W0 p
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续
# B K5 i0 c) u. o
. d" y3 p+ a- G, e2 Y" n. L" c( \. R(7)否则P=P-P‘,转(2) $ g- F( v; m5 e# w* {3 D+ q3 V: z6 B* x
1 T. W' A E% `/ v
(8)End
2 C6 X/ f: x& D+ ^+ P7 V
5 ~. ]( k5 G2 Y, p' Q(9)输出计算结果
% c8 l9 l+ E! ` U6 U; v* M n$ n7 }+ t8 }/ k# _
(10)结束4 T( W& q/ W. l; t9 ?3 `' m
9 y: W6 ?% z! d/ _
8 j2 i/ E9 Y& D5 S7 E9 t局部搜索算法3——多次起始点# i6 b* z& k2 J8 O, A
) d7 a9 K) m, T2 \5 c' n $ }* H5 q3 E' z7 H9 h9 M
- h* C; e3 t% k3 Y(1)k=0$ y# r6 ~; O+ i( d
9 C# V9 |- k' ? r" e(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
2 D. @, T8 S" {( Z+ Q: ?: H
/ v; W% {8 j6 h# V- ~) p(3)如果不满足结束条件,则:# ]: W, l' k s
; v* C9 x+ l a9 C) x(4)Begin% a2 F+ H2 L' {5 ^8 @
$ O4 p+ W P. u E(5)选择P的一个子集P‘,xn为P’的最优解
( {, n5 g; h+ O; c: ^+ j
5 @- V) i8 i6 r. Y. s(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)& U' a' @6 Q5 |7 O: G0 T
# O7 r. s2 f4 q
(7)否则P=P-P‘,转(3)
! O! P1 Y6 |3 b, d$ k/ n* G" o; o; t
(8)End
) G: O4 N0 A. @0 `5 X- M5 a
2 ~; c% d2 Y- d0 } J(9)k=k+1$ K: s) \9 z# C
1 G$ g+ M9 S7 S3 I9 a4 w- k
(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
1 P; e Q) L2 b$ U" T, _4 j: U6 a& a$ Q$ m
(11)输出结果
( I$ Z7 q' s/ |$ C7 t, M3 L# B) ^" C
5 R8 G7 A) } X2 r$ |. P(12)结束 |
zan
|