单变量最优值求解问题

来源:互联网 发布:什么咖啡最提神知乎 编辑:程序博客网 时间:2024/05/29 11:53

背景

  • 讨论目标函数为一元单值函数f:RR时的最值求解问题
  • 通过迭代求解得到结果
  • 这些方法统称为一维搜索法或线性搜索法
  • 这是多变量问题求解的特例,也是多变量问题求解的算法的一部分
  • 主要逻辑为从初始搜索点x(0)开始,产生一个迭代序列x(1), x(2),...,在第k=0,1,2,...次迭代中,通过当前迭代点x(k)和目标函数f构建下一个迭代点x(k+1)

解法

黄金分割法

  • 适用范围
    • 求解在闭区间[a0, b0]上的极点
    • 必须存在唯一局部极点,即在[a0,b0]上是单峰的
  • 思想
    • 挑选区间[a0,b0]中的点,计算对应的目标函数值,并不断缩小极点所在的区间
    • 利用尽可能少的计算次数来找出极点,直到达到足够的精度水平
    • 如果只挑一个点,并不知道极点在点的左侧还是右侧,因此需要挑两个点进行计算,假设挑中a1b1,满足a0<a1<b1<b0,且有a1a0=b0b1=ρ(b0a0),也就是说,这里的ρ是用来控制区间缩小的范围的,因此ρ<12。并且根据f(a1)f(b1)的值来判断新区间为[a1,b0]还是[a0,b1]
    • ρ的取值究竟多少才使得效率最高?假设第一次计算出来了a1b1,然后根据大小关系把范围缩小成[a0,b1],那么a1不能白计算啊,所以如果让a1=b2是不是下次只需要计算a2的函数值就可以了,每次迭代少计算一次区间边界的函数值。按照这个思想来计算ρ,则不妨设b0a0=1,有
      a1a0=b1b0=ρa1=b2
      计算后得到
      b1a0=1ρ
      b1a1=12ρ
      又根据
      ρ(b1a0)=b1b2=b1a1
      得到
      ρ(1ρ)=12ρ
      ρ=3520.382
    • 在上面计算出的ρ的条件下,每次迭代都会将区间压缩为原来的1ρ=512,正好这个比例是黄金分割比,因此该算法成为黄金分割法。

斐波那契数列法

  • 思想
    • 该算法在黄金分割法的基础上,允许ρ的值不断调整,例如第i次迭代使用参数ρi,第i+1次迭代使用参数ρi+1,以此类推。
    • 同样还是希望每次迭代只计算一次区间边界的函数值,因此稍微修改一下黄金分割法中的式子,有
      ρk+1(1ρk)=12ρk
      有多组序列{ρk}都满足上式,其中,在黄金分割法中的序列ρ1=ρ2=ρ3=...=352就满足上式
    • 对于给定的{ρk},经过n次迭代后,可以把区间长度压缩至(1ρ1)(1ρ2)...(1ρn),所以如果我们希望压缩效率尽量高,就让压缩后的长度尽量小,因此我们的目标是
      min(1ρ1)(1ρ2)...(1ρn)
      s.t.ρk+1=1ρk1ρk,0ρk12,k=1,...,n1
    • 可以证明
      ρ1=1FnFn+1
      ρ2=1Fn1Fn
      ...
      ρk=1Fnk+1Fnk+2
      ...
      ρn=1F1F2
      是上述问题的解,其中Fk表示斐波那契数列的第k项,此时压缩后的长度
      (1ρ1)(1ρ2)...(1ρn)=FnFn+1Fn1Fn...F1F2=F1Fn+1=1Fn+1
    • 由于该序列是最优的,因此斐波那契数列法是会优于黄金分割法的。
    • 需要注意的地方: 当最后一次迭代时,ρn=1F1F2=12,在这种情况下,缩进的两个点将重合在区间中点处,为了避免这种情况,在最后一次迭代时,令ρn=12ϵ

二分法

  • 适用范围
    • 在黄金分割法的适用范围中,还要求函数f是连续可微的,这样在区间压缩的过程中还可以使用函数的一阶导数f
  • 思想
    • 确定区间的中点x^{(n)}=\frac{a_{n-1} + b_{n-1}}{2},计算f在x^{(n)}处的一阶导数f(x(n)),根据导数的正负判断区间保留左半边还是右半边
    • 经过n次迭代后,区间压缩至原来的12n

牛顿法

  • 适用范围
    • 在二分法的基础上,还要要求函数f是连续二阶可微的,也就是说在x(k)处的f(x(k)), f(x(k)), f(x(k))均可以求得
  • 思想
    • 刚开始随机选择一个点x(0),将原式f在做二阶泰勒展开,得到
      q(x)=f(x(0))+f(x(0))(xx(0))+12f(x(k))(xx(k))2
      该二阶泰勒展开可以看做f(x)x(0)处的近似,因此求出二阶展开的极值点可以近似于求出f的极值点,因此有
      0=q(x)=f(x(k))+f(x(k))(xx(k))
      得到
      x=x(k)f(x(k))f(x(k))
      可以令x(k+1)=x进行下一次迭代,不断逼近极值点,即
      x(k+1)=x(k)f(x(k))f(x(k))

割线法

  • 适用范围
    • 牛顿法需要用到二阶导数,但是如果二阶导数不存在,则可以通过一阶导数进行近似得到二阶导数,即
      f(x(k))f(x(k))f(x(k1))x(k)x(k1)
  • 算法
    • 将二阶导数的一阶导数近似带入牛顿法迭代公式中,得到
      x(k+1)=x(k)x(k)x(k1)f(x(k))f(x(k1))f(x(k))
    • 和牛顿法不同的是,该方法需要找到两个初始点x(1)x(0),而非牛顿法的一个初始点
原创粉丝点击