一维线搜索(the Golden Section Method 、the Modified 0.618 Method、the Faboncci Section Method)
the Golden Section Method
核心思想:
- 区间迭代,不断逼近
算法步骤
-
S
t
e
p
1
:
初
始
区
间
[
a
1
,
b
1
]
,
精
度
ϵ
>
0
,
令
k
=
1
,
取
试
探
点
如
下
:
Step1:初始区间[a_1,b_1],精度\epsilon>0,令k=1,取试探点如下:
Step1:初始区间[a1,b1],精度ϵ>0,令k=1,取试探点如下:
a l 1 = a 1 + τ ( b 1 − a 1 ) a r 1 = a 1 + ( 1 − τ ) ( b 1 − a 1 ) a_l^1=a_1+\tau(b_1-a_1)\\a_r^1=a_1+(1-\tau)(b_1-a_1) al1=a1+τ(b1−a1)ar1=a1+(1−τ)(b1−a1) -
S
t
e
p
2
:
如
果
f
(
a
l
k
)
>
f
(
a
r
k
)
,
转
到
S
t
e
p
3
,
Step2:如果f(a_l^k)>f(a_r^k),转到Step3,
Step2:如果f(alk)>f(ark),转到Step3,
否 则 , 即 f ( a l k ) ≤ f ( a r k ) , 转 到 S t e p 4 否则,即f(a_l^k)\leq f(a_r^k),转到Step4 否则,即f(alk)≤f(ark),转到Step4; -
S
t
e
p
3
:
如
果
b
k
−
a
l
k
<
ϵ
,
停
止
迭
代
,
输
出
a
r
k
,
Step3:如果b_k-a_l^k<\epsilon,停止迭代,输出a_r^k,
Step3:如果bk−alk<ϵ,停止迭代,输出ark,
否 则 , 令 a k + 1 = a l k , b k + 1 = b k , a l k + 1 = a r k , 否则,令a_{k+1}=a_l^k,b_{k+1}=b_k,a_l^{k+1}=a_r^k, 否则,令ak+1=alk,bk+1=bk,alk+1=ark,
a r k + 1 = a k + 1 + ( 1 − τ ) ( b k + 1 − a k + 1 ) a_r^{k+1}=a_{k+1}+(1-\tau)(b_{k+1}-a_{k+1}) ark+1=ak+1+(1−τ)(bk+1−ak+1)
k = k + 1 , 转 到 S t e p 2 ; k=k+1,转到Step2; k=k+1,转到Step2; -
S
t
e
p
4
:
如
果
a
r
k
−
a
k
<
ϵ
,
停
止
迭
代
,
输
出
a
l
k
,
Step4:如果a_r^k-a_k<\epsilon,停止迭代,输出a_l^k,
Step4:如果ark−ak<ϵ,停止迭代,输出alk,
否 则 , 令 a k + 1 = a k , b k + 1 = a r k , a r k + 1 = a l k , 否则,令a_{k+1}=a_k,b_{k+1}=a_r^k,a_r^{k+1}=a_l^k, 否则,令ak+1=ak,bk+1=ark,ark+1=alk,
a l k + 1 = a k + 1 + τ ( b k + 1 − a k + 1 ) a_l^{k+1}=a_{k+1}+\tau(b_{k+1}-a_{k+1}) alk+1=ak+1+τ(bk+1−ak+1)
k = k + 1 , 转 到 S t e p 2 ; k=k+1,转到Step2; k=k+1,转到Step2;
the Modified 0.618 Method
核心思想:
- 避免区间交叉
算法步骤
-
S
t
e
p
1
:
初
始
点
区
间
[
a
1
,
b
1
]
,
精
度
ϵ
>
0
,
k
=
1
,
1
−
τ
=
0.618
,
试
探
点
如
下
:
Step1:初始点区间[a_1,b_1],精度\epsilon>0,k=1,1-\tau=0.618,试探点如下:
Step1:初始点区间[a1,b1],精度ϵ>0,k=1,1−τ=0.618,试探点如下:
a l 1 = a 1 + τ ( b 1 − a 1 ) a r 1 = a 1 + ( 1 − τ ) ( b 1 − a 1 ) a_l^1=a_1+\tau(b_1-a_1)\\a_r^1=a_1+(1-\tau)(b_1-a_1) al1=a1+τ(b1−a1)ar1=a1+(1−τ)(b1−a1) -
S
t
e
p
2
:
f
t
=
m
i
n
t
{
f
(
a
k
)
,
f
(
b
k
)
,
f
(
a
l
k
)
,
f
(
a
r
k
)
}
,
Step2:f_t=\underset{t}{min} \{f(a_k),f(b_k),f(a_l^k),f(a_r^k)\},
Step2:ft=tmin{f(ak),f(bk),f(alk),f(ark)},
令 f = f t , 如 果 t < 3 , 转 到 S t e p 3 ; 否 则 , 转 到 S t e p 4 ; 令f=f_t,如果t<3,转到Step3;否则,转到Step4; 令f=ft,如果t<3,转到Step3;否则,转到Step4; -
S
t
e
p
3
:
若
a
r
k
−
a
k
<
ϵ
,
停
止
计
算
,
输
出
a
l
k
,
Step3:若a_r^k-a_k<\epsilon,停止计算,输出a_l^k,
Step3:若ark−ak<ϵ,停止计算,输出alk,
否 则 , 令 a k + 1 = a k , b k + 1 = a r k , a r k + 1 = a l k , a l k + 1 = a k + 1 + τ ( b k + 1 − a k + 1 ) , 否则,令a_{k+1}=a_k,b_{k+1}=a_r^k,a_r^{k+1}=a_l^k,a_l^{k+1}=a_{k+1}+\tau(b_{k+1}-a_{k+1}), 否则,令ak+1=ak,bk+1=ark,ark+1=alk,alk+1=ak+1+τ(bk+1−ak+1),
计 算 f 2 = f ( a l k + 1 ) , 如 果 ( − 1 ) t f 2 ≤ ( − 1 ) t f , k = k + 1 , 转 到 S t e p 2 , 计算f_2=f(a_l^{k+1}),如果(-1)^tf_2\leq(-1)^tf,k=k+1,转到Step2, 计算f2=f(alk+1),如果(−1)tf2≤(−1)tf,k=k+1,转到Step2,
否 则 , t = t + 1 , k = k + 1 , 转 到 S t e p 2 ; 否则,t=t+1,k=k+1,转到Step2; 否则,t=t+1,k=k+1,转到Step2; -
S
t
e
p
4
:
若
b
k
−
a
l
k
<
ϵ
,
停
止
计
算
,
输
出
a
r
k
,
Step4:若b_k-a_l^k<\epsilon,停止计算,输出a_r^k,
Step4:若bk−alk<ϵ,停止计算,输出ark,
否 则 , 令 a k + 1 = a l k , b k + 1 = b k , a l k + 1 = a r k , a r k + 1 = a k + 1 + ( 1 − τ ) ( b k + 1 − a k + 1 ) 否则,令a_{k+1}=a_l^k,b_{k+1}=b_k,a_l^{k+1}=a_r^k,a_r^{k+1}=a_{k+1}+(1-\tau)(b_{k+1}-a_{k+1}) 否则,令ak+1=alk,bk+1=bk,alk+1=ark,ark+1=ak+1+(1−τ)(bk+1−ak+1)
计 算 f 3 = f ( a r k + 1 ) , 如 果 ( − 1 ) t f 3 < ( − 1 ) t f , t = t − 1 , k = k + 1 , 转 到 S t e p 2 , 计算f_3=f(a_r^{k+1}),如果(-1)^tf_3<(-1)^tf,t=t-1,k=k+1,转到Step2, 计算f3=f(ark+1),如果(−1)tf3<(−1)tf,t=t−1,k=k+1,转到Step2,
否 则 , k = k + 1 , 转 到 S t e p 2. 否则,k=k+1,转到Step2. 否则,k=k+1,转到Step2.
the Faboncci Section Method
核心思想:
- 利用斐波那契数列,先预估出需要迭代次数。
算法步骤
-
S
t
e
p
1
:
初
始
区
间
[
a
1
,
b
1
]
,
目
标
区
间
长
度
L
,
令
k
=
1
,
先
计
算
迭
代
次
数
:
Step1:初始区间[a_1,b_1],目标区间长度L,令k=1,先计算迭代次数:
Step1:初始区间[a1,b1],目标区间长度L,令k=1,先计算迭代次数:
F n ≥ b 1 − a 1 L F_n\geq \frac{b_1-a_1}{L} Fn≥Lb1−a1
取 试 探 点 如 下 : 取试探点如下: 取试探点如下:
a l 1 = a 1 + F n − 2 F n ( b 1 − a 1 ) a r 1 = a 1 + F n − 1 F n ( b 1 − a 1 ) a_l^1=a_1+\frac{F_{n-2}}{F_n}(b_1-a_1)\\a_r^1=a_1+\frac{F_{n-1}}{F_n}(b_1-a_1) al1=a1+FnFn−2(b1−a1)ar1=a1+FnFn−1(b1−a1) -
S
t
e
p
2
:
如
果
f
(
a
l
k
)
>
f
(
a
r
k
)
,
转
到
S
t
e
p
3
,
Step2:如果f(a_l^k)>f(a_r^k),转到Step3,
Step2:如果f(alk)>f(ark),转到Step3,
否 则 , 即 f ( a l k ) ≤ f ( a r k ) , 转 到 S t e p 4 否则,即f(a_l^k)\leq f(a_r^k),转到Step4 否则,即f(alk)≤f(ark),转到Step4; -
S
t
e
p
3
:
如
果
b
k
−
a
l
k
<
ϵ
,
停
止
迭
代
,
输
出
a
r
k
,
Step3:如果b_k-a_l^k<\epsilon,停止迭代,输出a_r^k,
Step3:如果bk−alk<ϵ,停止迭代,输出ark,
否 则 , 令 a k + 1 = a l k , b k + 1 = b k , a l k + 1 = a r k , 否则,令a_{k+1}=a_l^k,b_{k+1}=b_k,a_l^{k+1}=a_r^k, 否则,令ak+1=alk,bk+1=bk,alk+1=ark,
a r k + 1 = a k + 1 + F n − k − 2 F n − k ( b k + 1 − a k + 1 ) a_r^{k+1}=a_{k+1}+\frac{F_{n-k-2}}{F_{n-k}}(b_{k+1}-a_{k+1}) ark+1=ak+1+Fn−kFn−k−2(bk+1−ak+1)
k = k + 1 , 转 到 S t e p 2 ; k=k+1,转到Step2; k=k+1,转到Step2; -
S
t
e
p
4
:
如
果
a
r
k
−
a
k
<
ϵ
,
停
止
迭
代
,
输
出
a
l
k
,
Step4:如果a_r^k-a_k<\epsilon,停止迭代,输出a_l^k,
Step4:如果ark−ak<ϵ,停止迭代,输出alk,
否 则 , 令 a k + 1 = a k , b k + 1 = a r k , a r k + 1 = a l k , 否则,令a_{k+1}=a_k,b_{k+1}=a_r^k,a_r^{k+1}=a_l^k, 否则,令ak+1=ak,bk+1=ark,ark+1=alk,
a l k + 1 = a k + 1 + F n − k − 1 F n − k ( b k + 1 − a k + 1 ) a_l^{k+1}=a_{k+1}+\frac{F_{n-k-1}}{F_{n-k}}(b_{k+1}-a_{k+1}) alk+1=ak+1+Fn−kFn−k−1(bk+1−ak+1)
k = k + 1 , 转 到 S t e p 2 ; k=k+1,转到Step2; k=k+1,转到Step2;
程序实现后续补充