CVXR: адресация недиагональных элементов матрицы переменных

Предположим, что в CVXR У меня есть определение A <- Variable(3,3)и хотел бы максимизировать функцию "сумма квадратных корней недиагональных элементов". Однако, если я напишу что-то вродеsum(sqrt(A))-sum(sqrt(diag(A)))первая функция вогнутая, но вторая тоже не соответствует DCP Ruleset и поэтому отклонено CVX двигатель. Однако очевидно, что функция вогнута - мы просто удалили некоторые элементы из суммы, и нет способа сказать "рассмотрите недиагональные элементы, пожалуйста". Что можно сделать?

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)))

Другие вопросы по тегам