目标函数或约束条件中只要包含非线性函数,就称这种规划问题为非线性规划问题(Nonlinear Program, NLP)。
注:自然语言处理(Nature Language Process)也叫NLP。
如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特别是可行域的顶点上达到;而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。
NLP的一般形式:
min f ( x ) \min f(x) minf(x)
{ A x ≤ B A e q ⋅ x ≤ B e q C ( x ) ≤ 0 C e q ( x ) = 0 \begin{cases} Ax\leq B\\ Aeq·x\leq Beq\\ C(x)\leq 0\\ Ceq(x)=0 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧Ax≤BAeq⋅x≤BeqC(x)≤0Ceq(x)=0
其中 f ( x ) f(x) f(x)是标量函数, A , B , A e q , B e q A, B, Aeq,Beq A,B,Aeq,Beq是相应维数的矩阵和向量, C ( x ) , C e q ( x ) C(x),Ceq(x) C(x),Ceq(x)是非线性向量函数。
Matlab 中的命令是:
X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
它的返回值是向量 x x x,其中 F U N FUN FUN是用 M M M文件定义的函数 f ( x ) f (x) f(x); X 0 X0 X0 是 x x x的初始值; A , B , A e q , B e q A,B,Aeq,Beq A,B,Aeq,Beq定义了线性约束 A ∗ X ≤ B , A e q ∗ X = B e q A* X ≤ B, Aeq*X = Beq A∗X≤B,Aeq∗X=Beq;LB 和 UB 是变量 x 的下界和上界,如果x无下界,则LB的各分量都为-inf,如果 x 无上界,则 UB的各分量都为 inf;NONLCON 是用 M 文件定义的非线性向量函数C(x),Ceq(x) ;OPTIONS定义了优化参数,可以使用Matlab缺省的参数设置。
即NLP的可行域为 K K K:
与LP不同,NLP的解未必是全局最优(Global optima),一般采用迭代方法求它的最优解:从一个选定的初始点 x 0 ∈ R n x_0\in R^n x0∈Rn出发,按照某一特定的迭代规则产生一个点列,并且其极限点是(NLP)的最优解。
x k + 1 = x k + t k p k x^{k+1}=x^k+t_kp^k xk+1=xk+tkpk
其中 ∣ p k ∣ = 1 |p^k|=1 ∣pk∣=1,为一方向向量,表示从 x k → x k + 1 x_k\to x^{k+1} xk→xk+1的方向(即搜索方向), t k ∈ R 1 t_k\in R^1 tk∈R1表示 x k → x k + 1 x_k\to x^{k+1} xk→xk+1迭代的步幅。这就是求解非线性规划模型(NLP)的基本迭代格式,其应用的关键在于,如何构造每一轮的搜索方向和确定适当的步长。
下降方向: 设 x ˉ ∈ R n , P ≠ 0 , ∃ δ > 0 , 使 f ( x ˉ + t p ) < x ˉ , ∀ t ∈ ( 0 , δ ) \bar x\in R^n, P\neq0,\exist\delta\gt0, 使f(\bar x+tp)\lt\bar x, \forall t\in(0,\delta) xˉ∈Rn,P=0,∃δ>0,使f(xˉ+tp)<xˉ,∀t∈(0,δ),则称 P P P为 f f f在 x ˉ \bar x xˉ处的下降方向。
可行方向: 设 x ˉ ∈ R n , P ≠ 0 , ∃ t > 0 , 使 x ˉ + t p ∈ K \bar x\in R^n, P\neq0,\exist t\gt0, 使\bar x+tp\in K xˉ∈Rn,P=0,∃t>0,使xˉ+tp∈K,则称向量 p p p是点 x x x处关于 K K K的可行方向。
一个向量 p p p,若既是函数 f f f在点 x x x处的下降方向,又是该点关于区域 K K K的可行方向,称之为函数 f f f在点 x x x处关于 K K K的可行下降方向。
使用基本迭代格式求解NLP问题的一般步骤如下:
函数 f f f的定于域是凸集且 ∀ α ∈ ( 0 , 1 ) \forall\alpha\in(0,1) ∀α∈(0,1)以及任意两点 x ( 1 ) , x ( 2 ) x^{(1)}, x^{(2)} x(1),x(2),有 f ( α x ( 1 ) + ( 1 − α x ( 2 ) ) ≤ α x ( 1 ) + ( 1 − α x ( 2 ) f(\alpha x^{(1)}+(1-\alpha x^{(2)})\leq\alpha x^{(1)}+(1-\alpha x^{(2)} f(αx(1)+(1−αx(2))≤αx(1)+(1−αx(2),则称 f f f为凸函数。若 ∀ α ∈ ( 0 , 1 ) \forall\alpha\in(0,1) ∀α∈(0,1)以及任意两点 x ( 1 ) ≠ x ( 2 ) x^{(1)}\neq x^{(2)} x(1)=x(2),有 f ( α x ( 1 ) + ( 1 − α x ( 2 ) ) < α x ( 1 ) + ( 1 − α x ( 2 ) f(\alpha x^{(1)}+(1-\alpha x^{(2)})\lt\alpha x^{(1)}+(1-\alpha x^{(2)} f(αx(1)+(1−αx(2))<αx(1)+(1−αx(2),则称 f f f为严格凸函数。
对于一个规划问题,如果其目标函数与约束函数均为凸函数,则该问题称为一个凸规划问题(Convex optimization program),凸规划的可行域为凸集,其局部最优解即为全局最优解,而且其最优解的集合形成一个凸集。凸规划的目标函数 f (x)为严格凸函数时,其最优解必定唯一(假定最优解存在)。
一维搜索:沿某一已知方向求目标函数的极小点
Fibonacci函数(数列):
F 0 = F 1 = 1 ; F n = F n − 2 + F n − 1 , n = 2 , 3... F_0=F_1=1;\\ F_n=F_{n-2}+F_{n-1}, n=2,3... F0=F1=1;Fn=Fn−2+Fn−1,n=2,3...
Fibonacci分数: F n − 1 F n \frac{F_{n-1}}{F_n} FnFn−1
当用斐波那契法以 n 个探索点来缩短某一区间时,区间长度的第一次缩短率为 F n − 1 F n \frac{F_{n-1}}{F_n} FnFn−1,其后各次分别为 F n − 2 F n − 1 \frac{F_{n-2}}{F_{n-1}} Fn−1Fn−2 F n − 3 F n − 2 \frac{F_{n-3}}{F_{n-2}} Fn−2Fn−3… F 1 F 2 \frac{F_{1}}{F_2} F2F1,设 t 1 , t 2 t_1, t_2 t1,t2为区间[a,b]上的第一个和第二个探索点,由缩短率可知:
t 1 − a b − a = F n − 1 F n \frac{t_1-a}{b-a}=\frac{F_{n-1}}{F_n} b−at1−a=FnFn−1
t 2 − a b − a = F n − 2 F n \frac{t_2-a}{b-a}=\frac{F_{n-2}}{F_n} b−at2−a=FnFn−2,
即 t 1 = a + F n − 1 F n ( b − a ) t_1=a+\frac{F_{n-1}}{F_n}(b-a) t1=a+FnFn−1(b−a)
t 2 = a + F n − 2 F n ( b − a ) t_2=a+\frac{F_{n-2}}{F_n}(b-a) t2=a+FnFn−2(b−a)它们关于[a,b]是对称的点(可计算得到 t 1 + t 2 = ( a + b ) / 2 t_1+t_2=(a+b)/2 t1+t2=(a+b)/2)。
如果要求经过一系列探索点搜索之后,使最后的探索点和最优解之间的距离不超
过精度 δ > 0 δ > 0 δ>0,这就要求最后区间的长度不超过 δ δ δ,即
b − a F n ≤ δ \frac{b-a}{F_n}\leq\delta Fnb−a≤δ(用来计算探索次数n)。
综上,可总结出Fibonacci法的具体算法步骤:(不妨设 t 2 < t 1 t_2
注:如不理解可参考文末参考资料
黄金分割: w = 1 − w w w=\frac{1-w}{w} w=w1−w
黄金分割比: w = 5 − 1 2 ≈ 0.618 w=\frac{\sqrt5-1}{2}\approx0.618 w=25−1≈0.618
黄金分割数ω 和 Fibonacci 分数之间有着重要的关系: w = lim n → ∞ F n − 1 F n w=\lim\limits_{n\to\infin}\frac{F_{n-1}}{F_n} w=n→∞limFnFn−1
用不变的区间缩短率0.618,代替斐波那契法每次不同的缩短率,就得到了黄金
分割法(0.618 法)。
每次缩短率为 μ \mu μ,则最后的区间长度为 ( b 0 − a 0 ) μ k − 1 (b_0-a_0)\mu^{k-1} (b0−a0)μk−1。当已知缩短的相对精度为 δ δ δ时,可用下式计算探索点个数 μ n − 1 ≤ δ \mu^{n-1}\leq\delta μn−1≤δ
在搜索区间中,不断用低次(通常不超过三次)多项式来近似目标函数,并逐步用插值多项式的极小点来逼近最优解。
书上就介绍这么多……
微积分告诉我们,点 x k x^k xk的负梯度方向 p k = − ∇ f ( x ) p^k=-\nabla f(x) pk=−∇f(x),是从点 x k x^k xk出发使 f f f下降最快的方向。为此,称负梯度方向 p k = − ∇ f ( x ) p^k=-\nabla f(x) pk=−∇f(x)为 f f f在点 x k x^k xk处的最速下降方向。每一轮沿最速下降方向作一维搜索,来建立求解无约束极值问题的方法,称之为最速下降法。其具体步骤如下:
目标函数 f f f在点 x k x^k xk处的二次逼近式: f ( X ) ≈ Q ( x ) = f ( x k ) + ∇ f ( x k ) T ( x − x k ) + 1 2 ( x − x k ) T ∇ 2 f ( x k ) ( x − x k ) f(X)\approx Q(x)=f(x^k)+\nabla f(x^k)^T(x-x^k)+\frac{1}{2}(x-x^k)^T\nabla^2f(x^k)(x-x^k) f(X)≈Q(x)=f(xk)+∇f(xk)T(x−xk)+21(x−xk)T∇2f(xk)(x−xk)(多元函数的二次泰勒展开式)
假定Hesse矩阵 [ ∂ 2 f ( x k ) ∂ x 1 2 ⋯ ∂ 2 f ( x k ) ∂ x 1 ∂ x n ⋮ ⋯ ⋮ ∂ 2 f ( x k ) ∂ x n ∂ x 1 ⋯ ∂ 2 f ( x k ) ∂ x n 2 ] \begin{bmatrix} \frac{\partial^2f(x^k)}{\partial x_1^2}&\cdots&\frac{\partial^2f(x^k)}{\partial x_1\partial x_n}\\ \vdots&\cdots&\vdots\\ \frac{\partial^2f(x^k)}{\partial x_n\partial x_1}&\cdots&\frac{\partial^2f(x^k)}{\partial x_n^2} \end{bmatrix} ⎣⎢⎢⎡∂x12∂2f(xk)⋮∂xn∂x1∂2f(xk)⋯⋯⋯∂x1∂xn∂2f(xk)⋮∂xn2∂2f(xk)⎦⎥⎥⎤正定,则
对二次逼近是Q(x)再求偏导数得到:
∇ Q ( x k + 1 ) = ∇ f ( x k ) + ∇ 2 f ( x k ) ( x k + 1 − x k = 0 \nabla Q(x^{k+1})=\nabla f(x^k)+\nabla^2 f(x^k)(x^{k+1}-x^{k}=0 ∇Q(xk+1)=∇f(xk)+∇2f(xk)(xk+1−xk=0
解得 x k + 1 = x k − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) x^{k+1}=x^k-[\nabla^2 f(x^k)]^{-1}\nabla f(x^k) xk+1=xk−[∇2f(xk)]−1∇f(xk)
可知搜索方向为: p k = − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) p^k=-[\nabla^2 f(x^k)]^{-1}\nabla f(x^k) pk=−[∇2f(xk)]−1∇f(xk),方向 p k p^k pk称为牛顿方向。Newton法具体步骤如下:
变尺度法(Variable Metric Algorithm)是近20多年来发展起来的。既避免了计算二阶导数矩阵及其求逆过程,又比梯度法的收敛速度快,特别是对高维问题具有显著的优越性。牛顿法的搜索方向是 − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) -[\nabla^2 f(x^k)]^{-1}\nabla f(x^k) −[∇2f(xk)]−1∇f(xk),为了不计算二阶导数矩阵及其逆阵,我们设法构造另一个矩阵(记为 H ˉ ( k ) \bar H^{(k)} Hˉ(k)),用它来逼近二阶导数矩阵的逆阵 [ ∇ 2 f ( x k ) ] − 1 [\nabla^2 f(x^k)]^{-1} [∇2f(xk)]−1,这一类方法也称拟牛顿法(Quasi-Newton Method)。
Hesse阵的逆阵的第 k + 1 k+1 k+1次近似矩阵 H ˉ ( k + 1 ) \bar H^{(k+1)} Hˉ(k+1)满足关系式:
x k + 1 − x k = H ˉ ( k + 1 ) [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] x^{k+1}-x^k=\bar H^{(k+1)}[\nabla f(x^{k+1})-\nabla f(x^k)] xk+1−xk=Hˉ(k+1)[∇f(xk+1)−∇f(xk)](可理解为二阶导数),这就是拟牛顿条件。
令 { Δ G ( k ) = ∇ f ( x k + 1 ) − ∇ f ( x k ) Δ x k = x k + 1 − x k \begin{cases} \Delta G^{(k)}=\nabla f(x^{k+1})-\nabla f(x^k)\\ \Delta x^k=x^{k+1}-x^k \end{cases} {ΔG(k)=∇f(xk+1)−∇f(xk)Δxk=xk+1−xk,
则拟牛顿条件变为 Δ x k = H ˉ ( k + 1 ) Δ G ( k ) \Delta x^k=\bar H^{(k+1)}\Delta G^{(k)} Δxk=Hˉ(k+1)ΔG(k)。
假定 H ˉ ( k ) \bar H^{(k)} Hˉ(k)已知,通过 H ˉ ( k + 1 ) = H ˉ ( k ) + Δ H ˉ ( k ) \bar H^{(k+1)}=\bar H^{(k)}+\Delta\bar H^{(k)} Hˉ(k+1)=Hˉ(k)+ΔHˉ(k), Δ H ˉ ( k ) \Delta\bar H^{(k)} ΔHˉ(k)称为低k次校正矩阵: Δ H ˉ ( k ) = Δ x k Δ ( x k ) T ( Δ G k ) T Δ ( x k ) − H ˉ ( k ) Δ G ( k ) Δ ( G k ) T Δ H ( k ) ( Δ G k ) T H ˉ k Δ G k \Delta\bar H^{(k)}=\frac{\Delta x^k\Delta (x^k)^T}{(\Delta G^k)^T\Delta (x^k)}-\frac{\bar H^{(k)}\Delta G^{(k)}\Delta (G^k)^T\Delta H^{(k)}}{(\Delta G^k)^T\bar H^k\Delta G^k} ΔHˉ(k)=(ΔGk)TΔ(xk)ΔxkΔ(xk)T−(ΔGk)THˉkΔGkHˉ(k)ΔG(k)Δ(Gk)TΔH(k),
从而: H ˉ ( k + 1 ) = H ˉ ( k ) + Δ x k Δ ( x k ) T ( Δ G k ) T Δ ( x k ) − H ˉ ( k ) Δ G ( k ) Δ ( G k ) T Δ H ( k ) ( Δ G k ) T H ˉ k Δ G k \bar H^{(k+1)}=\bar H^{(k)}+\frac{\Delta x^k\Delta (x^k)^T}{(\Delta G^k)^T\Delta (x^k)}-\frac{\bar H^{(k)}\Delta G^{(k)}\Delta (G^k)^T\Delta H^{(k)}}{(\Delta G^k)^T\bar H^k\Delta G^k} Hˉ(k+1)=Hˉ(k)+(ΔGk)TΔ(xk)ΔxkΔ(xk)T−(ΔGk)THˉkΔGkHˉ(k)ΔG(k)Δ(Gk)TΔH(k)
上述矩阵称为尺度矩阵。通常,我们取第一个尺度矩阵 H ( 0 ) H^{(0)} H(0)为单位阵,以后的尺度矩阵按上式逐步形成。
现将 DFP 变尺度法的计算步骤总结如下:
问题的目标函数不可导或导函数的解析式难以表示时,人们一般需要使用直接搜索方法。
Powell 方法:由所谓基本搜索、加速搜索和调整搜索方向三部分组成,具体步骤如下:
[X,FVAL]=FMINUNC(FUN,X0,OPTIONS,P1,P2, ...)
返回值 X 是所求得的极小点,FVAL 是函数的极小值,其它返回值的含义参见相关的帮助。FUN 是一个 M 文件,当 FUN 只有一个返回值时,它的返回值是函数 f (x);当 FUN 有两个返回值时,它的第二个返回值是 f (x)的梯度向量;当 FUN 有三个返回值时,它的第三个返回值是 f (x)的二阶导数阵(Hessian 阵)。X0 是向量 x 的初值,OPTIONS 是优化参数,可以使用缺省参数。P1,P2 是可以传递给 FUN 的一些参数。
多元函数极值求解函数如下:
[X,FVAL,EXITFLAG,OUTPUT]=FMINSEARCH(FUN,X0,OPTIONS,P1,P2,...)
若某非线性规划的目标函数为自变量 x 的二次函数,约束条件又全是线性的,就称这种规划为二次规划。其标准形式如下:
min 1 2 x T H x + f T x , s . t . { A x ≤ b A e q ⋅ x = b e q \min\frac{1}{2}x^THx+f^Tx,\\ s.t.\begin{cases} Ax\leq b\\ Aeq\cdot x=beq \end{cases} min21xTHx+fTx,s.t.{Ax≤bAeq⋅x=beq
这里 H 是实对称矩阵, f ,b 是列向量, A 是相应维数的矩阵。
[X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
返回值 X 是决策向量 x 的值,返回值 FVAL 是目标函数在 x 处的值。
罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因而也称这种方法为序列无约束最小化技术,简记为 SUMT (Sequential Unconstrained Minization Technique)。其思想是,利用问题中的约束函数作出适当的罚函数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法。
考虑问题:
min f ( x ) s . t . { g i ( x ) ≤ 0 , i = 1 ⋅ ⋅ ⋅ r h j ( x ) ≥ 0 , j = 1 ⋅ ⋅ ⋅ s k m ( x ) = 0 , m = 1 ⋅ ⋅ ⋅ t \min f(x)\\ s.t.\begin{cases} g_i(x)\leq0, i=1\cdot\cdot\cdot r\\ h_j(x)\geq0, j=1\cdot\cdot\cdot s\\ k_m(x)=0, m=1\cdot\cdot\cdot t \end{cases} minf(x)s.t.⎩⎪⎨⎪⎧gi(x)≤0,i=1⋅⋅⋅rhj(x)≥0,j=1⋅⋅⋅skm(x)=0,m=1⋅⋅⋅t
取一个充分大的数 M > 0 ,构造函数
P ( x , M ) = f ( x ) + M ∑ i = 1 r max ( g i ( x ) , 0 ) − M ∑ i = 1 s max ( h i ( x ) , 0 ) + M ∑ i = 1 t ∣ ∣ k i ( x ) ∣ ∣ P(x,M)=f(x)+M\sum\limits_{i=1}^{r}\max(g_i(x),0)-M\sum\limits_{i=1}^{s}\max(h_i(x),0)+M\sum\limits_{i=1}^{t}||k_i(x)|| P(x,M)=f(x)+Mi=1∑rmax(gi(x),0)−Mi=1∑smax(hi(x),0)+Mi=1∑t∣∣ki(x)∣∣。
则以增广目标函数 P(x, M ) 为目标函数的无约束极值问题minP(x,M )的最优解 x 也是原问题的最优解。
在 Matlab 优化工具箱中,用于求解约束最优化问题的函数有:fminbnd、fmincon、quadprog、fseminf、fminimax,详细使用方法可在matlab中使用help/doc + 函数名得方式查看.。
求单变量非线性函数在区间上的极小值
[X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS)
它的返回值是极小点 x 和函数的极小值。这里 fun 是用 M 文件定义的函数或 Matlab 中的单变量数学函数。
X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq)
X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON)
Matlab 优化工具箱中的 optimtool 命令提供了优化问题的用户图形界面解法。optimtool 可应用到所有优化问题的求解,计算结果可以输出到 Matlab 工作空间中。
Fibonacci法与黄金分割法
海森矩阵