作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解决以下不等式约束:
给定 N 个股票的时间序列数据,我试图构建一个投资组合权重向量以最小化 yield 的方差。
目标函数:
min w^{T}\sum w
s.t. e_{n}^{T}w=1
\left \| w \right \|\leq C
w
是权重向量,
\sum
是协方差矩阵,
e_{n}^{T}
是一个向量,
C
是一个常数。其中第二个约束(
\left \| w \right \|
)是不等式约束(权重的 2 范数)。
nloptr()
函数,但它给了我一个错误:提供的算法不正确。我不确定如何选择正确的算法,也不确定这是否是解决此不等式约束的正确方法。
data <- replicate(4,rnorm(100))
N <- 4
fn<-function(x) {cov.Rt<-cov(data); return(as.numeric(t(x) %*%cov.Rt%*%x))}
eqn<-function(x){one.vec<-matrix(1,ncol=N,nrow=1); return(-1+as.numeric(one.vec%*%x))}
C <- 1.5
ineq<-function(x){
z1<- t(x) %*% x
return(as.numeric(z1-C))
}
uh <-rep(C^2,N)
lb<- rep(0,N)
x0 <- rep(1,N)
local_opts <- list("algorithm"="NLOPT_LN_AUGLAG,",xtol_rel=1.0e-7)
opts <- list("algorithm"="NLOPT_LN_AUGLAG,",
"xtol_rel"=1.0e-8,local_opts=local_opts)
sol1<-nloptr(x0,eval_f=fn,eval_g_eq=eqn, eval_g_ineq=ineq,ub=uh,lb=lb,opts=opts)
最佳答案
这看起来像一个简单的 QP(二次规划)问题。使用 QP 求解器而不是通用 NLP(非线性编程)求解器(不需要导数、函数等)可能更容易。 R 有一个称为 quadprog 的 QP 求解器。为 quadprog 设置问题并非易事,但 here是一个非常相似的投资组合示例,带有完整的 R 代码来展示如何解决这个问题。它具有相同的目标(最小化风险)、相同的预算约束以及下限和上限。该示例只是有一个额外的约束,指定了最低要求的投资组合返回。
实际上我误读了这个问题:第二个约束是 ||x|| <= C。我认为我们可以将整个模型表示为:
这实际上看起来像一个凸模型。我可以用 Cplex、Gurobi 和 Mosek 等“大”求解器来解决它。这些求解器支持凸二次约束问题。我也相信这可以表述为锥编程问题,开辟更多可能性。
这是我在 R 中使用包 cccp 的示例。 cccp 代表
锥约束凸问题,是 CVXOPT 的端口.
关于r - 最小化受范数不等式约束的二次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165200/
我是一名优秀的程序员,十分优秀!