我使用.nloptr
对非线性优化问题进行建模R.Net
。我将参数的初始值传递给我定义的 Rscriptlb
和ub
变量。
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)
所有参数的 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,因此出现错误!