【问题标题】:CVXR: addressing non-diagonal elements of a matrix of variablesCVXR:处理变量矩阵的非对角元素
【发布时间】:2019-07-10 22:54:45
【问题描述】:

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

【问题讨论】:

    标签: cvx cvxr


    【解决方案1】:

    您是否尝试将第二项(下面的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)))
    
    

    【讨论】:

    • 更正上一条语句:term2 &lt;- sum_entries(sqrt(do.call(vstack, diags)))
    猜你喜欢
    • 2020-02-05
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多