最优化方法小结


此前准备最优化算法考试时整理的,都是一些比较简单且常用的最优化算法,没有放公式的推导,也还有很多相关的算法,感兴趣的话可以参考《最优化方法》(上课用的课本,红皮的,16k,还蛮经典的,公式推导也很详细)。
(讲课的老师真的非常认真,一言一行都带着对数学的喜爱)

一维搜索算法

Fibonacci法与黄金分割法

  • Fibonacci法使用前首先要求解出计算函数值的次数n;
  • Fibonacci的优点:可使原始区间长度与最终区间长度的比值达到最大值;缺点:每次区间缩短率 F i − 1 F i \frac{F_{i-1}}{F_{i}} FiFi1 不定,计算量大
  • 黄金分割法是Fibonacci法的极限形式,缩短率定为0.618
  • 黄金分割法缩短率的计算:每次保留区间 ( b − x 1 ) (b-x_{1}) (bx1), ( x 2 − a ) (x_{2}-a) (x2a) 的概率相等,即
    b − [ a + p ( b − a ) ] = [ a + ( 1 − p ) ( b − a ) ] − a b-[a+p(b-a)]=[a+(1-p)(b-a)]-a b[a+p(ba)]=[a+(1p)(ba)]a

黄金分割法步骤

  • s t e p 1 step_1 step1: x 2 = a + 0.618 ( b − a ) x_2=a+0.618(b-a) x2=a+0.618(ba), f 2 = f ( x 2 ) f_2=f(x_2) f2=f(x2),转 s t e p 2 step_2 step2
  • s t e p 2 step_2 step2: x 1 = a + 0.382 ( b − a ) x_1=a+0.382(b-a) x1=a+0.382(ba), f 1 = f ( x 1 ) f_1=f(x_1) f1=f(x1),转 s t e p 3 step_3 step3
  • s t e p 3 step_3 step3: 若 ∣ b − a ∣ < e r r |b-a| \lt err ba<err x ∗ = ( b + a ) 2 x^{*} = \frac{(b+a)}{2} x=2(b+a)
  • s t e p 4 step_4 step4:
    • f 1 < f 2 f_1\lt f_2 f1<f2,则 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,转 s t e p 2 step_2 step2;
    • f 1 > f 2 f_1\gt f_2 f1>f2,则 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,转 s t e p 5 step_5 step5;
    • f 1 = f 2 f_1=f_2 f1=f2,则 a = x 1 , b = x 2 a=x_1,b=x_2 a=x1,b=x2,转 s t e p 1 step_1 step1.
  • s t e p 5 step_5 step5: x 2 = a + 0.618 ( b − a ) x_2=a+0.618(b-a) x2=a+0.618(ba), f 2 = f ( x 2 ) f_2=f(x_2) f2=f(x2) s t e p 3 step_3 step3

进退法

  • 进退法用于求解下单峰区间

平分法

类似于二分搜索
f ( x ) f(x) f(x) 为下单峰函数,若 f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b] 具有连续的一阶导数,且 f ′ ( a ) < 0 f'(a)<0 f(a)<0, f ( b ) > 0 f(b)>0 f(b)>0
c = ( a + b ) / 2 c=(a+b)/2 c=(a+b)/2,若 f ′ ( c ) = 0 f'(c)=0 f(c)=0,则c为极小点;
f ′ ( c ) > 0 f'(c)>0 f(c)>0,则以 [ a , c ] [a,c] [a,c] 代替 [ a , b ] [a,b] [a,b] 作为新区间;
f ′ ( c ) < 0 f'(c)<0 f(c)<0,则以 [ c , b ] [c,b] [c,b] 代替 [ a , b ] [a,b] [a,b] 作为新区间.

不精确的一维搜索

  • wolf准则,armijo准则等
  • 有关wolf准则:
    • 根据 f ( x k + α k p k ) f(x_k+\alpha_k p_k) f(xk+αkpk) x k x_k xk 处的Taylor展开式可得到条件1(步长不能太大)
      f ( x k ) − f ( x k + α k p k ) ≥ μ α k g k T p k f(x_k)-f(x_k+\alpha_k p_k) \ge \mu \alpha_k g_{k}^{T} p_k f(xk)f(xk+αkpk)μαkgkTpk
    • 条件2(同时步长不能太小)
      ∇ f ( x k + α k p k ) T p k ≥ σ g k T p k \nabla f(x_k+\alpha_k p_k)^{T}p_k \ge \sigma g_{k}^{T} p_k f(xk+αkpk)TpkσgkTpk

无约束最优化方法

最速下降法

  • 线性收敛
  • 整体收敛
  • 本质:用线性函数去近似目标函数
  • 步骤
    • s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=0
    • s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
    • s t e p 3 step_3 step3: 若 g k ≤ e r r g_k\le err gkerr x ∗ = x k x^{*} = x_k x=xk,否则 p k = − g k p_k=-g_k pk=gk,由一维搜索确定步长
      f ( x k + α k p k ) = min ⁡ α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk)
    • s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,k=k+1,转 s t e p 2 step_2 step2
  • 在求解正定二次函数,进行精确一维搜索时,经推导可得出
    α k = − g k T p k p k T G p k = g k T g k g k T G g k \alpha_k=-\frac{g_k^T p_k}{p_k^T G p_k}=\frac{g_k^T g_k}{g_k^T G g_k} αk=pkTGpkgkTpk=gkTGgkgkTgk

Newton法

  • 二次收敛
  • 局部收敛
  • 本质:用二次函数去近似目标函数
  • 优点:
    • G ∗ G^{*} G正定且初始点合适,算法二阶收敛
    • 对正定二次函数,迭代一次就可以收敛到极小值
  • 缺点:
    • 对多数问题不是整体收敛的
    • 每次迭代需要计算 G k G_k Gk
    • 每次迭代时需要求解线性方程组,方程组可能是奇异或非正定的;可能得不到下降方向
    • 收敛于鞍点或极大点的可能性与收敛于极小点的可能性一致
  • 步骤
    • s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=0
    • s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
    • s t e p 3 step_3 step3: 若 g k ≤ e r r g_k\le err gkerr x ∗ = x k x^{*} = x_k x=xk,否则计算 G k = G ( x k ) G_k=G(x_k) Gk=G(xk)
      p k = − G − 1 g k p_k=-G^{-1}g_k pk=G1gk
    • s t e p 4 step_4 step4: x k + 1 = x k + p k x_{k+1}=x_k+p_k xk+1=xk+pk,k=k+1,转 s t e p 2 step_2 step2

共轭方向法和共轭梯度法

  • 计算量较小,适合大规模问题求解
  • 共轭方向法步骤
    • s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=1,下降方向 p k p_k pk
    • s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
    • s t e p 3 step_3 step3: 若 g k ≤ e r r g_k\le err gkerr x ∗ = x k x^{*} = x_k x=xk,否则由一维搜索确定步长
      f ( x k + α k p k ) = min ⁡ α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk)
    • s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,取共轭方向 p k + 1 p_{k+1} pk+1 使得 p k + 1 T G p i = 0 p_{k+1}^{T} G p_i=0 pk+1TGpi=0,k=k+1,转 s t e p 2 step_2 step2
  • FR-共轭梯度法步骤
    • s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,k=1
    • s t e p 2 step_2 step2: 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk)
    • s t e p 3 step_3 step3: 若 g k ≤ e r r g_k\le err gkerr x ∗ = x k x^{*} = x_k x=xk,否则下降方向 p k = − g k + β k − 1 p k − 1 p_k=-g_k+\beta_{k-1}p_{k-1} pk=gk+βk1pk1
      β k − 1 = { 0 , k = 1 g k T g k g k − 1 T g k − 1 , k > 1 \beta_k-1=\begin{cases}0,k=1\\ \frac{g_k^T g_k}{g_{k-1}^T g_{k-1}},k\gt 1\end{cases} βk1={0,k=1gk1Tgk1gkTgk,k>1
      由一维搜索确定步长
      f ( x k + α k p k ) = min ⁡ α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk)
    • s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk,k=k+1,转 s t e p 2 step_2 step2
  • PRP-共轭梯度法步骤
    • 将FR中的 β \beta β 替换为
      β k − 1 = { 0 , k = 1 g k T ( g k − g k − 1 ) g k − 1 T g k − 1 , k > 1 \beta_k-1=\begin{cases}0,k=1\\ \frac{g_k^T (g_k-g_{k-1)}}{g_{k-1}^T g_{k-1}},k\gt 1 \end{cases} βk1=0,k=1gk1Tgk1gkT(gkgk1),k>1
  • 重新开始的***共轭梯度法,即在k为n的倍数时, p k p_k pk 重新设置为负梯度方向

拟Newton法

  • 对Hess矩阵进行修正
  • DFP步骤
    • s t e p 1 step_1 step1: 取初始点 x 0 x_0 x0,计算 g 0 g_0 g0, H 0 H_0 H0通常设置为单位矩阵,k=0
    • s t e p 2 step_2 step2: p k = − H k g k p_k=-H_k g_k pk=Hkgk
    • s t e p 3 step_3 step3: 由一维搜索确定步长
      f ( x k + α k p k ) = min ⁡ α > 0 f ( x k + α k p k ) f(x_k+\alpha_k p_k)=\min_{\alpha\gt 0}f(x_k+\alpha_k p_k) f(xk+αkpk)=α>0minf(xk+αkpk)
    • s t e p 4 step_4 step4: x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk
    • s t e p 5 step_5 step5: 若 g k ≤ e r r g_k\le err gkerr x ∗ = x k x^{*} = x_k x=xk,否则
      { s k = x k + 1 − x k = α k p k y k = g k + 1 − g k \begin{cases}s_k=x_{k+1}-x_k=\alpha_k p_k\\y_k=g_{k+1}-g_k \end{cases} {sk=xk+1xk=αkpkyk=gk+1gk
    • s t e p 6 step_6 step6: 根据DFP修正公式计算 H k + 1 H_{k+1} Hk+1,k=k+1,转 s t e p 2 step_2 step2.
  • BFGS步骤
    • 将DFP中的修正公式换为BFGS修正公式即可
  • DFP修正公式
    H k + 1 = H k − H k y k y k T H k y k T H k y k + s k s k T y k T s k H_{k+1}=H_{k}-\frac{H_k y_k y_k^T H_k}{y_k^T H_k y_k}+\frac{s_k s_k^T}{y_k^T s_k} Hk+1=HkykTHkykHkykykTHk+ykTskskskT
  • BFGS修正公式
    H k + 1 = H k − H k y k y k T H k y k T H k y k + s k s k T y k T s k + w k w k T H_{k+1}=H_{k}-\frac{H_k y_k y_k^T H_k}{y_k^T H_k y_k}+\frac{s_k s_k^T}{y_k^T s_k}+w_kw_k^T Hk+1=HkykTHkykHkykykTHk+ykTskskskT+wkwkT
    其中, w k = y k T H k y k ( s k y k T s k − H k y k y k T H k y k ) w_k=\sqrt{y_k^T H_k y_k}(\frac{s_k}{y_k^T s_k}-\frac{H_k y_k}{y_k^T H_k y_k}) wk=ykTHkyk (ykTskskykTHkykHkyk)

约束最优化方法

等式约束的最优性条件

  • Lagrange定理(一阶必要条件)
    • 将等式约束最优化问题转化为无约束最优化问题
    • L ( x , λ ) = f ( x ) − λ T c ( x ) L(x,\lambda)=f(x)-\lambda^T c(x) L(x,λ)=f(x)λTc(x)
      { ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) = 0 \begin{cases} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*})=0 \\ c_i(x^{*})=0 \end{cases} {f(x)i=1iλici(x)=0ci(x)=0
  • L ( x , λ ) L(x,\lambda) L(x,λ) 关于x的Hess矩阵正定(二阶充分条件)

不等式约束的最优性条件

  • Fritz-John一阶必要条件
    { λ 0 ∗ ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) ≥ 0 , i = 1 , 2 , . . m λ i ∗ c i ( x ∗ ) = 0 , i = 1 , 2 , . . m λ i ∗ ≥ 0 , i = 0 , 1 , . . m \begin{cases} \lambda_0^{*} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*}) = 0 \\c_i(x^{*})\ge 0,i=1,2,..m \\ \lambda_i^{*} c_i(x^{*})=0,i=1,2,..m\\ \lambda_i^{*}\ge 0,i=0,1,..m \end{cases} λ0f(x)i=1iλici(x)=0ci(x)0,i=1,2,..mλici(x)=0,i=1,2,..mλi0,i=0,1,..m

  • Karush-Kuhn-Tucker一阶必要条件(KKT)
    { ∇ f ( x ∗ ) − ∑ i = 1 i λ i ∗ ∇ c i ( x ∗ ) = 0 c i ( x ∗ ) = 0 , i = 1 , 2 , . . l c i ( x ∗ ) ≥ 0 , i = l + 1 , l + 2 , . . m λ i ∗ c i ( x ∗ ) = 0 , i = 1 , 2 , . . m λ i ∗ ≥ 0 , i = l + 1 , . . m \begin{cases} \nabla f(x^{*})-\sum^i_{i=1}\lambda_i^{*}\nabla c_i(x^{*}) = 0 \\c_i(x^{*})= 0,i=1,2,..l \\ c_i(x^{*})\ge 0,i=l+1,l+2,..m \\ \lambda_i^{*} c_i(x^{*})=0,i=1,2,..m\\ \lambda_i^{*}\ge 0,i=l+1,..m \end{cases} f(x)i=1iλici(x)=0ci(x)=0,i=1,2,..lci(x)0,i=l+1,l+2,..mλici(x)=0,i=1,2,..mλi0,i=l+1,..m

    • 严格互补松弛条件:所有有效约束的乘子均不为0

罚函数法

满足约束时,对应的函数值很小;
不满足约束时,对应的函数值很大——”惩罚”.
在求解过程中,为使得总的目标函数值最小,得到的解一般会满足约束.

  • 外罚函数(适用于等式约束)
    • 等式约束
      P ( x , λ ) = f ( x ) + σ ∑ i = 1 l ∣ ∣ c i ( x ) ∣ ∣ β P(x,\lambda)=f(x)+\sigma \sum_{i=1}^{l}||c_i(x)||^{\beta} P(x,λ)=f(x)+σi=1lci(x)β
    • 不等式约束
      P ( x , λ ) = f ( x ) + σ ∑ i = 1 m ∣ m i n ( 0 , c i ( x ) ) ∣ α P(x,\lambda)=f(x)+\sigma \sum_{i=1}^{m}|min(0,c_i(x))|^{\alpha} P(x,λ)=f(x)+σi=1mmin(0,ci(x))α
    • 一般约束
      P ( x , λ ) = f ( x ) + σ P ~ ( x ) P(x,\lambda)=f(x)+\sigma \tilde{P}(x) P(x,λ)=f(x)+σP~(x)
      P ~ ( x ) = ∑ i = 1 l ∣ ∣ c i ( x ) ∣ ∣ β + ∑ i = l + 1 m ∣ m i n ( 0 , c i ( x ) ) ∣ α \tilde{P}(x)=\sum_{i=1}^{l}||c_i(x)||^{\beta} + \sum_{i=l+1}^{m}|min(0,c_i(x))|^{\alpha} P~(x)=i=1lci(x)β+i=l+1mmin(0,ci(x))α
    • 缺点:近似最优解往往不可行; σ \sigma σ越大越好,但 σ \sigma σ 越大使得Hess矩阵的条件数越大,趋向于病态,无约束问题难以求解。
  • 内罚函数(适用于不等式约束)
    • 仅适用于求解不等式约束
      B ( x ) = f ( x ) + r B ~ ( x ) B(x)=f(x)+ r \tilde{B}(x) B(x)=f(x)+rB~(x)
      B ~ ( x ) = ∑ i = 1 m 1 c i ( x ) o r B ~ ( x ) = − ∑ i = 1 m l n ( c i ( x ) ) \tilde{B}(x)=\sum_{i=1}^{m}\frac{1}{c_{i}(x)} or \tilde{B}(x)=-\sum_{i=1}^{m}ln(c_{i}(x)) B~(x)=i=1mci(x)1orB~(x)=i=1mln(ci(x))

乘子法

  • Lagrange+罚函数
  • 等式约束
    M ( x , λ , σ ) = L ( x , λ ) + σ 2 c ( x ) T c ( x ) M(x,\lambda,\sigma)=L(x,\lambda)+\frac{\sigma}{2}c(x)^T c(x) M(x,λ,σ)=L(x,λ)+2σc(x)Tc(x)
    λ k + 1 = λ k − σ k c ( x k ) \lambda_{k+1}=\lambda_k-\sigma_k c(x_k) λk+1=λkσkc(xk)
  • 不等式约束
    M ( x , λ , σ ) = f ( x ) + 1 2 σ ∑ i = 1 m { [ m a x ( 0 , λ i − σ c i ( x ) ) ] 2 − λ i 2 } M(x,\lambda,\sigma)=f(x)+\frac{1}{2\sigma}\sum_{i=1}^{m}{\{[max(0,\lambda_i-\sigma c_i(x))]^2-\lambda_i^2\}} M(x,λ,σ)=f(x)+2σ1i=1m{[max(0,λiσci(x))]2λi2}
    ( λ k + 1 ) i = m a x [ 0 , ( λ k ) i − σ c i ( x k ) ] (\lambda_{k+1})_i=max[0,(\lambda_k)_i-\sigma c_i(x_k)] (λk+1)i=max[0,(λk)iσci(xk)]
  • 一般约束
    M ( x , λ , σ ) = f ( x ) + 1 2 σ ∑ i = l + 1 m { [ m a x ( 0 , λ i − σ c i ( x ) ) ] 2 − λ i 2 } − ∑ i = 1 l λ i c i ( x ) + σ 2 ∑ i = 1 l c i 2 ( x ) M(x,\lambda,\sigma)=f(x)+\frac{1}{2\sigma}\sum_{i=l+1}^{m}{\{[max(0,\lambda_i-\sigma c_i(x))]^2-\lambda_i^2\}}-\sum_{i=1}^l\lambda_i c_i(x)+\frac{\sigma}{2}\sum_{i=1}^l c_i^2(x) M(x,λ,σ)=f(x)+2σ1i=l+1m{[max(0,λiσci(x))]2λi2}i=1lλici(x)+2σi=1lci2(x)
    ( λ k + 1 ) i = m a x [ 0 , ( λ k ) i − σ c i ( x k ) ] , i = l + 1 , . . . m (\lambda_{k+1})_i=max[0,(\lambda_k)_i-\sigma c_i(x_k)],i=l+1,...m (λk+1)i=max[0,(λk)iσci(xk)],i=l+1,...m
    ( λ k + 1 ) i = ( λ k ) i − σ k c i ( x k ) , i = 1 , 2 , . . . l (\lambda_{k+1})_i=(\lambda_k)_i-\sigma_k c_i(x_k),i=1,2,...l (λk+1)i=(λk)iσkci(xk),i=1,2,...l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值