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

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

minwwTw,
s.t.wTe = 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() требует вечности для больших задач.


person tzi    schedule 11.12.2016    source источник
comment
sum(i, w(i)^2) <= delta не совсем то же самое, что требовать, чтобы сумма абсолютных значений была меньше delta. Первая действительно нелинейна, вторая форма может быть линеаризована.   -  person Erwin Kalvelagen    schedule 12.12.2016
comment
Спасибо за вашу помощь! В математической формуле была ошибка. Я исправил ограничение неравенства в формуле. Я действительно хочу, чтобы сумма абсолютных значений была меньше дельты. Это проясняет?   -  person tzi    schedule 12.12.2016
comment
Моя проблема в том, что выполнение этого 100 раз занимает около 30 часов. Если код правильный, есть ли способ реализовать его (например, с помощью другого решателя), который не займет так много времени? Или это по своей сути такая медленная вещь для решения?   -  person tzi    schedule 12.12.2016
comment
После линеаризации sum(i, abs(w(i))<= delta вы можете использовать (хороший) выпуклый решатель QP. Обычно такая модель решает очень быстро.   -  person Erwin Kalvelagen    schedule 12.12.2016
comment
Вы имеете в виду, например,solve.qp? Не могли бы вы объяснить, как эту задачу можно линеаризовать и указать в аргументах Amat и bvec файлаsolv.qp? Мои знания о матрицах слишком ограничены, чтобы навязывать неравенство. В этом смысле solnp() был гораздо более интуитивным. Я могу изменить вопрос, чтобы запросить решение с помощьюsolve.qp, если это поможет. Но я был бы очень признателен, если бы вы могли объяснить, как наложить эти два ограничения.   -  person tzi    schedule 12.12.2016
comment
Я только что обнаружил, что вы уже ответили на эту проблему: минимизация квадратичной функции с учетом ограничения неравенства нормы"> stackoverflow.com/questions/34165200/   -  person tzi    schedule 12.12.2016
comment
Не стесняйтесь закрывать этот вопрос, если вы согласны с тем, что он отвечает на мой вопрос.   -  person tzi    schedule 12.12.2016