二次规划及qpoases简要介绍

qpoases

这个库函数本来被设计来作为MPC的应用,但是也是一个可靠的QP算法求解方案。作为求解参数二次规划的有效集算法。
使用说明书

QP问题

二次规划问题

带有二次型目标函数和约束条件的最优化问题。

基础概念

二次型:函数中最高次为2次的函数。用矩阵可以记为 f = x T ⋅ A ⋅ x f=x^T \cdot A \cdot x f=xTAx;
正定矩阵 Positive Definite Matrix:,设在二次型 f = x T ⋅ A ⋅ x f=x^T \cdot A \cdot x f=xTAx中,对于任何 x ≠ 0 x\ne0 x=0,都有 f ( x ) > 0 f(x)>0 f(x)>0,称 f f f为正定二次型,称对称矩阵A为正定的;如果对于任何 x ≠ 0 x\ne0 x=0,都有 f ( x ) < 0 f(x)<0 f(x)<0,称 f f f为负定二次型,称对称矩阵A为负定的。
Hesse矩阵(海塞矩阵):常用于牛顿法解决最优化问题。是一个类似与雅可比矩阵的概念,不过其是二阶导数的矩阵,但是雅可比矩阵是一阶导数的矩阵。如果函数f是连续的,则它的Hesse矩阵一定是对称阵。 得到函数f的Hesse矩阵有什么用呢?Hesse可以用于多元函数极值的判定。
在清华的课程中也讲到了二次规划的问题
QP-define.png

QP-matlab.png

QP-solution.png

使用qpOASES求解步骤

使用说明翻译可参见这篇博客
求解形式:
在这里插入图片描述
以下文档都是从3.2版本的用户说明书中提取的简要部分,如果需要详细的还请阅读说明书:

  1. 首先实例化一个QProblrm类的对象
    QProblem( int_t nV, int_t nC ); nv表示变量的个数,nc表示二次约束的的个数。
    ex:QProblem example( nV,nC );
  2. 初始化对象求求解。
    QP-init.png
    H:hessian矩阵 H ∈ R n V × n V H\in\mathbf{R^{nV \times nV}} HRnV×nV
    g:梯度向量? g ∈ R n V g\in\mathbf{R^{nV}} gRnV
    A:约束矩阵 A ∈ R n C × n V A\in\mathbf{R^{nC \times nV}} ARnC×nV
    lb ub:上下限边界向量 l b , u b ∈ R n V lb,ub\in\mathbf{R^{nV}} lb,ubRnV
    lbA ubA:上下限约束向量 l b , u b ∈ R n C lb,ub\in\mathbf{R^{nC}} lb,ubRnC这个向量中不仅包含了不等式,也包括了等式的约束,将上限和下限设置为相同数值即可表示为等式约束!
    nWSR: 最大迭代次数
    cputime:如果输入不为空,就会输出整个初始化和求解所花的时间。
    如果那一项是没有的,就看可以传入一个空指针。解完后所有的向量需要自己释放内存。但是矩阵H A不需要。

使用qpOASES求解方式

QP问题分为许多种,有一些没有等式约束项,一些没有不等式约束项。因此在qpOASES中也有好几个方法来解决不同的问题,相比之下针对不同问题选择不同方法的效率会更高:

QP-solving-variants.png
针对不同的种类的详细用法可以参考/examples/example**.cpp
同时这个库可以解决线性规划,但是效率极低!

qpOASES其余设置

  • 可以返回各项参数的数值
  • 可以定义 Options myOptions; qp.setOptions( myOptions );设定需要设置的各参数
  • ex:
Options myOptions;
myOptions.setToMPC( );
myOptions.printLevel = PL_LOW;
qp.setOptions( myOptions );

可以通过指定用于评估约束的函数来提升速度,但是可能这是naive的
能够设置最大时间限制。因此由于时间测量的不准确,实际的总CPU时间可能比允许的CPU时间稍高一些。

  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值