我正在尝试使用线性约束进行一些二次优化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 规则集(参见二次形式部分),这应该被识别为凸的。但是,当我将源代码加载到R
中时,我得到
形成非凸表达式(仿射)*(仿射)
如何解决这个问题?我需要CVXR
能够将我的功能识别为“遵循 DCP 规则”。