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

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

时间2025-06-19 22:23:06分类IT科技浏览9774
导读:二次规划 二次规划问题(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
青县政府网公告(青县政府网站) 做好网站优化的方法有哪些?(网站的seo 如何优化)