nloptr

时间:2016-08-17 04:37:13

标签: c# r excel nonlinear-optimization r.net

我使用nloptr使用R.Net建模非线性优化问题。我将参数的初始值传递给Rscript,我将lbub定义为变量。

对于所有变量,

lb为0,而对于某些变量,ub为“1”。某些变量的“Inf”。

当我运行模型时,我不断收到错误

Additional information: Error in is.nloptr(ret) : at least one element in x0 > ub

有趣的是,如果我从EXCEL向“R.Script”提供相同的初始输入数据,它运行正常,我从未收到有关x0>ub的错误。 有关如何调试或了解可能出错的任何见解?我无法理解为什么它可以与excel一起使用,但不能用C#。

以下是一些细节: 示例:参数的形式为Matrix,如下所示(称为my.data.var)

enter image description here

约束条件是第二列和第三列的总和应分别为< = 1 。即, enter image description here

所有参数的lb为0,我将其定义为:

lb = vector("numeric",length= length(my.data.var))

ub as:

ub.matrix <- matrix(,nrow = 2, ncol=4)  
ub.matrix
for(rownum in 1:2)  
{
  ub.matrix[rownum,1] = Inf                     
  ub.matrix[rownum,4] = Inf    
  for(colnum in 2:3) 
  {
    ub.matrix[rownum,colnum] = 1              
  }
}

约束函数定义为:

constraint.func <- function(my.data.var)
{
  column = 1

  constr <- vector("numeric",length = 2)   
  my.data.var.mat <- matrix(my.data.var,nrow = 2,ncol = 4,byrow = TRUE)  


  for(index in 2:3)
  {
    sum.constraint = 0
    for(prodwells in 1:2)
    {
      sum.constraint <- sum.constraint + my.data.var.mat[prodwells,index]

    }
    constr[column] <- sum.constraint - 1
    column = column+1
  }
  return(constr)

}

result <- nloptr(my.data.var,eval_f = Error.func, lb=lb,
                 ub = ub,eval_g_ineq=constraint.func,
                 opts = opts)

当我运行脚本时,我注意到第一个col的“sum”是&gt; 1因此错误!

1 个答案:

答案 0 :(得分:0)

目前,“Inf”限制解决了我手边的问题。