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

0 ответов

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