Решить квадратичную оптимизацию с нелинейными ограничениями

Я пытаюсь решить следующую проблему квадратичного программирования:

min w w T Σ w,
st w T e = 1,
ул. ‖W1 ≤ δ

куда A является единичной матрицей, Sigma ковариационная матрица и e это вектор из них.

Первое ограничение гарантирует, что решение складывается в единицу.

Второе ограничение гарантирует, что сумма абсолютных значений (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)

Я бы хотел знать:

  1. Это решение правильно?

  2. Существуют ли альтернативные (более простые) способы ее решения? Решение с использованием solnp() берет навсегда для больших задач.

0 ответов

Другие вопросы по тегам