Нелинейная оптимизация с ограничением

Рассмотрим следующий кадр данных:

A=data.frame(v1=c(4,2,-3,3,-1,3,6,-2), v2=c(3,3,-1,5,-3,-2,-2,-3), v3=c(5,-2,2,2,5,5,4,-4),
              v4=c(-2,-1,3,1,-1,3,2,-5), v5=c(2,-5,4,-4,3,1,1,1))

со следующей задачей оптимизации:

1

где a_i - i-я строка матрицы A.

Я пытался решить это с пакетом nloptr, Сначала целевая функция:

 fct <- function(p) {
        return(sum((as.matrix(A)%*%p<0)*(as.matrix(A)%*%p)^2))
        }

Тогда ограничение:

 constraint <- function(p){
               return(p[1]-1)
               } 

Но все решатели, которые я пробовал, требуют градиента, например:

sol <- nloptr(x0=c(1,1,-0.13,-0.5,1.3), eval_f=fct, eval_g_eq=constraint,
 opts=list("algorithm"="NLOPT_LD_SLSQP"))

-> A gradient for the objective function is needed by algorithm NLOPT_LD_SLSQP but was not supplied

Можно ли рассчитать градиент этой функции или есть другие способы решения этой проблемы?

Спасибо.

1 ответ

Я подозреваю, что вы можете решить это как стандартную задачу QP (Quadratic Programming):

min sum(i, y(i)^2 )
y(i) <= sum(j, a(i,j)*p(j))
y(i) <= 0

Нет необходимости в градиентах. Решатели QP, такие как quadprog, Cplex и Gurobi, могут решить эту проблему: просто включите проблему.

Последнее ограничение - это просто ограничение, которое еще больше упрощает ситуацию.

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