首页 > 解决方案 > CVXR:无法识别凸函数

问题描述

我正在尝试使用线性约束进行一些二次优化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 规则”。

标签: rcvx

解决方案


推荐阅读