- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.
. T+ V* |! a6 R/ n目前使用较普遍的、有影响的
* Q: H! O4 R P+ p全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;
7 j( c) C' \! G0 f局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.
6 {: u x( r' w: l0 Z接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.
4 R# M& E7 r1 |% }9 C此外,接触问题的并行计算也是不可忽视的研究内容1 V7 m+ R- [6 U0 x
8 v2 ?4 a- A1 D6 x# r% {8 N
局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
& B% ^9 D* w0 d) v: P+ p( F; j6 H: `9 ?0 ]* `
局部搜索算法是从爬山法改进而来的。
9 u7 _' d( u: ?& e; `) Z" K$ ~4 E7 l/ ^8 p4 U
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。: B, U8 s% ?2 Q: R( `5 m- }. c
% @) }* q$ k0 |& f; l
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。( J$ m* H) H4 c* ~
: w2 G1 j% s: } v现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。/ B! k$ [- B* E* y
) G$ u9 S, ^2 d" V& D; k一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
% C; m' H' o' S) e% Z C6 M7 l& @" Y4 x+ H! F* m
爬山算法
0 C! z' h8 V5 s5 W9 u2 G+ { o
5 q# c' d% O( q0 k# `1, n := s;. O& Q3 k/ g; ?8 j+ F3 b$ i- X
3 ^4 e4 B! @8 _1 s) G2 c+ O
2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);
9 q3 b8 \. P2 ?
. y6 _* x/ R, J7 f9 q1 \3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}
9 X% A; _# o% y) [+ `
" C3 w" @2 p) B. t7 F1 ?# d; N3 T4, IF h(n)<h(nextn) THEN EXIT(Fail);
5 B4 g3 W6 B. f ~, }
2 o, b5 T. [# y. X5, n:=nextn;
L+ O. X9 W* f$ Z- l4 @$ ~$ ]' }9 {! Z' e/ L7 _% @
6, GO LOOP;$ G7 d7 _+ v% q$ Z
3 {! _' H& N( E* X5 D1 _1 I6 e9 _该算法在单峰的条件下,必能达到山顶。
2 H. T/ g# c5 N% C( C8 M
0 B. F% M; h; U. I1 n; B局部搜索算法
" q+ ?4 N# ~: q: l8 _2 R& y
9 }0 M$ }3 `9 [1 I. }0 n: K(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
9 D( y6 }& k3 a3 `) y) s7 r
# w1 l6 r( E! o //D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。
( I; ^$ a' W, B" W, b2 j+ X
7 U) W# H4 [2 L- Y( y. ?" [2 a }(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等+ ?3 l% r% c# u3 B& p
0 z9 K/ m' T: P7 ]" F! w+ h
(3)Begin
- ~$ N2 ?2 a7 j& M, t b3 n1 o2 C8 A# c! Y) L
(4)选择P的一个子集P‘,xn为P’的最优解 $ i$ r6 n& n( x3 b
8 }$ K7 K/ O' u: C! m" Y
// P’可根据问题特点,选择适当大小的子集。可按概率选择
% `" _. [5 p0 p. `" w. S& G0 z# q! B; `2 F9 ]1 w: H+ ^0 U
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)# B# a+ _, h1 M
8 n, K& ~ K! j& ?0 r7 T S // 重新计算P,f(x)为指标函数4 m- I0 [! |1 |4 w% i, _
. N# W2 O: E/ n3 {8 c) L8 ?5 \2 n(6)否则P=P-P‘,转(2)0 i, m+ \ w1 m7 O* E' ]
1 T+ y7 T' E; J7 G+ f+ g( z6 ?6 [ `(7)End
& q& |0 q2 m! s
. p; \" P( J* }) w7 U(8)输出计算结果/ e8 Y: b7 }+ v/ A$ M' W; z
# |' o( ]( Z9 \6 e/ [
(9)结束
- [9 l+ \$ X2 ?) w+ e- G- p5 W& e. u& z
7 ~: x7 S+ p, o' c; ?/ D% ?8 p
局部搜索算法2——可变步长
9 }4 Z) x, ^$ [5 ^: v( `+ h8 _5 f
2 |% q' X/ T+ B: ~: O2 p3 V
/ M% a& \; e0 ?/ {4 c(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);/ g$ y2 D# y5 b& L+ }6 {% |# ~2 h" l
5 O# K3 Z% M8 {) {6 x/ D( w //D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。9 f3 y. M1 r$ H( m) U
' F( X8 [4 W3 P1 o1 e$ ?6 a0 J
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
: }7 D- b" Y0 A7 G& R W3 P3 E: @
(3)Begin
$ `7 D% j, s4 y; v. O0 V$ Z& L2 i4 ~/ V$ e3 \: N
(4)选择P的一个子集P‘,xn为P’的最优解
! ~% D& o# |6 u$ r8 l7 N* L6 g/ {; E5 [4 ]
(5)如果f(xn)<f(xb),则xb=xn
% n: C) u5 X* l0 L# e' p! j0 a0 t. x, Y% Y7 S/ i3 Y3 r
(6)按某种策略改变步长,计算P=N(xb),转(2) 继续( P! p/ t; G8 s p" v2 ^
- L+ o) y/ j8 H' N(7)否则P=P-P‘,转(2)
- @! p0 \! @! u6 F, M3 ^. I$ \, K) J6 Y8 { B+ k1 `$ t9 l
(8)End
( j% q% |4 i$ i4 m; Q5 N2 G5 ?2 N5 X( M
(9)输出计算结果
3 K) @0 R' ]7 y
* q7 }8 H# _/ R% P" m(10)结束 f- z: l- D: x% z
6 S' e w3 B' @& N) k5 ^! r
7 X# r! w! ]- ^1 p! }
局部搜索算法3——多次起始点
9 {" |, e+ y) U* E& |
5 [. `2 E) U9 B) e6 J4 d ' B t3 O, A4 m) O0 g+ n$ ~5 N
4 H5 {; o4 n' z
(1)k=03 |. m% O9 `" h3 o4 F1 {. z- H# f% j
% ]+ k t5 g5 R
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);- F) d/ U4 c" F* {% y
0 q) T: O: J/ k+ H5 T ^( _% u
(3)如果不满足结束条件,则:
. J5 O. r. y0 w+ v* Y( w! O$ i: N; U
(4)Begin
0 G( R1 P) u; p M' @8 `; T7 N$ h
3 t8 z* u7 C* N) e3 A* c(5)选择P的一个子集P‘,xn为P’的最优解 ! ^* i1 v% S4 }
. u' R2 Q, I) X6 ]$ C
(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)5 v& i+ Z+ e) @) p# T( Y+ u
* [4 {, |% K" [0 h$ e, L4 U# p! q! o& t
(7)否则P=P-P‘,转(3)
- J' B# j% R( w/ I7 E# G- D0 M3 }- Q b* _
(8)End
( X: A$ I" K4 T9 k( Z/ {3 d0 x; y
(9)k=k+17 C" i5 W3 x5 _* z- {. r3 P7 T6 m# I
# v6 R6 `% X* M! V, T& F6 ](10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)3 }2 b6 ]" n: v% q
8 ]* ^ E: `" n/ f9 ~(11)输出结果3 f5 @, _. B, d' M; L; S# e
2 O6 F, g/ c# Y0 b& y: N
(12)结束 |
zan
|