一维线搜索(the Golden Section Method 、the Modified 0.618 Method、the Faboncci Section Method)

一维线搜索(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+τ(b1a1)ar1=a1+(1τ)(b1a1)
  • 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:bkalk<ϵ,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+1ak+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:arkak<ϵ,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+1ak+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+τ(b1a1)ar1=a1+(1τ)(b1a1)
  • 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,Step3Step4
  • S t e p 3 : 若 a r k − a k < ϵ , 停 止 计 算 , 输 出 a l k , Step3:若a_r^k-a_k<\epsilon,停止计算,输出a_l^k, Step3:arkak<ϵ,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+1ak+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:bkalk<ϵ,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+1ak+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=t1,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} FnLb1a1
    取 试 探 点 如 下 : 取试探点如下:
    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+FnFn2(b1a1)ar1=a1+FnFn1(b1a1)
  • 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:bkalk<ϵ,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+FnkFnk2(bk+1ak+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:arkak<ϵ,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+FnkFnk1(bk+1ak+1)
    k = k + 1 , 转 到 S t e p 2 ; k=k+1,转到Step2; k=k+1,Step2

程序实现后续补充

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值