第三章 线性搜索(一维搜索)

本文详细介绍了在一维搜索中寻找极小值点的几种算法,包括线性搜索的基本步骤、黄金分割法的0.618法、斐波那契搜索方法、二次插值法和三次插值法。每种方法都阐述了其确定初始区间、缩小区间和搜索策略,帮助理解这些经典算法的工作原理。
摘要由CSDN通过智能技术生成

3.1 确定初始区间

Unimodal Function:
A function f of single variable x on an interval [a,b] is said to be unimodal if it has only one local minimum point in this interval.

确定初始区间的一般步骤:

  1. 给定极小值点的一个初始估计点 x 0 x_0 x0,和一个初始步长h;令 x 1 = x 0 ,   f 1 = f ( x 1 ) x_1=x_0, \ f_1=f(x_1) x1=x0, f1=f(x1);
  2. x 2 = x 0 + h ,   f 2 = f ( x 2 ) x_2=x_0+h, \ f_2=f(x_2) x2=x0+h, f2=f(x2)
  3. 比较 f 1 f_1 f1 f 2 f_2 f2的值来决定搜索方向(向前或向后);
    1. 如果 f 1 > f 2 f_1>f_2 f1>f2,令h=2h,将搜索步长变成原来的2倍,转向步骤4并向前搜索;
    2. 如果 f 1 < f 2 f_1<f_2 f1<f2,令h=-h,交换 x 1 x_1 x1 x 2 x_2 x2 f 1 f_1 f1 f 2 f_2 f2的值;转向步骤4并向后搜索;
  4. x 3 = x 0 + h ,   f 3 = f ( x 3 ) x_3=x_0+h,\ f_3=f(x_3) x3=x0+h, f3=f(x3)
  5. 比较 f 2 f_2 f2 f 3 f_3 f3的值:
    1. 如果 f 2 < f 3 f_2<f_3 f2<f3,那么确定初始区间为 [ x 1 , x 3 ] [x_1,x_3] [x1,x3]
    2. 如果 f 2 > f 3 f_2>f_3 f2>f3,那么通过令h=2h增加步长,再令 x 1 = x 2 ,   x 2 = x 3 x_1=x_2,\ x_2=x_3 x1=x2, x2=x3,转向步骤4并且继续搜索。

一般初始步长h设为1。

3.2 缩小区间

线性搜索(一维搜索)是利用在给定方向上不断迭代搜索区间,来获取极小值点的方法。

缩短搜索区间的一般策略:

  • 在当前区间[a,b]中任取两个点 x 1 x_1 x1 x 2 x_2 x2
    • 如果 f 1 < f 2 f_1<f_2 f1<f2,新搜索区间为 [ a , x 2 ] [a,x_2] [a,x2]
    • 如果 f 1 > f 2 f_1>f_2 f1>f2,新搜索区间为 [ x 2 , b ] [x_2,b] [x2,b]
    • 如果 f 1 = f 2 f_1=f_2 f1=f2,新搜索区间为 [ x 1 , x 2 ] [x_1,x_2] [x1,x2]
  • 重复上述过程,搜索区间会逐渐缩小;
  • ∣ b n − a n ∣ < ε |b_n-a_n|<\varepsilon bnan<ε,或 ∣ x n + 1 − x n ∣ ≤ ε |x_{n+1}-x_n|\leq \varepsilon xn+1xnε,$ \varepsilon$ 是给定的收敛精度,在这个区间内的点可以大致认为是该搜索方向上的极小值点。

区间内的任意的两个插入点可以缩短搜索区间。不同的插入点获取方式产生了不同线性搜索算法以及相应的区间缩小率。

区间缩小率:
当前区间长度和上一步区间长度的比值。
τ k = b k − a k b k − 1 − a k − 1      ( 0 < τ < 1 )     ( k = 1 , 2 , ⋯   ) \tau_k=\frac{b_k-a_k}{b_{k-1}-a{k-1}} \ \ \ \ (0<\tau<1) \ \ \ (k=1,2,\cdots) τk=bk1ak1bkak    (0<τ<1)   (k=1,2,)

3.3 黄金分割法(0.618法)

黄金分割算法(Golden Search Method)的步骤:

  1. 初始化搜索区间 [ a 0 , b 0 ] [a_0,b_0] [a0,b0],并给定收敛精度 ε \varepsilon ε

  2. a = a 0 , b = b 0 a=a_0, b=b_0 a=a0,b=b0

  3. 利用黄金分割法产生插入点:
    x 1 = a + 0.382 ( b − a )       f 1 = f ( x 1 ) x 2 = a + 0.618 ( b − a )       f 2 = f ( x 2 ) x_1=a+0.382(b-a) \ \ \ \ \ f_1=f(x_1) \\ x_2=a+0.618(b-a) \ \ \ \ \ f_2=f(x_2) x1=a+0.382(ba)     f1=f(x1)x2=a+0.618(ba)     f2=f(x2)

  4. 通过比较 f 1 f_1 f1 f 2 f_2 f2的大小确定新的区间:

    1. 如果 f 1 > f 2 f_1>f_2 f1>f2,新的搜索区间为 [ x 1 , b ] [x_1,b] [x1,b],令 a = x 1 , x 1 = x 2 , f 1 = f 2 a=x_1,x_1=x_2,f_1=f_2 a=x1,x1=x2,f1=f2,记 N 0 = 0 N_0=0 N0=0;
    2. 如果 f 1 < f 2 f_1<f_2 f1<f2,新的搜索区间为 [ a , x 2 ] [a,x_2] [a,x2],令 b = x 2 , x 2 = x 1 , f 2 = f 1 b=x_2,x_2=x_1,f_2=f_1 b=x2,x2=x1,f2=f1,记 N 0 = 1 N_0=1 N0=1;
  5. 收敛判断:当满足条件 b − a < ε b-a<\varepsilon ba<ε时,结束算法,令 x ∗ = a + b 2 x^*=\frac{a+b}{2} x=2a+b;否则转到步骤6;

  6. 产生新的插入点:

    1. N 0 = 0 N_0=0 N0=0,取 x 2 = a + 0.618 ( b − a ) ,   f 2 = f ( x 2 ) x_2=a+0.618(b-a), \ f_2=f(x_2) x2=a+0.618(ba), f2=f(x2)
    2. N 0 = 1 N_0=1 N0=1,取 x 1 = a + 0.382 ( b − a ) ,   f 1 = f ( x 1 ) x_1=a+0.382(b-a), \ f_1=f(x_1) x1=a+0.382(ba), f1=f(x1);转到步骤4进行新的区间缩小

3.4 斐波那契法(Fibonacci Search Method)

斐波那契算法的步骤:

  1. 初始化搜索区间 [ a 0 , b 0 ] [a_0,b_0] [a0,b0],并给定收敛精度 ε \varepsilon ε
  2. a = a 0 , b = b 0 a=a_0, b=b_0 a=a0,b=b0
  3. 通过 F n ≥ b − a ε F_n \geq \frac{b-a}{ \varepsilon } Fnεba确定n,$F_n $是斐波那契数列;
  4. τ = F n − 1 F n \tau= \frac{F_{n-1}}{F_n} τ=FnFn1,利用斐波那契法产生插入点:
    x 1 = a + ( 1 − τ ) ( b − a )      f 1 = f ( x 1 ) x 2 = a + τ ( b − a )      f 2 = f ( x 2 ) x_1=a+(1-\tau)(b-a) \ \ \ \ f_1=f(x_1) \\ x_2=a+\tau(b-a)\ \ \ \ f_2=f(x_2) x1=a+(1τ)(ba)    f1=f(x1)x2=a+τ(ba)    f2=f(x2)
  5. 通过比较 f 1 f_1 f1 f 2 f_2 f2的大小确定新的区间:
    1. 如果 f 1 > f 2 f_1>f_2 f1>f2,新的搜索区间为 [ x 1 , b ] [x_1,b] [x1,b],令 a = x 1 , x 1 = x 2 , f 1 = f 2 a=x_1,x_1=x_2,f_1=f_2 a=x1,x1=x2,f1=f2
    2. 如果 f 1 < f 2 f_1<f_2 f1<f2,新的搜索区间为 [ a , x 2 ] [a,x_2] [a,x2],令 b = x 2 , x 2 = x 1 , f 2 = f 1 b=x_2,x_2=x_1,f_2=f_1 b=x2,x2=x1,f2=f1
    1. 如果n=2,令 x ∗ = a + b 2 x^*=\frac{a+b}{2} x=2a+b
    2. 如果 n > 2 n>2 n>2,令n=n-1并转到步骤4继续搜索。

3.5 二次插值法(Powell’s Quadratic Interpolation Method)

二次插值法计算步骤:

  1. 给定初始点 x 0 x_0 x0,初始步长h和收敛精度 ε > 0 \varepsilon>0 ε>0

  2. 确定初始区间[a,b]和区间内的另外一个点c;

  3. 将3个已知点按顺序排列: x 1 = a , x 2 = c , x 3 = b x_1=a, x_2=c, x_3=b x1=a,x2=c,x3=b,并令 f 1 = f ( x 1 ) , f 2 = f ( x 2 ) , f 3 = f ( x 3 ) f_1=f(x_1),f_2=f(x_2),f_3=f(x_3) f1=f(x1),f2=f(x2),f3=f(x3);

  4. 计算中间插入点 x p x_p xp及其函数值 f p = f ( x p ) f_p=f(x_p) fp=f(xp)
    math
    x_p=\frac{1}{2}*\frac{(x2_2-x_32)f_1+(x_32-x_12)f_2+(x_12-x_22)f_3}{(x_2-x_3)f_1+(x_3-x)1)f_2+(x_1-x_2)f_3}

  5. 收敛判断:若$|x_2-x_p|\leq \varepsilon, $,转步骤7;否则转步骤6;

  6. 缩小区间:
    i .   f p ≤ f 2 , x p ≤ x 2 , 新 搜 索 区 间 [ x 1 , x 2 ] , x 3 = x 2 , x 2 = x p i i .   f p ≤ f 2 , x p > x 2 , 新 搜 索 区 间 [ x 2 , x 3 ] , x 1 = x 2 , x 2 = x p i i i .   f p > f 2 , x p ≤ x 2 , 新 搜 索 区 间 [ x p , x 3 ] , x 1 = x p , f 1 = f p i v .   f p > f 2 , x p > x 2 , 新 搜 索 区 间 [ x 1 , x p ] , x 3 = x p , f 3 = f p i.\ f_p\leq f_2,x_p\leq x_2,新搜索区间[x_1,x_2],x_3=x_2,x_2=x_p \\ ii.\ f_p\leq f_2,x_p> x_2,新搜索区间[x_2,x_3],x_1=x_2,x_2=x_p \\ iii.\ f_p> f_2,x_p\leq x_2,新搜索区间[x_p,x_3],x_1=x_p,f_1=f_p \\ iv.\ f_p> f_2,x_p> x_2,新搜索区间[x_1,x_p],x_3=x_p,f_3=f_p i. fpf2,xpx2,[x1,x2],x3=x2,x2=xpii. fpf2,xp>x2,[x2,x3],x1=x2,x2=xpiii. fp>f2,xpx2,[xp,x3],x1=xp,f1=fpiv. fp>f2,xp>x2,[x1,xp],x3=xp,f3=fp

  7. f p ≤ f 2 f_p\leq f_2 fpf2,令 x ∗ = x p ,   f ∗ = f p x^*=x_p,\ f^*=f_p x=xp, f=fp;否则,令 x ∗ = x 2 ,   f ∗ = f 2 x^*=x_2,\ f^*=f_2 x=x2, f=f2结束一维搜索。

3.6 三次插值法(Davidon’s Cubic Interpolation Method)

三次插值算法的步骤:

  1. f 0 = f ( x 0 ) f_0=f(x_0) f0=f(x0) G 0 = f ′ ( x 0 ) G_0=f{'}(x_0) G0=f(x0);检查 G 0 < 0 G_0<0 G0<0;选择k和 f e f_e fe的值,并确定 α \alpha α(通常k=2);
  2. 计算 f α = f ( x 0 + α ) f_{\alpha}=f(x_0+\alpha) fα=f(x0+α) G α = f ′ ( x 0 + α ) G_{\alpha}=f^{'}(x_0+\alpha) Gα=f(x0+α)
  3. 如果 G α > 0 G_{\alpha}>0 Gα>0或者 f α > f 0 f_{\alpha}>f_0 fα>f0,转到步骤5;否则转到步骤4;
  4. α = 2 α \alpha=2\alpha α=2α,计算新的 f α f_{\alpha} fα G α G_{\alpha} Gα
  5. 利用三次插值公式计算在区间 [ 0 , α ] [0,\alpha] [0,α]中的插入点 λ m \lambda_m λm
    λ m = G 0 + Z + w G 0 + G α + 2 Z ∗ α 其 中 : Z = G 0 + G α + 3 f 0 − f α α w = ( Z 2 − G 0 G α ) 1 2 α = m i n { k , − 2 ( f 0 − f e ) G 0 } \lambda_m=\frac{G_0+Z+w}{G_0+G_{\alpha}+2Z}*\alpha \\ 其中:Z=G_0+G_{\alpha}+3\frac{f_0-f_{\alpha}}{\alpha} \\ w=(Z^2-G_0G_{\alpha})^{\frac{1}{2}} \\ \alpha=min \{ k,\frac{-2(f_0-f_e)}{G_0} \} λm=G0+Gα+2ZG0+Z+wαZ=G0+Gα+3αf0fαw=(Z2G0Gα)21α=min{k,G02(f0fe)}
    1. f ′ ( x 0 + λ m ) ≥ 0 f^{'}(x_0+\lambda_m)\geq0 f(x0+λm)0 f ( x 0 + λ ) > f ( x 0 ) f(x_0+\lambda)>f(x_0) f(x0+λ)>f(x0),新搜索区间 [ 0 , λ m ] [0,\lambda_m] [0,λm]
    2. f ′ ( x 0 + λ m ) < 0 f^{'}(x_0+\lambda_m)<0 f(x0+λm)<0,新搜索区间 [ λ m , α ] [\lambda_m,\alpha] [λm,α]
  6. λ m < ε \lambda_m<\varepsilon λm<ε或搜索区间长度小于 ε \varepsilon ε时,停止搜索。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值