【问题标题】:Portfolio Optimization using r and solve.QP使用 r 和 solve.QP 进行投资组合优化
【发布时间】:2012-12-05 04:35:18
【问题描述】:

我正在尝试使用 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!

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

【问题讨论】:

  • 那段代码有什么问题?你有什么问题?

标签: r optimization finance portfolio


【解决方案1】:

?solve.QP 文档提到

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

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

  • A 中的符号表示您的 x_i &gt;= 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)

【讨论】:

  • @JasonBeach,很高兴为您提供帮助,欢迎来到 SO。很抱歉你的问题被否决了这么多,我希望它不会阻止你下次问。如果您认为我回答了您的问题,请考虑按照此处的说明接受:stackoverflow.com/faq#howtoask
猜你喜欢
  • 2014-07-28
  • 2016-07-19
  • 1970-01-01
  • 2018-03-06
  • 2020-10-15
  • 1970-01-01
  • 2019-09-08
  • 2016-07-07
  • 1970-01-01
相关资源
最近更新 更多