本博客可能随时删除或隐藏,请关注微信公众号,获取永久内容。
微信搜索:编程笔记本。获取更多干货。

点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏

因最近课业要求,又去把之前没看懂的序列二次规划(SQP)算法重新研究了一遍,终于明白一二了,记录如下。

1. 序列二次规划算法简介

非线性规划问题是目标函数或约束条件中包含非线性函数的规划问题。一般说来,求解非线性规划问题比求解线性规划问题困难得多。而且,不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适用于各种问题的一般算法,已有的各种方法都有其特定的适用范围。

利用间接法求解最优化问题的途径一般有两种。一种是在可行域内使目标函数下降的迭代算法,如可行点法;另一种是利用目标函数和约束条件构造增广目标函数,借此将约束最优化问题转化为无约束最优化问题,如罚函数法、乘子法、序列二次规划法等。

序列二次规划算法是目前公认的求解约束非线性优化问题最有效的方法之一。与其他算法相比,序列二次规划法的优点是收敛性好、计算效率高、边界搜索能力强,因此受到了广泛的重视及应用。**在序列二次规划法的迭代过程中,每一步都需要求解一个或多个二次规划(QP)子问题。**一般地,由于二次规划子问题的求解难以利用原问题的稀疏性、对称性等良好特性,随着问题规模的扩大,其计算工作量和所需存储量是非常大的。因此,目前的序列二次规划算法一般只适用与中小规模问题。

2. 序列二次规划算法的推导过程

序列二次规划(SQP)算法是将复杂的非线性约束最优化问题转化为比较简单的二次规划(QP)问题求解的算法。**所谓二次规划问题,就是目标函数为二次函数,约束函数为线性函数的最优化问题。**为此规划问题是最简单的非线性约束最优化问题。

2.1 序列二次规划算法思想

1-1
minf(X)s.t.gu(X)≤0(u=1,2,...,p)hv(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)的目标函数在迭代点 XkX^{k}Xk 处简化成二次函数,将约束条件简化成线性函数后得到如下二次规划问题:

1-2
minf(X)=12[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)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−XkS=X-X^kS=X−Xk

将上述二次规划问题变成关于变量 SSS 的问题,即:

1-3
minf(X)=12ST∇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)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)=21​ST∇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=∇2f(Xk)C=∇f(Xk)Aeq=[∇h1(Xk),∇h2(Xk),...,∇hm(Xk)]TA=[∇g1(Xk),∇g2(Xk),...,∇gp(Xk)]TBeq=[h1(Xk),h2(Xk),...,hm(Xk)]TB=[g1(Xk),g2(Xk),...,gp(Xk)]TH=\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
min12STHS+CTSs.t.AS=−BAeqS=−Beqmin \ \frac{1}{2} S^THS + C^TS \\ s.t. \ \ \ \ \ AS = -B \ \ \ \ \ \ \ \ \ \ \\ \ \ \ \ \ \ A_{eq}S = -B_{eq}min 21​STHS+CTSs.t.     AS=−B                Aeq​S=−Beq​

求解此二次规划问题,将其最优解 S∗S^{*}S∗ 作为原问题的下一个搜索方向 SkS^{k}Sk,并在该方向上进行原约束问题目标函数的约束一维搜索,这样就可以得到原约束问题的一个近似解 Xk+1X^{k+1}Xk+1 。反复这一过程,就可以得到原问题的最优解。

上述思想得以实现的关键在于如何计算函数的二阶导数矩阵 HHH(DFP、BFGS),以及如何求解式(1-5)所示的二次规划问题。

2.2 二次规划问题的求解

二次规划问题的求解分为一下两种情况:等式约束二次规划问题、一般约束二次规划问题。

等式约束二次规划问题:

1-6
min12STHS+CTSs.t.AeqS=−Beqmin \ \frac{1}{2} S^THS + C^TS \\ s.t. \ \ \ \ \ A_{eq}S = -B_{eq} min 21​STHS+CTSs.t.     Aeq​S=−Beq​

其拉格朗日函数为:

minL(S,λ)=12STHS+CTS+λT(AeqS+Beq)min \ L(S,\lambda)=\frac{1}{2} S^THS + C^TS + \lambda ^T (A_{eq}S +B_{eq})min L(S,λ)=21​STHS+CTS+λT(Aeq​S+Beq​)

由多元函数的极值条件 ∇L(S,λ)=0\nabla L(S,\lambda)=0∇L(S,λ)=0 可得:

HS+C+AeqTλ=0AeqS+Beq=0HS+C+A_{eq}^T\lambda=0 \\ A_{eq}S+B_{eq}=0HS+C+AeqT​λ=0Aeq​S+Beq​=0

写成矩阵形式,即:

(HAeqTAeq0)(Sλ)=(−C−Beq)\begin{pmatrix} H & A_{eq}^T \\ A_{eq} & 0 \\ \end{pmatrix} \begin{pmatrix} S \\ \lambda \\ \end{pmatrix} = \begin{pmatrix} -C \\ -B_{eq} \\ \end{pmatrix} (HAeq​​AeqT​0​)(Sλ​)=(−C−Beq​​)

式(1-6)其实就是以 [S,λ]T[S,\lambda]^{T}[S,λ]T 为变量的线性方程组,而且变量数和方程数均为 n+mn+mn+m 。由线性代数可知,此方程要么无解,要么有唯一解。如果有解,利用消元变换可以方便地求出该方程地唯一解,记作 [Sk+1,λk+1]T[S^{k+1},\lambda^{k+1}]^{T}[Sk+1,λk+1]T 。根据 K−TK-TK−T 条件,若此解中的乘子向量 λk+1\lambda^{k+1}λk+1 不全为零,则 Sk+1S^{k+1}Sk+1 就是等式约束二次规划问题(1-6)的最优解 S∗S^{*}S∗ 。

一般约束二次规划问题:

对于一般约束下的二次规划问题(1-5),在不等式约束条件中找出在迭代点 XkX^{k}Xk 处起作用的约束,将等式约束和起作用的不等式约束组成新的约束条件,构成新的等式约束二次规划问题:

minf(X)=12STHS+CTSs.t.∑i∈E⋃Ik∑j=1naijsj=−bjmin \ 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)=21​STHS+CTSs.t.     i∈E⋃Ik​∑​j=1∑n​aij​sj​=−bj​

其中,EEE 代表等式约束下的集合,IkI_kIk​ 代表不等式约束中起作用的约束的下标集合。

至此,一般约束二次规划问题就转化成了等式约束二次规划问题,可以用同样的方法求解。根据 K−TK-TK−T 条件,若解中对应于原等式约束条件的乘子不全为零,对应起作用的不等式约束条件的乘子大于等于零,则 Sk+1S^{k+1}Sk+1 就是等式约束二次规划问题(1-5)的最优解 S∗S^{*}S∗ 。

综上所述,在迭代点 XkX^kXk 上先进行矩阵 HkH^kHk 的变更,再构造和求解相应的二次规划子问题,并将该子问题最优解 S∗S^*S∗ 作为下一次迭代的搜索方向 SkS^kSk 。然后在该方向上对原非线性约束最优化问题目标函数进行约束一维搜索,得到下一个迭代点 XkX^kXk ,并判断收敛精度是否满足。重复上述过程,直到迭代点 Xk+1X^{k+1}Xk+1 最终满足终止准则,得到原非线性约束最优化问题的最优解为止。

2.3 序列二次规划算法的迭代步骤

[1] 给定初始点 X0X^0X0 、收敛精度 ϵ\epsilonϵ ,令 H0=IH^0=IH0=I ,置 k=0k=0k=0 ;
[2] 将原问题在迭代点 XkX^kXk 处简化成二次规划问题(1-5);
[3] 求解上述二次规划问题,并令 Sk=S∗S^k=S^*Sk=S∗ ;
[4] 在方向 SkS^kSk 上对原问题目标函数进行约束一维搜索,得到下一个迭代点 Xk+1X^{k+1}Xk+1 ;
[5] 终止判断:若 Xk+1X^{k+1}Xk+1 满足给定精度的终止准则,则将 Xk+1X^{k+1}Xk+1 作为最优解,f(Xk+1)f(X^{k+1})f(Xk+1) 作为目标函数的最优代价,终止计算;否则,转 [6] ;
[6] 按照 DFP 或 BFGS 法修正 Hk+1H^{k+1}Hk+1 ,令 k=k+1k=k+1k=k+1 ,转 [2]

本博客可能随时删除或隐藏,请关注微信公众号,获取永久内容。

序列二次规划——SQP相关推荐

  1. 不等式约束的序列二次规划(SQP)

    讲完等式约束的SQP,接下来就是不等式约束的SQP,其实两者的算法是完全没有区别的,唯一的就是因为引入了不等式约束,再推导上面就会去考虑近似KKT条件,从这个角度进行思考.解当前的问题就是解这个问题的 ...

  2. 等式约束的序列二次规划(SQP)

    我们还是以陆吾生的Practical optimization algorithms and engineering applications第15章作为模板进行整理,讲的是真的清楚,对其中比较简洁的 ...

  3. 等式与不等式约束的序列二次规划(SQP)

    最后介绍同时有等式约束和不等式约束的SQP解法.这里面的解法比之前的稍微复杂一点,用到了line search method以及BFGS下降.使用line search是为了增加搜索的鲁棒性,确保在任 ...

  4. 二次规划问题(qp)和序列二次规划问题(sqp)的简单理解

    二次规划 二次规划问题(qp)是目标函数为二次函数,约束条件为线性约束的问题,可以简化为初中数学进行表达,即: 已知目标函数为: f ( x ) = x 2 − 2 ∗ x + 1 f(x)=x^2- ...

  5. 序列二次规划求解非线性优化问题

    目录 1. 概述 2. 基本思想 3. 求解方法 3.1 求解二阶导数矩阵 3.2 二次规划问题的求解 1. 概述 序列二次规划法(SQP,Sequential Quadratic Programmi ...

  6. 序列二次规划_最优控制与规划

    (以下内容均来源于 CS 294 Lecture 8) 首先我们假设环境是确定性的,即在某个状态执行某个动作之后,转移到的下一个状态是确定的,不存在任何随机性.而在这种情况下,我们想做的是在环境给了我 ...

  7. matlab 序列二次规划,二次规划 - MATLAB quadprog - MathWorks 中国

    要查看 quadprog 的优化过程,请设置选项以显示迭代输出并返回四个输出.问题可以表示为最小化下式 12xTHx+fTx 约束条件为 0≤x≤1, 其中 H=[21-11312-1125],f=[ ...

  8. 二次优化问题dfp_优化设计-fmincon函数介绍-序列二次的规划(SQP)-subspacetrustregion-activesett.pdf...

    fmincon 函数 • 功能:求多变量有约束非线性函数的最小值. • 数学模型: • min F(X) • subject to: A*X <= B, Aeq*X = Beq (线性约束) C ...

  9. 路径规划的二次规划方法-知识总结

    路径规划的二次规划方法-知识总结 关于路径规划的优化方法,常见的有二次规划QP,样条二次规划SQP,这里以Apollo的优化方法为例子,作为一个笔记的记录,记录一些个人的问题. 二次规划基础知识 二次 ...

  10. 【论文笔记】Predictive control of aerial swarms in cluttered environments

    [刊物] nature子刊:machine intelligence [年份]2020 本文重点研究swarm,提出一种NMPC模型来描述集群,比PF模型具有更好的集群指标,类似于vicsek的那篇s ...

最新文章

  1. python3 多线程_图解|为什么 Python 多线程无法利用多核
  2. 客户端突如其来的“白屏”等待该如何解决?
  3. C语言中数组所占字节怎么算
  4. 计算机网络( 二十二)-数据链路层(补充)
  5. python 数组去重复_numpy数组去掉重复的行,保留唯一的行数据
  6. JAVA基于权重的抽奖
  7. 浏览器保存密码后文本框出现黄色背景的解决方案
  8. 数据结构-环形队列 C和C++的实现
  9. Hive Url解析函数
  10. .net 创建计划任务开机后自动以管理员身份启动运行 win7 ~ win10
  11. QQ音乐sign解密以及排行榜完整歌曲数据
  12. HFSS天线设计实例_BLE天线优化分析
  13. sFTP 上传或下载文件与文件夹
  14. 基于UMeng消息推送测试-demo教程(iOS版)
  15. CocosCreator开发笔记(4)-Windows搭建幼麟麻将运行环境
  16. SDN 交换机及南向接口技术(一)
  17. 编译原理(四) 消除回溯提取左因子法
  18. 用Python Opencv实现视频快进
  19. 计算机的ipv6地址,windows7旗舰版系统下查看电脑iPv6地址的方法【图文详解】
  20. Thread.currentThread().interrupt()和Thread.interrupted()和Thread.currentThread().isInterrupted()

热门文章

  1. c语言中d1的分辨率是,C中的方法分辨率顺序
  2. pads2007 LISENCE 报错解决方案
  3. 网络安全:漏洞测试主要平台 BackTrack4+Metasploit+ruby
  4. jenkins设置构建触发器
  5. java过滤器Filter
  6. 超简单,一行代码获取百度文库内容,附python百度文库exe下载工具
  7. Vb.net 获取IP地址
  8. 基于javaweb+mysql的在线购书商城系统(java+jsp+mysql+servlert+ajax)
  9. 万年历代码java功能_java 的万年历代码
  10. 怎么用python黑别人电脑_超级黑科技代码!用Python打造电脑人脸屏幕解锁神器附带接头暗号!...