Как написать многомерное ограничение в R, используя пакет CVXR?

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

переменные - это векторы из n элементов, а бета и x - матрицы размерности n x k, где 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 к вектору", потому что переменные альфа, бета и гамма являются объектами S4, а не числовыми переменными.

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

0 ответов

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