我遇到的问题几乎是二次形式,但是涉及一组额外的向量变量。
也就是说,我想找到最小化的向量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吗?
谢谢!
答案 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视为标量,但是如果没有,该怎么办。