《数学建模算法与应用》——学习笔记chapter3. 非线性规划

1. 非线性规划

1.1 非线性规划的定义

目标函数或约束条件中只要包含非线性函数,就称这种规划问题为非线性规划问题(Nonlinear Program, NLP)。
注:自然语言处理(Nature Language Process)也叫NLP。

1.2 LP与NLP区别

如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特别是可行域的顶点上达到;而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。

1.3 NLP的matlab解法

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} AxBAeqxBeqC(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 AXB,AeqX=Beq;LB 和 UB 是变量 x 的下界和上界,如果x无下界,则LB的各分量都为-inf,如果 x 无上界,则 UB的各分量都为 inf;NONLCON 是用 M 文件定义的非线性向量函数C(x),Ceq(x) ;OPTIONS定义了优化参数,可以使用Matlab缺省的参数设置。

1.4 求解非线性规划的基本迭代格式

即NLP的可行域为 K K K

  • x ∗ ∈ K x^*\in K xK,并且 f ( x ∗ ) ≤ f ( x ) , ∀ x ∈ K f(x^*)\leq f (x),\forall x \in K f(x)f(x),xK,则称 x ∗ x^* x是(NLP)的整体最优解, f ( x ∗ ) f(x^*) f(x)是(NP)的整体最优值。
  • f ( x ∗ ) < f ( x ) , ∀ x ∈ K , x ≠ x ∗ f(x^*)\lt f (x),\forall x \in K,x\neq x^* f(x)<f(x),xK,x=x,则称 x ∗ x^* x是(NLP)的严格整体最优解, f ( x ∗ ) f(x^*) f(x)是(NLP)的严格整体最优值。
  • 若存在 x ∗ x^* x的邻域 N δ ( x ∗ ) N_{\delta}(x^*) Nδ(x),使 f ( x ∗ ) ≤ f ( x ) , ∀ x ∈ N δ ( x ∗ ) ∩ K f(x^*)\leq f (x),\forall x \in N_{\delta}(x^*)\cap K f(x)f(x),xNδ(x)K,则称 x ∗ x^* x是(NLP)的局部最优解, f ( x ∗ ) f(x^*) f(x)是(NLP)的局部最优值。
  • f ( x ∗ ) < f ( x ) , ∀ x ∈ N δ ( x ∗ ) ∩ K f(x^*)\lt f (x),\forall x \in N_{\delta}(x^*)\cap K f(x)<f(x),xNδ(x)K,则称 x ∗ x^* x是(NLP)的严格局部最优解, f ( x ∗ ) f(x^*) f(x)是(NLP)的严格局部最优值。

与LP不同,NLP的解未必是全局最优(Global optima),一般采用迭代方法求它的最优解:从一个选定的初始点 x 0 ∈ R n x_0\in R^n x0Rn出发,按照某一特定的迭代规则产生一个点列,并且其极限点是(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} xkxk+1的方向(即搜索方向), t k ∈ R 1 t_k\in R^1 tkR1表示 x k → x k + 1 x_k\to x^{k+1} xkxk+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ˉ+tpK,则称向量 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问题的一般步骤如下:

  1. 选取初始点 x 0 x_0 x0,令 k : = 0 k:=0 k:=0
  2. 构造搜索方向,依照一定规划,构造 f f f在点 x k x^k xk处关于 K K K的可行下降方向作为搜索方向 p k p^k pk
  3. 寻求搜索步长。以 x k x^k xk为起点沿搜索方向 p k p^k pk寻求适当的步长 t k t^k tk,使目标函数值有某种意义的下降。
  4. 求出下一个迭代点。按迭代格式求 x k + 1 = x k + t k p k x^{k+1}=x^k+t_kp^k xk+1=xk+tkpk。 若 x k + 1 x^{k+1} xk+1已满足某种终止条件,停止迭代。
  5. x k + 1 x^{k+1} xk+1代替 x k x^k xk,回到2步。

1.5 凸函数、凸规划

函数 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)为严格凸函数时,其最优解必定唯一(假定最优解存在)。

2. 无约束问题

2.1 一维搜索法

一维搜索:沿某一已知方向求目标函数的极小点

  1. 试探法(“成功—失败”,斐波那契法,0.618 法等);
  2. 插值法(抛物线插值法,三次插值法等);
  3. 微积分中的求根法(切线法,二分法等)。

2.1.1 Fibonacci 法

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=Fn2+Fn1,n=2,3...
Fibonacci分数: F n − 1 F n \frac{F_{n-1}}{F_n} FnFn1

当用斐波那契法以 n 个探索点来缩短某一区间时,区间长度的第一次缩短率为 F n − 1 F n \frac{F_{n-1}}{F_n} FnFn1,其后各次分别为 F n − 2 F n − 1 \frac{F_{n-2}}{F_{n-1}} Fn1Fn2 F n − 3 F n − 2 \frac{F_{n-3}}{F_{n-2}} Fn2Fn3 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} bat1a=FnFn1
t 2 − a b − a = F n − 2 F n \frac{t_2-a}{b-a}=\frac{F_{n-2}}{F_n} bat2a=FnFn2
t 1 = a + F n − 1 F n ( b − a ) t_1=a+\frac{F_{n-1}}{F_n}(b-a) t1=a+FnFn1(ba)
t 2 = a + F n − 2 F n ( b − a ) t_2=a+\frac{F_{n-2}}{F_n}(b-a) t2=a+FnFn2(ba)它们关于[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 Fnbaδ(用来计算探索次数n)。

综上,可总结出Fibonacci法的具体算法步骤:(不妨设 t 2 < t 1 t_2t2<t1

  1. 选取初始数据,确定单峰区间 [ a o , b o ] [a_o,b_o] [ao,bo],给出搜索精度 δ > 0 \delta\gt0 δ>0,确定搜索次数n ;
  2. k = 1 , a = a 0 , b = b 0 k = 1,a = a_0,b = b_0 k=1,a=a0,b=b0,计算最初两个搜索点,计算 t 1 , t 2 t_1,t_2 t1,t2
  3. w h i l e   k < n − 1 ( 每 次 迭 代 都 有 一 个 点 是 上 一 次 留 下 的 ) f 1 = f ( t 1 ) , f 2 = f ( t 2 ) i f f 1 < f 2 a = t 2 ; t 2 = t 1 ; t 1 = a + F ( n − 1 − k ) F ( n − k ) ( b − a ) e l s e b = t 1 ; t 1 = t 2 ; t 2 = b + F ( n − 1 − k ) F ( n − k ) ( a − b ) e n d k + = 1 while\space kwhile k<n1f1=f(t1),f2=f(t2)iff1<f2a=t2;t2=t1;t1=a+F(nk)F(n1k)(ba)elseb=t1;t1=t2;t2=b+F(nk)F(n1k)(ab)endk+=1
  4. 进行至n=k-1时, t 1 = t 2 = a + b 2 t_1=t_2=\frac{a+b}{2} t1=t2=2a+b,这就无法借比较函数值 f ( t 1 ) f(t_1) f(t1) f ( t 2 ) f(t_2) f(t2)的大小确定最终区间,为此,取 { t 2 = a + b 2 t 1 = a + ( 1 2 + ϵ ) ( b − a ) \begin{cases} t_2=\frac{a+b}{2}\\ t_1=a+(\frac{1}{2}+\epsilon)(b-a) \end{cases} {t2=2a+bt1=a+(21+ϵ)(ba)其中ε 为任意小的数。在 t 1 , t 2 t_1,t_2 t1,t2这两点中,以函数值较小者为近似极小点,相应的函数值为近似极小值。并得最终区间 [ a , t 1 ] [a,t_1] [a,t1] [ t 2 , b ] [t_2,b] [t2,b]

注:如不理解可参考文末参考资料

2.1.2 0.618法

黄金分割: w = 1 − w w w=\frac{1-w}{w} w=w1w
黄金分割比: w = 5 − 1 2 ≈ 0.618 w=\frac{\sqrt5-1}{2}\approx0.618 w=25 10.618
黄金分割数ω 和 Fibonacci 分数之间有着重要的关系: w = lim ⁡ n → ∞ F n − 1 F n w=\lim\limits_{n\to\infin}\frac{F_{n-1}}{F_n} w=nlimFnFn1

用不变的区间缩短率0.618,代替斐波那契法每次不同的缩短率,就得到了黄金
分割法(0.618 法)。

每次缩短率为 μ \mu μ,则最后的区间长度为 ( b 0 − a 0 ) μ k − 1 (b_0-a_0)\mu^{k-1} (b0a0)μk1。当已知缩短的相对精度为 δ δ δ时,可用下式计算探索点个数 μ n − 1 ≤ δ \mu^{n-1}\leq\delta μn1δ

2.2 二次插值法

在搜索区间中,不断用低次(通常不超过三次)多项式来近似目标函数,并逐步用插值多项式的极小点来逼近最优解。

书上就介绍这么多……

2.3 无约束极值问题的解法

2.3.1 解析法

2.3.1.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处的最速下降方向。每一轮沿最速下降方向作一维搜索,来建立求解无约束极值问题的方法,称之为最速下降法。其具体步骤如下:

  1. 选取初始数据。选取初始点 x 0 x_0 x0,给定终止误差,令 k : = 0 k:=0 k:=0
  2. 求梯度向量。计算 ∇ f ( x ) \nabla f(x) f(x), 若 ∣ ∣ ∇ f ( x ) ∣ ∣ ≤ ε ||\nabla f(x)||\leq\varepsilon f(x)ε,停止迭代,输出 x k x^k xk。否则,进行下一步。
  3. p k = − ∇ f ( x ) p^k=-\nabla f(x) pk=f(x)
  4. 进行一维搜索。求 t k t_k tk,使得 f ( x k + t k p k ) = min ⁡ t ≥ 0 f ( x k + t p k ) f(x_k+t_kp^k)=\min\limits_{t\geq0} f(x_k+tp^k) f(xk+tkpk)=t0minf(xk+tpk)。令 x k + 1 = x k + t k p k , k : = k + 1 x^{k+1}=x^k+t_kp^k, k:=k+1 xk+1=xk+tkpk,k:=k+1,turn to step 2。

2.3.1.2 Newton法

目标函数 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(xxk)+21(xxk)T2f(xk)(xxk)(多元函数的二次泰勒展开式)

假定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} x122f(xk)xnx12f(xk)x1xn2f(xk)xn22f(xk)正定,则

  1. 函数的二阶偏导数恒 > 0
  2. 函数的变化率(斜率)即一阶导数始终处于递增状态
  3. 函数为凸函数

对二次逼近是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+1xk=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)]1f(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)]1f(xk),方向 p k p^k pk称为牛顿方向。Newton法具体步骤如下:

  1. 选取初始数据。选取初始点 x 0 x_0 x0,给定终止误差 ε > 0 ε> 0 ε>0,令 k : = 0 k := 0 k:=0
  2. 求梯度向量。计算 ∇ f ( x ) \nabla f(x) f(x), 若 ∣ ∣ ∇ f ( x ) ∣ ∣ ≤ ε ||\nabla f(x)||\leq\varepsilon f(x)ε,停止迭代,输出 x k x^k xk。否则进行下一步。
  3. 构造 Newton 方向。计算 [ ∇ 2 f ( x k ) ] − 1 [\nabla^2 f(x^k)]^{-1} [2f(xk)]1,取 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)]1f(xk)
  4. 求下一迭代点。令 x k + 1 = x k + p k , k : = k + 1 x^{k+1}=x^k+p^k, k:=k+1 xk+1=xk+pk,k:=k+1,转 2

2.3.1.3 变尺度法

变尺度法(Variable Metric Algorithm)是近20多年来发展起来的。既避免了计算二阶导数矩阵及其求逆过程,又比梯度法的收敛速度快,特别是对高维问题具有显著的优越性。牛顿法的搜索方向是 − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) -[\nabla^2 f(x^k)]^{-1}\nabla f(x^k) [2f(xk)]1f(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+1xk=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+1xk
则拟牛顿条件变为 Δ 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 变尺度法的计算步骤总结如下:

  1. 给定初始点 x 0 x_0 x0及梯度允许误差 ε > 0 ε > 0 ε>0
  2. ∣ ∣ ∇ f ( x ) ∣ ∣ ≤ ε ||\nabla f(x)||\leq\varepsilon f(x)ε,则 x 0 x_0 x0即为近似极小点,停止迭代,否则,转向下一步。
  3. H ˉ ( 0 ) = I , p 0 = − H ˉ ( 0 ) ∇ f ( x 0 ) \bar H^{(0)}=I, p^0=-\bar H^{(0)}\nabla f(x^0) Hˉ(0)=I,p0=Hˉ(0)f(x0),进行一维搜索,确定最佳步长 λ 0 , min ⁡ λ f ( x 0 + λ p 0 ) \lambda_0, \min\limits_\lambda f(x^0+\lambda p^0) λ0,λminf(x0+λp0),得到下一个近似点 x 1 = x 0 + λ 0 p 0 x^1= x^0+\lambda_0 p^0 x1=x0+λ0p0
  4. x k x^k xk,若 ∣ ∣ ∇ f ( x ) ∣ ∣ ≤ ε ||\nabla f(x)||\leq\varepsilon f(x)ε,则 x k x^k xk即为所求解,停止迭代,否则计算 H ˉ ( k + 1 ) \bar H^{(k+1)} Hˉ(k+1),令 p k = − H ˉ ( k ) ∇ f ( x k ) p^k=-\bar H^{(k)}\nabla f(x^k) pk=Hˉ(k)f(xk),在该方向上进行一维搜索,得 λ k λ_k λk,从而可得下一个近似点 x k + 1 = x k + λ k p k x^{k+1}= x^k+\lambda_k p^k xk+1=xk+λkpk
  5. x k + 1 x^{k+1} xk+1满足精度要求,则 x k + 1 x^{k+1} xk+1即为所求的近似解,否则,转回4,直到求出某点满足精度要求为止。

2.3.2 直接法

问题的目标函数不可导或导函数的解析式难以表示时,人们一般需要使用直接搜索方法。

Powell 方法:由所谓基本搜索、加速搜索和调整搜索方向三部分组成,具体步骤如下:

  1. 选取初始数据。选取初始点 x 0 x_0 x0,n 个线性无关初始方向,组成初搜索方向组 p 0 ⋅ ⋅ ⋅ p n − 1 {p^0\cdot\cdot\cdot p^{n-1}} p0pn1。给定终止误差 ε > 0 ε > 0 ε>0,令 k : = 0 k := 0 k:=0
  2. 进行基本搜索。令 y o : = x k y_o:=x^k yo:=xk,依次沿 p 0 ⋅ ⋅ ⋅ p n − 1 {p^0\cdot\cdot\cdot p^{n-1}} p0pn1中的方向进行一维搜索。对应地得到辅助迭代点 y 1 ⋅ ⋅ ⋅ y n {y^1\cdot\cdot\cdot y^{n}} y1yn,即
    y j = y j − 1 + t j − 1 p j − 1 f ( y j − 1 + t j − 1 p j − 1 ) = min ⁡ t ≥ 0 f ( y j − 1 + t p j − 1 ) y^j=y^{j-1}+t_{j-1}p^{j-1}\\ f(y^{j-1}+t_{j-1}p^{j-1})=\min\limits_{t\geq0}f(y^{j-1}+tp^{j-1}) yj=yj1+tj1pj1f(yj1+tj1pj1)=t0minf(yj1+tpj1)
  3. 构造加速方向。令 p n = y n − y 0 p^n=y^n-y^0 pn=yny0,若 ∣ ∣ p n ∣ ∣ ≤ ϵ ||p^n||\leq\epsilon pnϵ,停止迭代,输出 x k + 1 = y n x^{k+1}=y^n xk+1=yn,否则进行下一步。
  4. 确定调整方向。通过 f ( y m − 1 ) − f ( y m ) = max ⁡ { f ( y j − 1 ) − f ( y j ) ∣ 1 ≤ j ≤ n } f(y^{m-1})-f(y^m)=\max\{ f(y^{j-1})-f(y^j)|1\leq j\leq n\} f(ym1)f(ym)=max{f(yj1)f(yj)1jn}找出m,若 f ( y 0 ) − 2 f ( y n ) + f ( 2 y n − y 0 ) < 2 [ f ( y m − 1 ) − f ( y m ) ] f(y^0)-2f(y^n)+f(2y^n-y^0)\lt 2[f(y^{m-1})-f(y^m)] f(y0)2f(yn)+f(2yny0)<2[f(ym1)f(ym)]成立进行5,否则进行6。
  5. 调整搜索方向组。令 x k + 1 = y n + t n p n : f ( y n + t p n ) = min ⁡ t ≥ 0 f ( y n + t p n ) { p 0 ⋅ ⋅ ⋅ p n + 1 } k + 1 : = { p 0 ⋅ ⋅ ⋅ p m − 1 , p m + 1 ⋅ ⋅ ⋅ p n − 1 , p n } k : = k + 1 x^{k+1}=y^n+t_np^n: f(y^n+t_p^n)=\min\limits_{t\geq0}f(y^n+tp^n)\\ \{p^0\cdot\cdot\cdot p^{n+1}\}_{k+1}:=\{p^0\cdot\cdot\cdot p^{m-1},p^{m+1}\cdot\cdot\cdot p^{n-1}, p^n\}\\ k:=k+1 xk+1=yn+tnpn:f(yn+tpn)=t0minf(yn+tpn){p0pn+1}k+1:={p0pm1,pm+1pn1,pn}k:=k+1转到2
  6. 不调整搜索方向组。 x k + 1 : = y n , k : = k + 1 x^{k+1}:=y^n,k:=k+1 xk+1:=ynk:=k+1,转到2。

2.4 Matlab求无约束极值问题

[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,...)

3. 约束极值问题

3.1 二次规划

若某非线性规划的目标函数为自变量 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.{AxbAeqx=beq
这里 H 是实对称矩阵, f ,b 是列向量, A 是相应维数的矩阵。

[X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 

返回值 X 是决策向量 x 的值,返回值 FVAL 是目标函数在 x 处的值。

3.2 罚函数法

罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因而也称这种方法为序列无约束最小化技术,简记为 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=1rhj(x)0,j=1skm(x)=0,m=1t
取一个充分大的数 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=1rmax(gi(x),0)Mi=1smax(hi(x),0)+Mi=1tki(x)

则以增广目标函数 P(x, M ) 为目标函数的无约束极值问题minP(x,M )的最优解 x 也是原问题的最优解。

3.3 Matlab 求约束极值问题

在 Matlab 优化工具箱中,用于求解约束最优化问题的函数有:fminbnd、fmincon、quadprog、fseminf、fminimax,详细使用方法可在matlab中使用help/doc + 函数名得方式查看.。

3.3.1 fminbnd 函数

求单变量非线性函数在区间上的极小值

[X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS)

它的返回值是极小点 x 和函数的极小值。这里 fun 是用 M 文件定义的函数或 Matlab 中的单变量数学函数。

3.3.2 fseminf 函数

X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq)

3.3.3 fminimax 函数

X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON)

3.4 Matlab 优化工具箱的用户图形界面解法

Matlab 优化工具箱中的 optimtool 命令提供了优化问题的用户图形界面解法。optimtool 可应用到所有优化问题的求解,计算结果可以输出到 Matlab 工作空间中。

参考资料

Fibonacci法与黄金分割法
海森矩阵

你可能感兴趣的:(《数学建模算法与应用笔记》,算法,matlab,数学建模,线性代数)