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