微信搜索:编程笔记本。获取更多干货。
点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏
因最近课业要求,又去把之前没看懂的序列二次规划(SQP)算法重新研究了一遍,终于明白一二了,记录如下。
非线性规划问题是目标函数或约束条件中包含非线性函数的规划问题。一般说来,求解非线性规划问题比求解线性规划问题困难得多。而且,不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适用于各种问题的一般算法,已有的各种方法都有其特定的适用范围。
利用间接法求解最优化问题的途径一般有两种。一种是在可行域内使目标函数下降的迭代算法,如可行点法;另一种是利用目标函数和约束条件构造增广目标函数,借此将约束最优化问题转化为无约束最优化问题,如罚函数法、乘子法、序列二次规划法等。
序列二次规划算法是目前公认的求解约束非线性优化问题最有效的方法之一。与其他算法相比,序列二次规划法的优点是收敛性好、计算效率高、边界搜索能力强,因此受到了广泛的重视及应用。**在序列二次规划法的迭代过程中,每一步都需要求解一个或多个二次规划(QP)子问题。**一般地,由于二次规划子问题的求解难以利用原问题的稀疏性、对称性等良好特性,随着问题规模的扩大,其计算工作量和所需存储量是非常大的。因此,目前的序列二次规划算法一般只适用与中小规模问题。
序列二次规划(SQP)算法是将复杂的非线性约束最优化问题转化为比较简单的二次规划(QP)问题求解的算法。**所谓二次规划问题,就是目标函数为二次函数,约束函数为线性函数的最优化问题。**为此规划问题是最简单的非线性约束最优化问题。
1-1
m i n f ( X ) s . t . g u ( X ) ≤ 0 ( u = 1 , 2 , . . . , p ) h v ( X ) = 0 ( v = 1 , 2 , . . . , m ) min \ f(X) \\ s.t. \ \ \ \ \ g_u(X) \leq 0 \ \ (u=1,2,...,p) \ \ \ \ \\ \ \ \ \ \ \ \ \ h_v(X) = 0 \ \ (v=1,2,...,m) min f(X)s.t. gu(X)≤0 (u=1,2,...,p) hv(X)=0 (v=1,2,...,m)
利用泰勒展开将非线性约束问题(1-1)的目标函数在迭代点 X k X^{k} Xk 处简化成二次函数,将约束条件简化成线性函数后得到如下二次规划问题:
1-2
m i n f ( X ) = 1 2 [ X − X k ] T ∇ 2 f ( X k ) [ X − X k ] + ∇ f ( X k ) T [ X − X k ] s . t . ∇ g u ( X k ) T [ X − X k ] + g u ( X k ) ≤ 0 ( u = 1 , 2 , . . . , p ) ∇ h v ( X k ) T [ X − X k ] + h v ( X k ) = 0 ( v = 1 , 2 , . . . , m ) min \ f(X)=\frac{1}{2}[X - X^k]^T \nabla ^2 f(X^k) [X - X^k] + \nabla f(X^k) ^T [X - X^k]\\ s.t. \ \ \ \ \ \nabla g_u(X^k) ^T [X - X^k]+g_u(X^k) \leq 0 \ \ (u=1,2,...,p)\\ \ \ \ \ \ \ \ \ \ \ \ \ \nabla h_v(X^k) ^T [X - X^k]+h_v(X^k) = 0 \ \ (v=1,2,...,m) min f(X)=21[X−Xk]T∇2f(Xk)[X−Xk]+∇f(Xk)T[X−Xk]s.t. ∇gu(Xk)T[X−Xk]+gu(Xk)≤0 (u=1,2,...,p) ∇hv(Xk)T[X−Xk]+hv(Xk)=0 (v=1,2,...,m)
此问题是原约束最优化问题的近似问题,但其解不一定是原问题的可行点。为此,令:
S = X − X k S=X-X^k S=X−Xk
将上述二次规划问题变成关于变量 S S S 的问题,即:
1-3
m i n f ( X ) = 1 2 S T ∇ 2 f ( X k ) S + ∇ f ( X k ) T S s . t . ∇ g u ( X k ) T S + g u ( X k ) < = 0 ( u = 1 , 2 , . . . , p ) ∇ h v ( X k ) T S + h v ( X k ) = 0 ( v = 1 , 2 , . . . , m ) min \ f(X)=\frac{1}{2}S^T \nabla ^2 f(X^k) S + \nabla f(X^k) ^T S\\ s.t. \ \ \ \ \ \nabla g_u(X^k) ^T S+g_u(X^k) <= 0 \ \ (u=1,2,...,p)\\ \ \ \ \ \ \ \ \ \ \nabla h_v(X^k) ^T S+h_v(X^k) = 0 \ \ (v=1,2,...,m) min f(X)=21ST∇2f(Xk)S+∇f(Xk)TSs.t. ∇gu(Xk)TS+gu(Xk)<=0 (u=1,2,...,p) ∇hv(Xk)TS+hv(Xk)=0 (v=1,2,...,m)
令:
1-4
H = ∇ 2 f ( X k ) C = ∇ f ( X k ) A e q = [ ∇ h 1 ( X k ) , ∇ h 2 ( X k ) , . . . , ∇ h m ( X k ) ] T A = [ ∇ g 1 ( X k ) , ∇ g 2 ( X k ) , . . . , ∇ g p ( X k ) ] T B e q = [ h 1 ( X k ) , h 2 ( X k ) , . . . , h m ( X k ) ] T B = [ g 1 ( X k ) , g 2 ( X k ) , . . . , g p ( X k ) ] T H=\nabla ^2 f(X^k) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ C=\nabla f(X^k) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\\ A_{eq} = [\nabla h_1(X^k),\nabla h_2(X^k),...,\nabla h_m(X^k)] ^T \\ A = [\nabla g_1(X^k),\nabla g_2(X^k),...,\nabla g_p(X^k)] ^T \ \ \ \ \ \\ B_{eq} = [h_1(X^k),h_2(X^k),...,h_m(X^k)] ^T \ \ \ \ \ \ \ \ \ \ \\ B = [g_1(X^k),g_2(X^k),...,g_p(X^k)] ^T\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ H=∇2f(Xk) C=∇f(Xk) Aeq=[∇h1(Xk),∇h2(Xk),...,∇hm(Xk)]TA=[∇g1(Xk),∇g2(Xk),...,∇gp(Xk)]T Beq=[h1(Xk),h2(Xk),...,hm(Xk)]T B=[g1(Xk),g2(Xk),...,gp(Xk)]T
将式(1-4)写成二次规划问题的一般形式,即:
1-5
m i n 1 2 S T H S + C T S s . t . A S ≤ − B A e q S = − B e q min \ \frac{1}{2} S^THS + C^TS \\ s.t. \ \ \ \ \ AS \leq -B \ \ \ \ \ \ \ \ \ \ \\ \ \ \ \ \ \ A_{eq}S = -B_{eq} min 21STHS+CTSs.t. AS≤−B AeqS=−Beq
求解此二次规划问题,将其最优解 S ∗ S^{*} S∗ 作为原问题的下一个搜索方向 S k S^{k} Sk,并在该方向上进行原约束问题目标函数的约束一维搜索,这样就可以得到原约束问题的一个近似解 X k + 1 X^{k+1} Xk+1 。反复这一过程,就可以得到原问题的最优解。
上述思想得以实现的关键在于如何计算函数的二阶导数矩阵 H H H(DFP、BFGS),以及如何求解式(1-5)所示的二次规划问题。
二次规划问题的求解分为一下两种情况:等式约束二次规划问题、一般约束二次规划问题。
等式约束二次规划问题:
1-6
m i n 1 2 S T H S + C T S s . t . A e q S ≤ − B e q min \ \frac{1}{2} S^THS + C^TS \\ s.t. \ \ \ \ \ A_{eq}S \leq -B_{eq} min 21STHS+CTSs.t. AeqS≤−Beq
其拉格朗日函数为:
m i n L ( S , λ ) = 1 2 S T H S + C T S + λ T ( A e q S + B e q ) min \ L(S,\lambda)=\frac{1}{2} S^THS + C^TS + \lambda ^T (A_{eq}S +B_{eq}) min L(S,λ)=21STHS+CTS+λT(AeqS+Beq)
由多元函数的极值条件 ∇ L ( S , λ ) = 0 \nabla L(S,\lambda)=0 ∇L(S,λ)=0 可得:
H S + C + A e q T λ = 0 A e q S + B e q = 0 HS+C+A_{eq}^T\lambda=0 \\ A_{eq}S+B_{eq}=0 HS+C+AeqTλ=0AeqS+Beq=0
写成矩阵形式,即:
( H A e q T A e q 0 ) ( S λ ) = ( − C − B e q ) \begin{pmatrix} H & A_{eq}^T \\ A_{eq} & 0 \\ \end{pmatrix} \begin{pmatrix} S \\ \lambda \\ \end{pmatrix} = \begin{pmatrix} -C \\ -B_{eq} \\ \end{pmatrix} (HAeqAeqT0)(Sλ)=(−C−Beq)
式(1-6)其实就是以 [ S , λ ] T [S,\lambda]^{T} [S,λ]T 为变量的线性方程组,而且变量数和方程数均为 n + m n+m n+m 。由线性代数可知,此方程要么无解,要么有唯一解。如果有解,利用消元变换可以方便地求出该方程地唯一解,记作 [ S k + 1 , λ k + 1 ] T [S^{k+1},\lambda^{k+1}]^{T} [Sk+1,λk+1]T 。根据 K − T K-T K−T 条件,若此解中的乘子向量 λ k + 1 \lambda^{k+1} λk+1 不全为零,则 S k + 1 S^{k+1} Sk+1 就是等式约束二次规划问题(1-6)的最优解 S ∗ S^{*} S∗ 。
一般约束二次规划问题:
对于一般约束下的二次规划问题(1-5),在不等式约束条件中找出在迭代点 X k X^{k} Xk 处起作用的约束,将等式约束和起作用的不等式约束组成新的约束条件,构成新的等式约束二次规划问题:
m i n f ( X ) = 1 2 S T H S + C T S s . t . ∑ i ∈ E ⋃ I k ∑ j = 1 n a i j s j = − b j min \ f(X)=\frac{1}{2} S^THS + C^TS \\ s.t. \ \ \ \ \ \sum_{i\in E \bigcup I_k}\sum_{j=1}^n a_{ij}s_{j}=-b_{j} min f(X)=21STHS+CTSs.t. i∈E⋃Ik∑j=1∑naijsj=−bj
其中, E E E 代表等式约束下的集合, I k I_k Ik 代表不等式约束中起作用的约束的下标集合。
至此,一般约束二次规划问题就转化成了等式约束二次规划问题,可以用同样的方法求解。根据 K − T K-T K−T 条件,若解中对应于原等式约束条件的乘子不全为零,对应起作用的不等式约束条件的乘子大于等于零,则 S k + 1 S^{k+1} Sk+1 就是等式约束二次规划问题(1-5)的最优解 S ∗ S^{*} S∗ 。
综上所述,在迭代点 X k X^k Xk 上先进行矩阵 H k H^k Hk 的变更,再构造和求解相应的二次规划子问题,并将该子问题最优解 S ∗ S^* S∗ 作为下一次迭代的搜索方向 S k S^k Sk 。然后在该方向上对原非线性约束最优化问题目标函数进行约束一维搜索,得到下一个迭代点 X k X^k Xk ,并判断收敛精度是否满足。重复上述过程,直到迭代点 X k + 1 X^{k+1} Xk+1 最终满足终止准则,得到原非线性约束最优化问题的最优解为止。
[1] 给定初始点 X 0 X^0 X0 、收敛精度 ϵ \epsilon ϵ ,令 H 0 = I H^0=I H0=I ,置 k = 0 k=0 k=0 ;
[2] 将原问题在迭代点 X k X^k Xk 处简化成二次规划问题(1-5);
[3] 求解上述二次规划问题,并令 S k = S ∗ S^k=S^* Sk=S∗ ;
[4] 在方向 S k S^k Sk 上对原问题目标函数进行约束一维搜索,得到下一个迭代点 X k + 1 X^{k+1} Xk+1 ;
[5] 终止判断:若 X k + 1 X^{k+1} Xk+1 满足给定精度的终止准则,则将 X k + 1 X^{k+1} Xk+1 作为最优解, f ( X k + 1 ) f(X^{k+1}) f(Xk+1) 作为目标函数的最优代价,终止计算;否则,转 [6] ;
[6] 按照 DFP 或 BFGS 法修正 H k + 1 H^{k+1} Hk+1 ,令 k = k + 1 k=k+1 k=k+1 ,转 [2] 。