本博客可能随时删除或隐藏,请关注微信公众号,获取永久内容。
微信搜索:编程笔记本。获取更多干货。
点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏
因最近课业要求,又去把之前没看懂的序列二次规划(SQP)算法重新研究了一遍,终于明白一二了,记录如下。
1. 序列二次规划算法简介
非线性规划问题是目标函数或约束条件中包含非线性函数的规划问题。一般说来,求解非线性规划问题比求解线性规划问题困难得多。而且,不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适用于各种问题的一般算法,已有的各种方法都有其特定的适用范围。
利用间接法求解最优化问题的途径一般有两种。一种是在可行域内使目标函数下降的迭代算法,如可行点法;另一种是利用目标函数和约束条件构造增广目标函数,借此将约束最优化问题转化为无约束最优化问题,如罚函数法、乘子法、序列二次规划法等。
序列二次规划算法是目前公认的求解约束非线性优化问题最有效的方法之一。与其他算法相比,序列二次规划法的优点是收敛性好、计算效率高、边界搜索能力强,因此受到了广泛的重视及应用。**在序列二次规划法的迭代过程中,每一步都需要求解一个或多个二次规划(QP)子问题。**一般地,由于二次规划子问题的求解难以利用原问题的稀疏性、对称性等良好特性,随着问题规模的扩大,其计算工作量和所需存储量是非常大的。因此,目前的序列二次规划算法一般只适用与中小规模问题。
2. 序列二次规划算法的推导过程
序列二次规划(SQP)算法是将复杂的非线性约束最优化问题转化为比较简单的二次规划(QP)问题求解的算法。**所谓二次规划问题,就是目标函数为二次函数,约束函数为线性函数的最优化问题。**为此规划问题是最简单的非线性约束最优化问题。
2.1 序列二次规划算法思想
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−