-1

我正在尝试使用 r 为我的投资组合优化类解决二次规划问题。我想将我的答案与书中的答案进行比较。
这是问题所在: min: t(c)%*%x + .5*t(x)%*%BigC%*%x
st: -x <=0, i=1...5
and: sum(x)=1

这是我的代码:

A = matrix( c( 1,1,1,1,1, -1,0,0,0,0, 0,-1,0,0,0, 0,0,-1,0,0, 0,0,0,-1,0, 0,0,0,0,-1), ncol=5, byrow=T)
b = matrix( c( 1,0,0,0,0,0), ncol=1)
c = matrix( c( 1,-2,3,-4,5), ncol=1)
BigC = matrix( c( 1,0,0,0,0,  0,2,0,0,0,  0,0,3,0,0,  0,0,0,4,0,  0,0,0,0,5), ncol=5, byrow=T)
x0 = matrix( c( 0.2,0.2,0.2,0.2,0.2), ncol=1)
n = 5
m = 5
q = 1
solve.QP( Dmat=BigC, dvec=t(c), Amat=t(A), bvec=t(b), meq=1)

但它会引发以下错误:

Error in solve.QP(Dmat = BigC, dvec = t(c), Amat = t(A), bvec = t(b),  : 
  constraints are inconsistent, no solution!

任何帮助将不胜感激。谢谢!

4

1 回答 1

3

文档?solve.QP提到

具有约束 A^T b >= b_0 的 min(-d^T b + 1/2 b^TD b) 形式的问题。

所以你至少有两件事错了:

  • A用于表达您的x_i >= 0约束的标志
  • dvec应该-t(c)

我们还要提一下

  • 在未来,重要的是你提到你正在使用这个quadprog包,
  • solve.QP采用向量,因此您无需创建矩阵并转置它们,
  • 您应该避免命名变量c,因为它是 R 中常用函数的名称,
  • 您的某些代码未使用,因此与问题无关,
  • 方便的diag功能。

考虑到所有这些,这就是您要寻找的:

library(quadprog)

A    <- rbind(rep(1, 5), diag(5))
b    <- c( 1,0,0,0,0,0)
tc   <- c( 1,-2,3,-4,5)
BigC <- diag(1:5)

solve.QP(Dmat = BigC, dvec = -tc, Amat = t(A), bvec = b, meq = 1)
于 2012-12-04T20:30:51.597 回答