Minimizar la función cuadrática sujeta a la restricción de desigualdad de la norma

Estoy tratando de resolver la siguiente restricción de desigualdad:

Dados los datos de series de tiempo para N stocks, estoy tratando de construir un vector de ponderación de cartera para minimizar la varianza de los rendimientos.

la función objetivo:

min w^{T}\sum w
s.t. e_{n}^{T}w=1
\left \| w \right \|\leq C

dóndew es el vector de los pesos\sum es la matriz de covarianzae_{n}^{T} es un vector de unos,C Es una constante. Donde la segunda restricción (\left \| w \right \|) es una restricción de desigualdad (norma 2 de los pesos).

Traté de usar elnloptr() función pero me da un error: Algoritmo incorrecto suministrado. No estoy seguro de cómo seleccionar el algoritmo correcto y tampoco estoy seguro de si este es el método correcto para resolver esta restricción de desigualdad.

También estoy abierto a usar otras funciones siempre que resuelvan esta restricción.

Aquí está mi intento de solución:

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)

Respuestas a la pregunta(2)

Su respuesta a la pregunta