CVXR: определенное подмножество матрицы переменных
library("CVXR");
n <- c(1,1,1)
s <- c(1e3,1e5,1e4)
p <- c(0.99,0.93,0.95)
q <- 1-p
K <- length(n)
m <- n-1
A <- Variable(K,K) # for A[i,j] is alpha[i,j]
B <- Variable(K) # B[j] is alpha^*[jj]
D <- diag(A) # extract the diagonal elements from A
constraints <- list( ((t(A)-D)%*%(n*s*p))*q - (((A-D)%*%(n*q))*(p*s)) == 0, B*m + diag(D) + (A-D)%*%n == rep(1,K) )
fnc <- sum(D^2) - (m%*%sqrt(B)) - sum(sqrt(A-D) %*% n);
objective <- Minimize(fnc)
problem <- Problem(objective,constraints);
result <- solve(problem)
result$A
result$B
Устав от преобразования моих математических моделей в непрерывно пронумерованные переменные, я решил, что теперь буду добросовестно представлять их. Итак, здесь мы решаем задачу оптимизации, с переменными, заданными как KxK
матрица A
и K
вектор B
, Теперь у меня есть определенные ограничения, которые государство делает то же самое с недиагональными элементами A
так что я хотел бы снять их с рассмотрения. Была надежда, что A-D
удалил бы их, но, видимо, нет, я получаю incompatible shapes
ошибка. Итак, как сказать что-то о (семантическом) A-D
правильно? Итак, чтобы уточнить, если я установлю некоторые линейные ограничения на переменные, я мог бы сказать, например, A%*%x == b
, но как это сделать для A-D
?
РЕДАКТИРОВАТЬ: В этом примере у каждого есть матрица P
переменных и установить ограничения, такие как P%*%ones == ones
, Теперь пусть D = diag(P)
(или что-то на этот счет). Что касается примера в ссылке, мой вопрос, по сути, как написать (P-D) %*% ones == ones
? CVXR
не позволяет P-D
- это говорит "несовместимые формы". На самом деле, D
появляется как DiagMat
в R
консоль, тогда как P
как Variable(3,3)
,