CVXR: не распознает выпуклую функцию - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь провести некоторую квадратичную оптимизацию с линейными ограничениями, используя CVXR.У меня есть следующая матрица в R:

HL <- matrix(c(
        s[2]*sqp[2]*sqq[2],0,0,0,0,0,0,0,0,0,0,0,
        0,s[3]*sqp[3]*sqq[3],0,0,0,0,0,0,0,0,0,0,
        0,0,s[4]*sqp[4]*sqq[4],0,0,0,0,0,0,0,0,0,
        0,0,0,s[1]*sqp[1]*sqq[1],0,0,0,0,0,0,0,0,
        0,0,0,0,s[3]*sqp[3]*sqq[3],0,0,0,0,0,0,0,
        0,0,0,0,0,s[4]*sqp[4]*sqq[4],0,0,0,0,0,0,
        0,0,0,0,0,0,s[1]*sqp[1]*sqq[1],0,0,0,0,0,
        0,0,0,0,0,0,0,s[2]*sqp[2]*sqq[2],0,0,0,0,
        0,0,0,0,0,0,0,0,s[4]*sqp[4]*sqq[4],0,0,0,
        0,0,0,0,0,0,0,0,0,s[1]*sqp[1]*sqq[1],0,0,
        0,0,0,0,0,0,0,0,0,0,s[2]*sqp[2]*sqq[2],0,
        0,0,0,0,0,0,0,0,0,0,0,s[3]*sqp[3]*sqq[3]
        ), nrow = num_vars, ncol = num_vars);

Затем я пытаюсь создать DCP форму, соответствующую правилам: сначала определив x = Variable(num_vars), а затем написав fnc <- t(x) %*% HL %*% HL %*% x или дажечто-то вроде y <- HL%*%x и fnc <- t(y)%*%y.Согласно DCP Ruleset (см. Раздел «Квадратичные формы»), это должно быть распознано как выпуклое.Однако, когда я загружаю свой исходный код в R, я получаю

Формирование невыпуклого выражения (affine) * (affine)

Как это исправить?Мне нужно CVXR, чтобы можно было распознать мою функцию как "соответствующую правилам DCP".

...