CVXR: определенное подмножество матрицы переменных - PullRequest
0 голосов
/ 07 июля 2019
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).

...