如何使用软件包CVXR在R中编写多维约束?

时间:2019-06-09 12:11:23

标签: r nonlinear-optimization cvxr

我正在尝试解决R中的非线性问题,模型定义如下:

enter image description here

变量是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软件包可以这样做?

0 个答案:

没有答案