0

我使用.nloptr对非线性优化问题进行建模R.Net。我将参数的初始值传递给我定义的 Rscriptlbub变量。

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# 一起使用。

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

在此处输入图像描述

约束使得第二列和第三列的总和应分别<=1。IE, 在此处输入图像描述

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

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

ub 为:

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”>1,因此出现错误!

4

1 回答 1

0

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

于 2016-09-06T18:20:19.923 回答