使用solve.QP

时间:2018-10-08 17:54:51

标签: r optimization mathematical-optimization

我遇到的问题几乎是二次形式,但是涉及一组额外的向量变量。

也就是说,我想找到最小化的向量x

J = x'C x

其中,C是已知的正定矩阵。最小化受到通常的约束

A x> = b

x> = 0

对于固定约束矩阵A和向量b。到目前为止,这是一个可以轻松解决的标准问题。

但是,我还具有其他向量变量y和约束,如下所示:

x = F y + g

y> = 0

矩阵F和向量g是已知的,但是F是不可逆的(甚至平方)。在我的特定问题中,y的维数比x小得多,因此F的行多于列。

我想同时求解x和y。我的第一个尝试是创建扩展向量z =(x,y)并用z重写问题。但是,这样做会导致出现以下形式的问题:

最小化z'Q x,

但是现在Q是单数。因此,solve.QP无法使用。

我可以在CPLEX,AMPL等中轻松解决此问题,但是我特别想使用Quadprog在R中解决它。

有人可以告诉我如何重写问题,以便我可以同时解决x和y问题,特别是使用solve.QP吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我看不到您的非线性(请参见编辑说明!)。

    x = F y + g
<-> 0 = F y + g - x

例如:

F = (1,2
     3,4
     5,6)
y = (y0
     y1)
x = (x0
     x1,
     x2)

然后:

    0 = F y + g - x
<-> 0 = D z 

其中

    D = (F,1,-1,-1,-1)
<-> D = (1, 2, 1, -1, -1, -1
         2, 3, 1, -1, -1, -1
         4, 5, 1, -1, -1, -1)

and z = (y0
         y1
         g
         x0
         x1
         x2)

在g上加上一些约束(如果API没有更好的选择)

编辑好吧,我将g视为标量,但是如果没有,该怎么办。