【问题标题】:solve.QP() $value inconsistent with numerical calculationsolve.QP() $value 与数值计算不一致
【发布时间】:2016-10-01 09:26:40
【问题描述】:

我有一个关于此算法的问题需要回答,因为我正在审核我的模型,并且这种不一致令人担忧。

我正在使用它们必须总和为 1 的约束进行均值方差优化,并且权重必须在我指定的范围内。我的输入如下:

Dmat = Sigma
dvec = rep(0, ncol(Sigma))
Amat = rbind(rep(1, ncol(Sigma)), diag(ncol(Sigma)), -diag(ncol(Sigma)),    
    ncol=ncol(Sigma))
bvec = c(1, MinWeights, -MaxWeights) 

然后我运行:

Out = solve.QP(Dmat, dvec, t(Amat), bvec, meq=1)
Weights = Out$solution
Var = t(Weights) %*% Sigma %*% Weights
Var == Out$value

问题是最后一个命令我得到了 FALSE。这不是一个四舍五入的问题,它们相差近 20%。

有人知道问题出在哪里吗?

【问题讨论】:

  • 1) solve.QP 2) 我回家后会编辑矩阵
  • 请考虑将您的问题转为Minimal, Reproducible Example。您发布的代码未提供变量SigmaMinWeights-MaxWeights 的定义。此外,假设MinWeightsMaxWeights 的长度为ncol(Sigma),则Amacbvec 的尺寸不兼容。 ncol=ncol(Sigma)的作用是什么?

标签: r optimization quadprog


【解决方案1】:

我发现了问题。

Sigma 应该是 2*Sigma,这是使用矩阵代数进行投资组合优化的拉格朗日值。

【讨论】:

  • 通过指出Dmat 应定义为2 * Sigma,即Dmat = 2 * Sigma,有助于提高答案的清晰度。那么,等式Var == Out$value 成立。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多