- 在线时间
- 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
 群组: 数学软件学习 |
全局搜索和局部搜索., e" X, {: s+ Z* I5 D( E
目前使用较普遍的、有影响的
! L! E1 ^ c2 k. g/ d全局搜索算法主要包括主从面算法、单曲面算法、级域算法、位码算法及NBS算法;
# J8 K' s/ M8 G( R局部接触搜索算法主要有基于"点面算法"、基于"小球算法"、基于光滑曲面(曲线)算法三大类.& O* d9 ~, k' a7 X! y4 X) u( _
接触界面算法目前主要有拉格朗日乘子法和罚函数法,以及扰动拉氏法和增广拉氏法.8 ?2 U) F; P+ G
此外,接触问题的并行计算也是不可忽视的研究内容
2 c& b$ h; t5 W/ n
, l8 @) U; \+ ?5 b. y, c8 t局部搜索算法、模拟退火算法和遗传算法等是较新发展起来的算法,算法引入了随机因素,不一定能找到最优解,但一般能快速找到满意的解。
) ?5 s4 p, p9 B7 u" j; s; t( v
; H6 V7 L5 E0 Y$ j- [' o局部搜索算法是从爬山法改进而来的。
/ _7 u( Q) y/ _! o1 t5 O. P6 R" U& t0 B R. X
爬山法:在没有任何有关山顶的其他信息的情况下,沿着最陡的山坡向上爬。5 l# Z; j. }7 w1 v: \! {
# v7 D8 @9 d: f1 K
局部搜索算法的基本思想:在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。
7 _0 l! r9 c& }# _, x7 ~$ |
, K: }/ F3 o% q4 p现实问题中,f在D上往往有多个局部的极值点。一般的局部搜索算法一旦陷入局部极值点,算法就在该点处结束,这时得到的可能是一个糟糕的结果。解决的方法就是每次并不一定选择邻域内最优的点,而是依据一定的概率,从邻域内选择一个点。指标函数优的点,被选中的概率大,指标函数差的点,被选中的概率小。考虑归一化问题,使得邻域内所有点被选中的概率和为1。 H# {9 y) |1 n
$ {4 a0 X E- s$ Z+ l
一般的局部搜索算法是否能找到全局最优解,与初始点的位置有很大的依赖关系。解决的方法就是随机生成一些初始点,从每个初始点出发进行搜索,找到各自的最优解。再从这些最优解中选择一个最好的结果作为最终的结果。起始点位置影响搜索结果示意图
2 K7 N/ @ o( I
8 q# S+ z4 D [爬山算法3 p8 o& d8 Q2 Z/ B/ M
: }6 Y4 d! q1 f0 A1, n := s;
/ _7 U. U/ a' E' Z& j( H
2 y& Q1 w p w/ `2, LOOP: IF GOAL(n) THEN EXIT(SUCCESS); m1 g3 |* D. [$ A7 J5 u1 a) \
7 b1 k8 I. K9 g3, EXPAND(n) →{mi},计算h(mi), nextn=min{h(mi)}- S4 }3 M" c3 F- S
: V5 F) p& F) g/ u `1 F, k" O
4, IF h(n)<h(nextn) THEN EXIT(Fail);
! s# Z q } J/ O6 T; k6 w4 M/ R& `& |! p. Y; Z+ R. @* f
5, n:=nextn;3 e" A" P, ]; {6 |
6 b6 Y0 L7 m2 i4 D
6, GO LOOP;
! X3 e3 u" _0 X- Y
0 Q0 {4 G% E7 ?8 A3 U6 a8 J2 S4 _* g该算法在单峰的条件下,必能达到山顶。
; X- Y9 J g; Z% f, {, r a5 F
: [, ]9 E2 M8 D K. U: r局部搜索算法
, s% f" c: Q3 g$ ^, B( M4 f
; Z ^6 O' |5 b( u: [(1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
, g/ I9 _$ N, N& X. p+ b# \8 k# z8 ]1 G t1 q+ t$ X
//D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。. b7 d3 x: q9 Q# P; [* k$ X g+ i
1 m# R( i8 r1 ~/ Y' i: @/ y. t3 [) C
(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等
8 M. m! C5 c) }: N0 ^# J) r0 u$ y0 d0 w& j/ {' c9 V
(3)Begin
/ u& p6 ^5 N1 W7 ?! t2 r- Z0 [+ V2 P/ Q; P5 ?
(4)选择P的一个子集P‘,xn为P’的最优解 + K9 F; P4 c( v' Y4 E: n: a: g3 O2 S
: r' ~) p2 h5 Q+ v7 ^ // P’可根据问题特点,选择适当大小的子集。可按概率选择5 N8 i& c/ ~* b* y" o4 H
* Q$ J; ?! V: c(5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2)
5 i3 b6 Z7 F$ M9 v' o
! `9 Q7 W8 I, h% y // 重新计算P,f(x)为指标函数/ f8 U6 u2 I: i' k, N. {
+ ]* h$ {$ A' v, j, Y(6)否则P=P-P‘,转(2)
, `0 B* {1 t( K0 t" {
! w" e9 t6 y0 m; e(7)End
+ t3 U0 ?; L/ Z0 ~6 M
5 G, @2 Y* h& C: C2 K(8)输出计算结果' w2 w$ X: m# ] p$ o
+ Z. g1 W% `8 @! O(9)结束5 s' g4 y! K% x: r) m+ C% M9 X/ L, ?0 C
0 G3 ?' y" f) U' L6 U6 ?: E2 n- B5 u
局部搜索算法2——可变步长8 F9 q7 G, V5 {' s+ }! L
/ @# w2 O$ c; L9 y( p1 n # ~, B- K! Q' E, @! M
+ M. y/ f4 R$ C. J7 H( C
(1)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);6 N8 x4 ~ O8 @
?! n: q; ]+ ^$ z3 h- e: j //D是问题的定义域,xb用于记录到目标位置的最优解,P为xb的邻域。
; F0 w0 V+ i, M' R. j' ^0 \
. @4 L z: z8 U, a( m& Y3 `4 ~0 @(2)如果不满足结束条件,则: //结束条件为循环次数或P为空等- x$ s1 I: n) y' s+ B3 h( s
j( g1 r8 m# `(3)Begin
2 j: t& Y# Y! d/ q; P: L2 R# {
(4)选择P的一个子集P‘,xn为P’的最优解 ( w9 p. y" s( U6 |+ U% H
' t; W8 ~. J' c: z# ]$ \, `0 O* _(5)如果f(xn)<f(xb),则xb=xn0 L0 y0 ]8 k6 n, B/ M
) W. r1 T& B3 ?' ^. W3 O$ B(6)按某种策略改变步长,计算P=N(xb),转(2) 继续
$ l2 _- r9 M# a5 E/ ]* B3 j- @" i
& v) _# o" m' N" J' a(7)否则P=P-P‘,转(2)
+ f. O$ J: u( t. H! D& v3 u' B8 k7 d p R+ U. Q
(8)End
- U$ F$ D% A* Q0 |9 u& e. |0 _$ h7 y, c ]; u! K
(9)输出计算结果
9 |& R( e: F9 h. `- V- l! V3 u" a( K4 p& v# U" ~* ]0 m i
(10)结束
s0 m. W. F; m# n7 Z3 N9 I! R0 u% t7 A# ~8 Y. M7 T* P
7 o) P( A+ C; X# R
局部搜索算法3——多次起始点
) o J. b9 H+ u% f3 W4 B* {6 B9 C1 ?/ ~' ^+ U0 m/ y
7 E1 j3 }3 F7 o" Y: ?
, Z1 W- D: ^) @# ]
(1)k=0
* N" g. P( M7 m4 M' A1 i* U1 }# `; W. {' J3 f3 X0 m% k
(2)随机选择一个初始的可能解x0属于D,xb=x0,P=N(xb);5 J. \. L3 }# }0 v% k
5 y, g" l0 P) u$ C/ V* c+ P- _0 \- `(3)如果不满足结束条件,则:4 X: {( q6 ]4 }. T4 T
/ g6 h a y0 r- K/ q
(4)Begin
) I7 Z9 z- T8 C6 ]0 v9 e( F" V9 V9 H" I+ S
(5)选择P的一个子集P‘,xn为P’的最优解 ) N/ D+ ]+ t$ i- e9 }
9 g/ \: }. o" j* `: Y$ O+ d(6)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(3)
1 ~& j& t( I! W# |3 V/ l# [
( k! F% B0 i3 Y) w4 T. }(7)否则P=P-P‘,转(3)
& x0 q0 H( t, w- N3 c* {6 s! y+ N+ {7 T5 s# e* l/ h
(8)End/ @7 p3 k2 z3 z- ?$ N& A+ A3 f
6 v5 n% V+ f) x5 q0 `(9)k=k+1& F% G+ x* I c" v% ~3 U
( a- M9 n2 W1 A. q(10)如果k达到了指定的次数,则从k个结果中选择一个最好的结果,否则转(2)
}# I/ Q6 j9 F$ ]) L
# r2 |: L- s+ b) ^8 d* _(11)输出结果
; m9 E- ?4 a2 r" l$ X c7 r7 Z) ?7 l, L9 g. Y) A
(12)结束 |
zan
|