【问题标题】:r - Portfolio Optimization - solve.QP - Constraints are Inconsistentr - 投资组合优化 - solve.QP - 约束不一致
【发布时间】:2014-07-28 04:59:57
【问题描述】:

我正在尝试使用solve.QP来解决投资组合优化问题(二次问题)

总共 3 个资产

有 4 个约束:

  1. 权重总和等于 1
  2. 投资组合预期回报率等于 5.2%
  3. 每个资产权重大于 0
  4. 每个资产权重小于 0.5

Dmat 是协方差矩阵

Dmat <- matrix(c(356.25808, 12.31581, 261.8830, 212.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3)

dvec 是每个资产的预期回报

dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1)

Amat 是约束矩阵

A.Equality <- matrix(c(1,1,1), ncol=1)
Amat <- cbind(A.Equality, dvec, diag(3), -diag(3))

约束 A^T b >= b_0, b 向量

bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3))

meq=2,因为有两个等式约束,所以第一个和第二个约束是等式

然后我运行函数solve.QP

library(quadprog)
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=2)

但它给出了错误

Error in solve.QP(Dmat, dvec, Amat, bvec, meq = 2) : constraints are inconsistent, no solution!

我不知道我哪里做错了。

【问题讨论】:

    标签: r mathematical-optimization portfolio quadratic


    【解决方案1】:

    您发布的代码有两个问题:

    • 发布的Dmat 实际上不是对称的;您不小心包含了值 212.31581 而不是 12.31581
    • meq=2 选项意味着您的前两个约束保持相等,这意味着您的权重总和为 1,您的回报正好是 5.2%。第二个约束显然是导致不可行的原因。考虑到您的其他限制,似乎没有有效的投资组合的回报率恰好等于 5.2%。事实上,由于不超过一半的投资组合可以有 3.33% 的回报率,其余的必须至少有 9.07% 的回报率,所以回报率必须是 6.2% 或更高。因此,您应该通过设置 meq=1 将其放宽为 >= 约束。

    这是工作代码:

    library(quadprog)
    Dmat <- matrix(c(356.25808, 12.31581, 261.88302, 12.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3)
    dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1)
    A.Equality <- matrix(c(1,1,1), ncol=1)
    Amat <- cbind(A.Equality, dvec, diag(3), -diag(3))
    bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3))
    qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=1)
    qp$solution
    # [1] 0.3808733 0.5000000 0.1191267
    

    最佳解决方案实际上与 6.3% 的回报率相关。

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2021-12-18
      • 2016-03-12
      • 1970-01-01
      相关资源
      最近更新 更多