Как написать многомерное ограничение в R, используя пакет CVXR? - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь решить нелинейную задачу в R, модель определяется следующим образом:

enter image description here

переменные являются векторами n элементови бета, и x - матрицы размерности nxk, где k - количество столбцов входного параметра x.

Я попытался решить проблему с помощью пакета CVXR.У меня не было проблем с реализацией целевой функции, переменной и первых ограничений.

n = length(output)

#variables

alpha = Variable(rows = n, name = "alpha")
beta = Variable(rows = n, cols = 3, name = "beta")
epsilon = Variable(rows = n, name = "epsilon")
gamma = Variable(rows = n, name = "gamma")

#objective
obj = Minimize(sum(epsilon^2))

constraints = list(
  log(output) == gamma + epsilon,
  gamma == alpha + beta[,1] * log(input[,1]) + beta[,2] * log(input[,2])+ 
  beta[,3] * log(input[,3]),
  beta >= 0
)

Код работал для этих ограничений.

Я изо всех сил пытался добавить последнее ограничение неравенства.Я попытался добавить его с помощью следующего кода:

constraints = list(
  matrix(gamma,nrow = n,ncol = n) >= t(matrix(alpha,nrow = n,ncol = n)) + 
    t(matrix(beta[,1],nrow = n,ncol = n))*log(input[,1]) +
    t(matrix(beta[,2],nrow = n,ncol = n))*log(input[,2]) + 
    t(matrix(beta[,3],nrow = n,ncol = n))*log(input[,3])
)

Но я получаю сообщение об ошибке «нет метода приведения этого класса S4 к вектору», поскольку переменные alpha, beta и gamma являются объектами S4, а нечисловые переменные.

Я не могу найти способ добавить последнее ограничение в коде.Есть ли способ сделать это с помощью пакета CVXR?Если нет, есть ли другой пакет R, который позволяет это сделать?

...