首页IT科技二次规划的kkt条件(二次规划问题(qp)和序列二次规划问题(sqp)的简单理解)

二次规划的kkt条件(二次规划问题(qp)和序列二次规划问题(sqp)的简单理解)

时间2025-05-03 03:24:35分类IT科技浏览8329
导读:二次规划 二次规划问题(qp 是目标函数为二次函数,约束条件为线性约束的问题,可以简化为初中数学进行表达,即:...

二次规划

二次规划问题(qp)是目标函数为二次函数               ,约束条件为线性约束的问题                      ,可以简化为初中数学进行表达       ,即:

已知目标函数为:

f

(

x

)

=

x

2

2

x

+

1

f(x)=x^2-2*x+1

f(x)=x22x+1

x

x

x需满足约束条件

<

x

<

2

0

0<x<2

f

(

x

)

f(x)

f(x)

x

x

x
为多少时取最小值

以上即为最简单的一维的二次规划表达例子        ,扩展到高维的话                      ,则

x

x

x为向量矩阵形式              ,但原理是一样的               。

对于高维二次规划问题        ,求解过程并不像初中数学那样简单                       ,因此会采用其他的方法              ,如内点法和有效集法等                      。

对于工程师而言,我们在编写代码的时候                       ,并不关心二次规划问题的求解细节                      ,所以一般是把二次规划问题建立好后,直接调用三方库进行求解       。

目前常用的c++求解库是qpoases和osqp               ,MATLAB的话有个quadprog可用于求解qp               。

二次规划问题是一个典型的非线性规划问题                      ,与非线性规划相对的概念是线性规划       ,对               ,就是高中数学的学的那个                      。

二次规划问题还是一个典型的凸优化问题       。凸优化问题(Convex optimization problem)要求目标函数为凸函数                      ,而且定义域为凸集        。这里的定义域指的就是约束       ,简单理解就是

x

2

1

<

x^2-1<0

x21<0就是凸集        ,

x

2

1

>

x^2-1>0

x21>0
就是非凸集                      。另外                      ,凸优化还要求等式约束均为仿射函数               。凸优化问题的特点是局部最优解就是全局最优解        。

注意: 只要目标函数不是二次函数              ,或约束不是线性约束        ,满足其中任意一个                       ,则此问题就不是二次规划问题                      。非二次规划问题可能是凸问题              ,也可能是非凸问题               。

非二次规划问题求解思路如下:

当目标函数仍为二次函数,但约束为非线性约束时                       ,我们可采用ipopt三方库直接求解                      ,或者用序列二次规划(sqp)进行求解,下节详细介绍。

当目标函数不为二次函数               ,且约束为非线性约束时                      ,我们似乎只能采用ipopt三方库进行求解了                      。

序列二次规划

当二次规划的约束为非线性约束时       ,通常会采用sqp进行求解               ,用连续求解qp的方法来得到非线性约束条件下的最优解                      ,上述的qpoases和osqp均无法直接求解非线性约束问题       ,所以如果使用这两个库的话        ,

只能采用sqp的方法求解                      ,sqp会求解一连串的qp问题                      。注意              ,sqp是结果        ,而不是原因                       ,只有在非线性约束的情况下才会考虑sqp求解              ,如果问题本身就是线性约束,则直接用qp解就行。

我们将上述qp问题进行改造                       ,得到一个非线性优化问题:

已知目标函数为:

f

(

x

)

=

x

2

2

x

+

1

f(x)=x^2-2*x+1

f(x)=x22x+1

x

x

x需满足约束条件

x

2

<

0.5

x^2<0.5

x2<0.5

f

(

x

)

f(x)

f(x)

x

x

x
为多少时取最小值

求解步骤如下:

因为约束为非线性约束                      ,所以先将约束进行线性化,约束原方程为

c

(

x

)

=

x

2

c(x)=x^2

c(x)=x2               ,这里我们选择在

x

=

10

x=10

x=10
的位置进行线性化                      ,根据泰勒展开

f

(

x

)

=

f

(

x

)

+

f

(

x

)

1

!

(

x

x

)

f(x)=f(x_0)+\frac{f(x_0)}{1!}(x-x_0)

f(x)=f(x0)+1!f(x0)(xx0)

       ,

我们可以得到

c

(

x

)

=

20

x

100

c(x)=20x-100

c(x)=20x100
               ,所以原约束条件变成了

20

x

100

<

0.5

20x-100<0.5

20x100<0.5

步骤1将非线性约束转换成了线性约束                      ,因此是标准qp       ,可以用三方库进行第一次qp求解        ,求解得到一个最优

x

x

x值                      ,这里解出来最优解为

x

=

1

x=1

x=1
              ,记录此时目标函数值

f

1

=

f1=0

f1=0

将非线性约束在第2步解出的

x

x

x处进行线性化        ,线性化后原约束变成了

2

x

1

<

0.5

2x-1<0.5

2x1<0.5
                      ,调用第三方库解第二次qp              ,这里解出来最优解为

x

=

0.75

,

x=0.75                       ,

x=0.75                      ,
记录此时目标函数值

f

2

=

0.0625

f2=0.0625

f2=0.0625

比较

f

1

f1

f1

f

2

f2

f2
的值的差距,发现差了0.0625               ,假设我们判断收敛的阈值为两次qp间解算的目标函数值差距不能超过0.001                      ,则此时判断sqp并未收敛       ,继续计算

将非线性约束在第3步解出的

x

x

x处进行线性化               ,调用第三方库解第三次qp                      ,这里解出来最优解为

x

=

0.7083

       ,

x=0.7083        ,

x=0.7083                      ,
记录此时目标函数值

f

3

=

0.085

f3=0.085

f3=0.085

将非线性约束在第5步解出的

x

x

x处进行线性化              ,调用第三方库解第四次qp        ,这里解出来最优解为

x

=

0.7071

                      ,

x=0.7071              ,

x=0.7071,
记录此时目标函数值

f

4

=

0.086

f4=0.086

f4=0.086

将非线性约束在第6步解出的

x

x

x处进行线性化                       ,调用第三方库解第五次qp                      ,这里解出来最优解为

x

=

0.7071

,

x=0.7071               ,

x=0.7071                      ,
记录此时目标函数值

f

5

=

0.086

f5=0.086

f5=0.086

比较

f

4

f4

f4

f

5

f5

f5
的值的差距       ,发现差距不到0.001了               ,此时我们认为sqp已经收敛了                      ,此时得到的最优解

x

x

x
即为整个sqp问题的最优解

仍无法理解的问题: 为什么连续求解qp直至最后收敛       ,其结果就是问题最优解        ,这个证明是怎么来的                      ,有什么简单的理解方法吗? 欢迎大家讨论补充               。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
WebKitFormBoundary怎么post(WebKit Frame Capture Example) yolov5论文怎么写(YOLOv8代码上线,官方宣布将发布论文,附精度速度初探和对比总结)