Я использую nloptr
для моделирования проблемы нелинейной оптимизации с использованием R.Net
. Я передаю начальные значения параметров в Rscript, где я определяю lb
и ub
переменным.Ошибка верхней границы в nloptr
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)
Ограничения таковы, что сумма второго и третьего седловине col должно быть < = 1 соответственно. т.е.
ЛБ для всех параметров 0 и я определить его как:
lb = vector("numeric",length= length(my.data.var))
иь как:
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> 1 и он nce ошибка!
Вы можете сделать это воспроизводимым? – shayaa
Вы в основном публикуете _only_ сообщение об ошибке и спрашиваете нас, что пошло не так. –
Интересная проблема! Я с удовольствием посмотрю на него, как только смогу воспроизвести его: D –