matlab和python非线性规划

不受约束的问题

非线性规划问题分为两种问题:无约束和约束。 不受约束的优化问题是形式上的问题

min ⁡ f ( x ) , x = [ x 1 , x 2 , ⋯   , x n ] T ∈ R n    ( 1 ) \min \boldsymbol{f}\left( \boldsymbol{x} \right) ,\boldsymbol{x}=\left[ \boldsymbol{x}_1,\boldsymbol{x}_2,\cdots ,\boldsymbol{x}_{\boldsymbol{n}} \right] ^{\boldsymbol{T}}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 1 \right) minf(x),x=[x1,x2,,xn]TRn(1)

一个一般的约束优化问题包括方程(1)中具有相等约束的目标函数:

E ( x ) = 0 ( 2 ) \boldsymbol{E}\left( \boldsymbol{x} \right) =0 \left( 2 \right) E(x)=0(2)

和不平等约束:

I ( x ) ⩽ 0 ( 3 ) \boldsymbol{I}\left( \boldsymbol{x} \right) \leqslant 0 \left( 3 \right) I(x)0(3)

其中, x ∈ R n , E ( x ) ∈ R p 和    I ( x ) ∈ R q \boldsymbol{x}\in \mathbb{R}^{\boldsymbol{n}},\boldsymbol{E}\left( \boldsymbol{x} \right) \in \mathbb{R}^{\boldsymbol{p}}和\,\,\boldsymbol{I}\left( \boldsymbol{x} \right) \in \mathbb{R}^{\boldsymbol{q}} xRn,E(x)RpI(x)Rq

在本节中,将考虑上述问题(1)。如果 x ∗ = [ x 1 ∗ , x 2 ∗ , ⋯   , x n ∗ ] T ∈ R n \boldsymbol{x}^*=\left[ \boldsymbol{x}_{1}^{*},\boldsymbol{x}_{2}^{*},\cdots ,\boldsymbol{x}_{\boldsymbol{n}}^{*} \right] ^{\boldsymbol{T}}\in \mathbb{R}^{\boldsymbol{n}} x=[x1,x2,,xn]TRn是问题的最优解,则

g ( x ∗ ) = 0 ( 4 ) y T H ( x ∗ ) y ⩾ 0 , ∀ y ∈ R n    ( 5 ) \boldsymbol{g}\left( \boldsymbol{x}^* \right) =0 \left( 4 \right) \\\boldsymbol{y}^{\boldsymbol{T}}\boldsymbol{H}\left( \boldsymbol{x}^* \right) \boldsymbol{y}\geqslant 0,\forall \boldsymbol{y}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 5 \right) g(x)=0(4)yTH(x)y0,yRn(5)

其中 g ( x ) = ∇ f ( x ) \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) g(x)=f(x) 是梯度向量, H ( x ) \boldsymbol{H}\left( \boldsymbol{x} \right) H(x) 是由下式定义的黑森矩阵,

g ( x ) = ∇ f ( x ) = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) x 2 ⋮ ∂ f ( x ) ∂ x n ] H ( x ) = [ ∂ 2 f ( x ) ∂ x 1 2 ∂ 2 f ( x ) ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x 1 ∂ x n ∂ 2 f ( x ) ∂ x 2 ∂ x 1 ∂ 2 f ( x ) ∂ x 2 2 ⋯ ∂ 2 f ( x ) ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ( x ) ∂ x n ∂ x 1 ∂ 2 f ( x ) ∂ x n ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x n 2 ] \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) =\left[ \begin{array}{c} \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1}\\ \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\boldsymbol{x}_2}\\ \vdots\\ \frac{\partial \boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}}\\\end{array} \right] \\\boldsymbol{H}\left( \boldsymbol{x} \right) =\left[ \begin{matrix} \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{1}^{2}}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1\partial \boldsymbol{x}_2}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_1\partial \boldsymbol{x}_{\boldsymbol{n}}}\\ \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_2\partial \boldsymbol{x}_1}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{2}^{2}}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_2\partial \boldsymbol{x}_{\boldsymbol{n}}}\\ \vdots& \vdots& \ddots& \vdots\\ \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}\partial \boldsymbol{x}_1}& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}\partial \boldsymbol{x}_2}& \cdots& \frac{\partial ^2\boldsymbol{f}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}_{\boldsymbol{n}}^{2}}\\\end{matrix} \right] g(x)=f(x)=x1f(x)x2f(x)xnf(x)H(x)=x122f(x)x2x12f(x)xnx12f(x)x1x22f(x)x222f(x)xnx22f(x)x1xn2f(x)x2xn2f(x)xn22f(x)

等式(5)表示黑森矩阵是一个正半定数。 式(4)-(5)是 x ∗ \boldsymbol{x}^* x的必要最优条件。 如果条件(5)替换为条件:

y T H ( x ∗ ) y > 0 , ∀ y ∈ R n    ( 6 ) \boldsymbol{y}^{\boldsymbol{T}}\boldsymbol{H}\left( \boldsymbol{x}* \right) \boldsymbol{y}>0,\forall \boldsymbol{y}\in \mathbb{R}^{\boldsymbol{n}}\,\, \left( 6 \right) yTH(x)y>0,yRn(6)

(即,黑森矩阵是正定的),则条件(4)-(6)是充分的最优性条件。

用于求解(1)的数值方法是迭代的。 他们将从解 x ∗ \boldsymbol{x}^* x的初始猜测 x ( 0 ) \boldsymbol{x}^{\left( 0 \right)} x(0)开始,然后构造解 x ( 0 ) , x ( 1 ) , x ( 2 ) , ⋯   , \boldsymbol{x}^{\left( 0 \right)},\boldsymbol{x}^{\left( 1 \right)},\boldsymbol{x}^{\left( 2 \right)},\cdots , x(0),x(1),x(2),,的序列,其中 f ( x ( 0 ) ) > f ( x ( 1 ) ) > ⋯ \boldsymbol{f}\left( \boldsymbol{x}^{\left( 0 \right)} \right) >\boldsymbol{f}\left( \boldsymbol{x}^{\left( 1 \right)} \right) >\cdots f(x(0))>f(x(1))> 在迭代 k \boldsymbol{k} k时,数值优化中从点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k)移至点 x ( k + 1 ) \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)} x(k+1)通常需要经历两个步骤:第一步是搜索方向 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)确定,然后在第二步中沿 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)方向进行线搜索(其中 ∥ p ( k + 1 ) ∥ = 1 \left\| \boldsymbol{p}^{\left( \boldsymbol{k}+1 \right)} \right\| =1 p(k+1)=1)以找到最小点 x ( k + 1 ) = x ( k ) + α p ( k ) \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)}=\boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} x(k+1)=x(k)+αp(k),使得 f ( x ( k + 1 ) ) < f ( x ( k ) ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k}+1 \right)} \right) <\boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) f(x(k+1))<f(x(k)) 。 如果满足以下条件,则迭代过程在解 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k)处停止。

∥ g ( x ( k ) ) ∥ < ε \left\| \boldsymbol{g}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) \right\| <\boldsymbol{\varepsilon } g(x(k))<ε

其中 ε < 0 \boldsymbol{\varepsilon }<0 ε<0是任意小的正实数,而 H ( x ( k ) ) \boldsymbol{H}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) H(x(k)) 是正半定数。

无约束优化的数值优化技术关注两个问题:

  1. 线搜索问题:给定一个函数 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) ,其梯度 g ( x ) = ∇ f ( x ) \boldsymbol{g}\left( \boldsymbol{x} \right) =\nabla \boldsymbol{f}\left( \boldsymbol{x} \right) g(x)=f(x) ,在迭代 k \boldsymbol{k} k下降方向 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)上的一个点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k),找到 α ( k ) > 0 \boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)}>0 α(k)>0使得对于 α = α ( k ) \boldsymbol{\alpha }=\boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)} α=α(k),沿着射线 x ( k ) + α p ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} x(k)+αp(k)函数 f \boldsymbol{f} f最小化,即

    α ( k ) = a r g min ⁡ α > 0 { f ( x ( k ) + α p ( k ) ) } \boldsymbol{\alpha }^{\left( \boldsymbol{k} \right)}=\boldsymbol{arg}\underset{\boldsymbol{\alpha }>0}{\min}\left\{ \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) \right\} α(k)=argα>0min{f(x(k)+αp(k))}

  2. 搜索方向问题:给定一个函数 f ( x ) \boldsymbol{f}\left( \boldsymbol{x} \right) f(x) 和点 x ( k ) \boldsymbol{x}^{\left( \boldsymbol{k} \right)} x(k),在迭代 k \boldsymbol{k} k处,找到一个单位矢量 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k),使得 f ( x ( k ) + α p ( k ) ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) f(x(k)+αp(k)) 对于 0 < α < α max ⁡ 0<\boldsymbol{\alpha }<\boldsymbol{\alpha }_{\max} 0<α<αmax是递减函数。 即 p ( k ) \boldsymbol{p}^{\left( \boldsymbol{k} \right)} p(k)是下降方向。

数值优化方法的不同之处在于确定搜索方向以及对梯度矢量和黑森矩阵进行近似和(或)更新的方法。

线搜索算法

线搜索算法有两种:精确线搜索和不精确线搜索算法。 精确线搜索算法会寻找精确步长 α ( α = α E x a c t ) \boldsymbol{\alpha }\left( \boldsymbol{\alpha }=\boldsymbol{\alpha }_{\boldsymbol{Exact}} \right) α(α=αExact) ,以便

α E x a c t = a r g min ⁡ α > 0 { f ( x ( k ) + α p ( k ) ) } \boldsymbol{\alpha }_{\boldsymbol{Exact}}=\boldsymbol{arg}\underset{\boldsymbol{\alpha }>0}{\min}\left\{ \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha p}^{\left( \boldsymbol{k} \right)} \right) \right\} αExact=argα>0min{f(x(k)+αp(k))}

在数字上不切实际。 不精确的线搜索算法寻找与精确步长 α E x a c t \boldsymbol{\alpha }_{\boldsymbol{Exact}} αExact近似的值。 从初始猜测 α 0 \boldsymbol{\alpha }^0 α0开始,逐步构建步长序列 α 0 , α 1 , α 2 , ⋯   , α k \boldsymbol{\alpha }^0,\boldsymbol{\alpha }^1,\boldsymbol{\alpha }^2,\cdots ,\boldsymbol{\alpha }^{\boldsymbol{k}} α0,α1,α2,,αk的序列,以使 α k ≈ α E x a c t \boldsymbol{\alpha }^{\boldsymbol{k}}\approx \boldsymbol{\alpha }_{\boldsymbol{Exact}} αkαExact迭代地完成。

最著名的不精确线搜索算法是回溯线搜索算法,该算法使用两个参数 a \boldsymbol{a} a b \boldsymbol{b} b并基于Armijo条件:

f ( x ( k ) + α k p ( k ) ) < f ( x ) + a α k g ( x ( k ) ) T p ( k ) \boldsymbol{f}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)}+\boldsymbol{\alpha }^{\boldsymbol{k}}\boldsymbol{p}^{\left( \boldsymbol{k} \right)} \right) <\boldsymbol{f}\left( \boldsymbol{x} \right) +\boldsymbol{a\alpha }^{\boldsymbol{k}}\boldsymbol{g}\left( \boldsymbol{x}^{\left( \boldsymbol{k} \right)} \right) ^{\boldsymbol{T}}\boldsymbol{p}^{\left( \boldsymbol{k} \right)} f(x(k)+αkp(k))<f(x)+aαkg(x(k))Tp(k)

参数 a \boldsymbol{a} a与Armijo的终止条件相关。 参数 0 < b < 1 0<\boldsymbol{b}<1 0<b<1用于在每次迭代中更新步长,其中 α j = b α j − 1 \boldsymbol{\alpha }^{\boldsymbol{j}}=\boldsymbol{b\alpha }^{\boldsymbol{j}-1} αj=bαj1,从大步长 α 0 \boldsymbol{\alpha }^0 α0(通常= 1)开始。

MATLAB函数LineSearch.m接收一个函数 f \boldsymbol{f} f,代表起始向量 x \boldsymbol{x} x f \boldsymbol{f} f梯度的向量 g \boldsymbol{g} g和单位(方向)向量 p \boldsymbol{p} p并返回最佳步长 α \boldsymbol{\alpha } α

function alpha = LineSearch(f, g, x, p)
 a = 0.3 ; b = 0.9 ;
 alpha = 1.0 ;
 while f(x+alpha*p) > f(x) + a*alpha*g(x)'*p
 alpha = b*alpha ;
 end
 end

函数LineSearch.py的Python代码是:

import numpy as np
 def LineSearch(f, g, x, p):
 a, b = 0.3, 0.9
 alpha = 1.0
 while f(x+alpha*p) > f(x) + a*alpha*np.dot(g(x), p):
 alpha *= b
 return alpha

最陡下降法

牛顿法

拟牛顿法

用MATLAB解决无约束的优化问题

用Gekko解决无约束的优化问题

解决约束的优化问题

MATLAB fmincon函数解决约束优化问题

Python解决约束最小化问题

Gekko Python解决约束优化

详情参阅 - 亚图跨际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值