Я пытаюсь провести некоторую квадратичную оптимизацию с линейными ограничениями, используя 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".