用非线性约束求解二次优化

时间:2016-12-11 20:46:42

标签: r optimization quadratic-programming quadprog

我正在尝试解决以下二次规划问题:

分钟<子>瓦特瓦特Ť Σ瓦特
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)

我想知道:

  1. 此解决方案是否正确?

  2. 是否有替代(更简单)的方法来解决它?使用solnp()的解决方案永远需要更大的任务。

0 个答案:

没有答案