我正在尝试解决以下二次规划问题:
最小w w T Σ w ,
st w T e = 1,
st。‖w ‖<sub>1 ≤ δ
其中A
是单位矩阵,Sigma
是协方差矩阵,e
是 1 的向量。
第一个约束确保解决方案加起来为一个。
第二个约束确保解的绝对值之和(1-范数)小于或等于某个常数。
我试图通过以下方式解决这个问题:
library(Rsolnp)
#Generate some sample data
N=100
sample.data <- replicate(N,rnorm(1000,0,1))
#specify optimization problem
fn<-function(x) {cov.Rt<-cov(sample.data); return(as.numeric(t(x)%*%cov.Rt%*%x))}
#specify equality constraint
eqn<-function(x){one.vec<-matrix(1,ncol=N,nrow=1);return(as.numeric(one.vec%*%x))}
constraints<-1
#specify inequality constraint
ineq<-function(x){one.vec<-matrix(1,ncol=N,nrow=1);
z1<-one.vec%*%abs(x)
return(as.numeric(z1))
}
#specify lower and upper bounds
uh<-2
lb<-1
#specify starting vector of "w"
x0<-matrix(1/N,N,1)
#solve quadratic optimization problem:
control <- list("trace"="0")
sol1<-solnp(pars=x0,fun=fn,eqfun=eqn,eqB=constraints, ineqfun=ineq,ineqUB=uh,ineqLB=lb,control=control)
我想知道:
这个解决方案正确吗?
是否有替代(更简单)的方法来解决它?使用解决方案
solnp()
需要永远完成更大的任务。