我正在尝试解决R中的非线性问题,模型定义如下:
变量是n个元素的向量,而beta和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类强制转换为向量的方法”,因为变量alpha,beta和gamma是S4对象,而不是数字变量。
我找不到在代码中添加最后一个约束的方法。有没有办法使用CVXR软件包来做到这一点?如果不是,是否有另一个R软件包可以这样做?