gpt4 book ai didi

r-投资组合优化-Solve.QP-约束不一致

转载 作者:行者123 更新时间:2023-12-04 03:43:50 32 4
gpt4 key购买 nike

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

共有3个 Assets

有4个约束:

  • 权重总和等于1
  • 投资组合的预期 yield 等于5.2%
  • 每个 Assets 权重大于0
  • 每个 Assets 权重小于.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是每种 Assets 的预期 yield
    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!

    我不确定我做错了什么。

    最佳答案

    您发布的代码存在两个问题:

  • 发布的Dmat实际上不是对称的。您不小心包含了值212.31581而不是12.31581
  • meq=2选项意味着您的前两个约束保持相等,这意味着您的权重之和为1,而返回率恰好是5.2%。第二个约束显然是导致不可行的约束;鉴于您的其他限制条件,似乎没有有效的投资组合的 yield 完全等于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%的返回相关。

    关于r-投资组合优化-Solve.QP-约束不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090037/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com