我正在尝试解决以下二次规划问题:
分钟<子>瓦特子>瓦特Ť Σ瓦特,
s.t。 w T e = 1,
ST。 ‖w‖ 1 ≤δ
A
是一个单位矩阵,Sigma
是协方差矩阵,e
是1的向量。
第一个约束确保解决方案加起来为一个。
第二个约束确保解的绝对值之和(1-norm)小于或等于某个常数。
我试图通过以下方式解决这个问题:
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()
的解决方案永远需要更大的任务。