Как написать многомерное ограничение в 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, который позволяет это сделать?