文档

mpcqpsolver

用KWIK算法求解二次规划问题

语法

[x,状态]= mpcqpsolver (Linv f A、b Aeq,说真的,iA0,选项)
[x,状态、iAλ]= mpcqpsolver (Linv f A、b Aeq,说真的,iA0,选项)

描述

例子

x状态) = mpcqpsolver (Linvf一个bAeq说真的iA0选项找到一个最优解,x为二次规划问题,通过最小化目标函数:

J 1 2 x H x + f x

受不等式约束 一个 x b 、等式约束 一个 e x b e 状态的有效性。x

例子

x状态iAλ) = mpcqpsolver (Linvf一个bAeq说真的iA0选项也返回活动的不等式,iA和拉格朗日乘子,λ,求解。

例子

全部折叠

求的值x,减少

受限于

指定目标函数的Hessian和线性乘子向量。

H = [1 -1;1 2];f = [2;6);

指定不平等约束参数。

A = [10 0;0 1;1 1;1 - 2;2 1];b = [0;0;2;2;3);

定义Aeq和beq来表示不存在等式约束。

Aeq = [];说真的= 0 (0,1);

求下三角Cholesky分解H

(L p) =胆固醇(H,“低”);Linv =发票(L);

验证这一点是很好的做法H通过检查是否为正定p = 0

p
p = 0

创建一个默认选项集mpcqpsolver

选择= mpcqpsolverOptions;

要冷启动求解器,请将所有不等式约束定义为非活动的。

iA0 = false(大小(b));

解决QP问题。

[x,状态]= mpcqpsolver (Linv f A、b Aeq,说真的,iA0,选择);

检查解决方案,x

x
x =2×10.6667 - 1.3333

求的值x,减少

受限于

指定目标函数的Hessian和线性乘子向量。

H = [6 -2;2 1];f = [3;4);

指定不平等约束参数。

A = [10 0;1 1;1 2];b = [0;5;7);

定义Aeq和beq来表示不存在等式约束。

Aeq = [];说真的= 0 (0,1);

求下三角Cholesky分解H

(L p) =胆固醇(H,“低”);Linv =发票(L);

验证H通过检查是否为正定p = 0

p
p = 0

创建一个默认选项集mpcqpsolver

选择= mpcqpsolverOptions;

要冷启动求解器,请将所有不等式约束定义为非活动的。

iA0 = false(大小(b));

解决QP问题。

[x,状态、iAλ]= mpcqpsolver (Linv f A、b Aeq,说真的,iA0,选择);

检查活动的不等式约束。主动不等式约束是最优解的等式。

iA
iA =3 x1逻辑阵列1 0 0

这里有一个单一的活动不等式约束。

查看此约束的拉格朗日乘子。

lambda.ineqlin (1)
ans = 5.0000

输入参数

全部折叠

Hessian矩阵的下三角Cholesky分解的逆,指定为n——- - - - - -n矩阵,n> 0为优化变量的个数。对于一个给定的黑森矩阵,HLinv可计算如下:

(L p) =胆固醇(H,“低”);Linv =发票(L);

H是一个n——- - - - - -n矩阵,它必须是对称和正定的。如果p> 0,然后H是正定的。

请注意

KWIK算法需要计算Linv而不是使用H直接的,就像在quadprog命令。

目标函数线性项的倍数,指定为长度的列向量n

线性不等式约束系数,指定为——- - - - - -n矩阵,是不等式约束的个数。

如果您的问题没有不等式约束,请使用[]

不等式约束的右边,指定为长度的列向量

如果您的问题没有不等式约束,请使用0 (0, 1)

线性等式约束系数,用a表示——- - - - - -n矩阵,是等式的数量限制,和< =n.等式约束必须与线性无关排名(Aeq) =

如果你的问题没有等式约束,使用[]

等式约束的右边,指定为长度的列向量

如果你的问题没有等式约束,使用0 (0, 1)

初始活动不等式,其中不等式的相等部分为真,指定为长度的逻辑向量根据以下内容:

  • 如果您的问题没有不等式约束,请使用false (0,1)

  • 对于一个冷启动假(m, 1)

  • 对于一个温暖的开始,设置iA0 () = = true以开始算法不等式约束活动。使用可选的输出参数iA从以前的解决方案指定iA0以这种方式。如果两个iA0 (而且iA0 (j真正的,然后行而且j一个应该是线性无关的。否则,解决方案可能会失败状态= 2

选项设置mpcqpsolver,指定为使用创建的结构mpcqpsolverOptions

输出参数

全部折叠

QP问题的最优解,作为长度的列向量返回nmpcqpsolver总是返回一个值x.要确定解决方案是否最佳或可行,请检查解决方案状态

解决方案有效性指标,按以下方式作为整数返回:

价值 描述
> 0 x是最优的。状态表示优化期间执行的迭代次数。
0 达到了迭代的最大数量。解决方案,x,可能是次优的或不可行的。
-1 这个问题似乎是不可行的,也就是这个约束 一个 x b 不能满足。
-2 发生了不可恢复的数值错误。

主动不等式,其中相等部分的不等式为真,作为长度的逻辑向量返回.如果iA () = = true,那么不等式对解是主动的x

使用iA温暖的开始随后mpcqpsolver解决方案。

拉格朗日乘子,作为具有以下字段的结构返回:

描述
ineqlin 不等式约束的乘数,作为长度向量返回n.当解是最优时,元素ineqlin是负的。
eqlin 等式约束的乘数,作为长度向量返回.最优解不存在符号限制。

提示

  • KWIK算法要求黑森矩阵,H,一定要肯定。在计算Linv使用:

    [L, p] = L (H,“低”);

    如果p= 0,然后H是正定的。否则,p为正整数。

  • mpcqpsolver提供对模型预测控制工具箱™软件使用的QP求解器的访问。使用此命令可以在您自己的自定义MPC应用程序中解决QP问题。这是一个自定义MPC应用程序使用mpcqpsolver,请参阅解决自定义MPC二次规划问题并生成代码

算法

mpcqpsolver解决QP问题使用一种活动集方法,KWIK算法,基于[1].有关更多信息,请参见QP解算器

KWIK算法将不等式约束定义为 一个 x b 而不是 一个 x b ,如quadprog命令。

参考文献

[1]施密德,C.和l.t.比格勒。简化Hessian SQP的二次规划方法。计算机与化学工程“,”1994年第9期,第18卷,第817-832页。

扩展功能

介绍了R2015b

这个话题有帮助吗?