CVXR:处理变量矩阵的非对角元素

时间:2019-07-10 22:54:45

标签: cvx cvxr

假设在CVXR中有一个定义A <- Variable(3,3) 并希望最大化功能“非对角元素的平方根之和”。但是,如果我写类似 sum(sqrt(A))-sum(sqrt(diag(A))),第一个函数是凹函数,但是第二个函数也是凹函数,它不符合DCP Ruleset,因此被CVX引擎拒绝。但是,很明显,函数是凹的-我们仅删除了总和中的某些元素, 没有办法说“请考虑非对角元素”。 该怎么办?

1 个答案:

答案 0 :(得分:0)

您是否尝试过将第二项(下面的term2)写成实际对角线的总和?例如,

e <- function(i, n = 3) {
  res <- numeric(n)
  res[i] <- 1
  res
}
diag_elem <- function(A, i) quad_form(e(i), A)
diags <- lapply(seq_len(3), diag_elem, A = A)
term2 <- sum(sqrt(do.call(vstack, diags)))