- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索.1 t( v w0 [* }' i, b
目前使用较普遍的、有影响的
* P- {3 m- S! K# ^9 K全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;0 H- q* ^2 Z7 Q% {, D4 F
局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.
( d; v" B* d8 G! ?" x2 o5 M接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.
; g+ x! l9 u( x此外,接触问题的并行计算也是不可忽视的研究内容
& p. I& @. k( i# v5 n
7 n$ A6 [6 v; C$ L! y4 R h8 u局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。5 i7 g4 i1 p: ^& X
2 E ~, ^0 K0 C: e( o$ G, Z8 e局部搜索算法是从爬山法改进而来的。7 l3 l- ?# j5 P1 F
/ D4 {- t% ?0 V9 w3 ?. q
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。
' r7 ^& b. }6 l: j$ i. P. K% j; @
& m( D) D4 Z+ e$ u! A+ s: P# c局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。# q& s/ }* {: p' ]; ^9 i
: v7 ~) j9 q( @* {现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。( I( v4 |1 `+ c0 ^
. e* x. C9 [2 r; E) a) G
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
8 X6 i' V2 P6 ]: M7 ?# s7 z1 f* T5 v4 s9 K* d8 x6 s
爬山算法3 ~# x! u: \1 x9 k
/ s& f& y( `+ u# U8 H4 @2 A- s1, n := s;
( e8 ?& Z" X, c5 T4 a" a. ]
; M8 u" W! G6 V9 k! C0 F' j# [/ n$ y2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS);( x; l% N& |6 w1 b2 \ `: X9 a
+ Q9 C$ P" E1 y }7 J' o0 d
3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}4 y( M: [# A: J
j8 N2 N, J9 U* b' [8 ] D/ q9 R
4, IF h(n)<h(nextn) THEN EXIT(Fail);
+ Y/ _, q6 x6 G4 {# U6 J, q1 p2 j8 p Q1 r( t" Q) M
5, n:=nextn;8 H! G. m$ h: w- m2 k3 I
7 q4 U; Q2 z, s6 M: D' y6, GO LOOP;# D/ \6 M3 [1 Z/ g
; d) C& O# p8 s7 C8 m6 e, K该算法在单峰的条件下,必能达到山顶。1 k/ p& }5 e) |/ ~+ }( q
) d' N; O3 \9 f# L, ?
局部搜索算法. k5 T, s8 ]: g; o+ K# f+ t e5 v
U8 @6 q. D' O* [; H& r- r5 D% |
(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);; A R' n6 p: [, c$ V" b5 n$ O
0 _; Q: C2 a: m& `4 ^! B6 D
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。
& j9 u* m3 T/ z
5 N, Y* m3 i I3 Z/ |# J(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等6 H& ?6 N' _% r" q1 O0 }
7 z2 K! _" y3 ]2 N(3)Begin( i4 H* [1 v% A9 B
) ?% {/ _) M4 _& q(4)选择P的一个子集P‘,xn为P’的最优解
( |0 `+ F7 f3 a A* s6 T, i5 n
// P’可根据问题特点,选择适当大小的子集。可按概率选择3 r- J: R! h8 k+ H7 g* d
0 O. U8 c4 F4 i( Z D/ R4 N9 l' m: `
(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
: Y1 N& Y O _: I( a5 K0 F6 D( B( }" x. ^
// 重新计算P,f(x)为指标函数
( S# a2 b7 n" i% i% ], m; m; }! z+ u: }7 | Y" D; K$ I# \" S
(6)否则P=P-P‘,转(2)
2 f- E/ `3 P6 ^" i! R8 B- c
S* |: K2 K( Q(7)End6 r) C/ |) B) {/ z5 T; d! r
( E) h- h2 o+ k5 \
(8)输出计算结果
) K7 L- \" j; d) y w- n6 @+ T9 n$ m4 j4 m' P0 h
(9)结束
" w' r/ @% u v! L: F+ ]5 j# I+ u8 y/ ^% z6 l
* |! V- C# L7 }4 ^7 x
局部搜索算法2——可变步长3 D% w4 T( W) w
% \8 |9 d9 F' D* f# [8 t
n- i# y: v! {" x* [' k) O4 u9 z2 z+ X. H4 j) z4 `
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);
8 E) y& }1 O' E8 P
3 I! x* m$ l7 W) v r //D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。) {5 q/ C$ Z$ J2 @& B
6 _7 \! }) s9 ^+ v9 U& L9 `1 W(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
8 C+ ^& h" i& o7 J" C
6 C; k* A8 }% E$ e" F5 X6 P' r(3)Begin `" \# z# m5 q( ?( H2 t; w7 K
# E* G" n& ~6 E% h0 u
(4)选择P的一个子集P‘,xn为P’的最优解
" r% [+ Y% F1 |! J. a6 s4 k5 R6 _, q+ O5 ]# ?
(5)如果f(xn)<f(xb),则xb=xn' A! T ]- I$ j9 V! m' V! H
; R2 i0 X8 D2 Z0 u+ k5 k1 s9 Q(6)按某种策略改变步长,计算P=N(xb),转(2) 继续
* M0 G" ?2 A9 T4 z; d* L& k
2 N" X* K* Z% ^/ @3 U(7)否则P=P-P‘,转(2)
% N/ n! w) f) X! q2 X
9 u6 d4 I7 _, R; L( r( z(8)End5 C- k1 |9 j; o
( g, L% i' |- \- |7 f(9)输出计算结果
2 J9 F3 r2 l! R V6 H4 {6 h0 m- c9 V; X7 }( `
(10)结束
7 n ~5 L# F/ V0 Z0 _* i5 }" r/ w$ d# X& d' M
5 _( m1 {2 y' s3 E
局部搜索算法3——多次起始点- d6 y3 I/ S" M5 \
E, u6 X8 m* K$ D( I; Y+ M
+ h. M! I: z1 X6 O; J- @. @& _/ U* o1 z( ~& {* p# ?6 b
(1)k=05 b4 z9 ]: ^( e( f
$ S) i* U' ^+ Y. }/ x
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);' p" K7 |8 x% O3 o( e8 b9 [
+ D5 \5 H0 R0 n0 E; {1 n8 J. w
(3)如果不满足结束条件,则:
" c7 B2 z' X' E
0 K- n) } A4 j3 `4 S0 J8 z) E(4)Begin) K5 |6 |+ L0 J W8 [
, Y% S: G- C( h' X) {8 [
(5)选择P的一个子集P‘,xn为P’的最优解 & q8 x' o; D$ O9 ? {& ~! t3 m
3 @. }8 z" u! i(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)4 n7 y# o8 D/ [7 s8 @
/ |9 O4 ^$ }: x# [1 J3 s$ i
(7)否则P=P-P‘,转(3)2 W. q" n8 }, L# N( O: g
. Y" e5 h/ g+ C& t: \7 k- c; A9 [
(8)End
/ W3 E& u% y6 Y2 G& K j) I3 }" i6 s/ Q9 {2 c! n4 N
(9)k=k+1# f! S# \! L2 P( l: N' u
2 a% K6 N9 d. j. m$ W: M(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)& K. k4 u4 D3 {; ]1 C
) j0 N3 b1 E2 |" m, C; W5 q
(11)输出结果
; s4 r$ P/ ?: e. `3 L1 M' @ L# S! I- e' Q' A: J R: J
(12)结束 |
zan
|