【发布时间】:2016-10-23 10:22:55
【问题描述】:
有没有办法在 R 的 nloptr 包中定义多个“不等式约束”?
不等式函数需要有五个不等式约束;矩阵的 colsum(从整数向量堆叠)
这是我实现它的方式:
constraint.func <- function(my.data.var)
{
column = 2
constr <- c("numeric",ncol(my.data.matrix.inj) )
for(index in 1:ncol(my.data.matrix.inj)) #1 to 5
{
constr[index] <- sum(my.data.var[column], my.data.var[column+6], my.data.var[column+12], my.data.var[column+18])-1
column = column+1
}
constr.1 <- c(constr[1],constr[2],constr[3],constr[4],constr[5])
return(constr.1)
}
my.data.var 是堆叠为矩阵的数字向量。
my.data.var <- c(10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25)
我的.data.var
NLOPTR 定义如下,但当我运行它时,它显示“不等式约束数 =0”。
opts = list("algorithm"="NLOPT_LN_COBYLA",
"xtol_rel"=1.0e-5, "maxeval"=500)
result <- nloptr(my.data.var,eval_f = Error.func,lb=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
ub = (Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1),
eval_g_ineq=constraint.func,opts = opts)
print(result)
【问题讨论】:
-
我参考了这篇帖子stackoverflow.com/questions/31431575/…,但无济于事。
-
@halfer:当然。谢谢
-
Error.func未定义,并且在添加从 pkg::nloptr 引入 nloptr 的代码后尝试运行代码时会显示缺少c(调用。 -
@42- 我刚刚修改了代码并使其工作。已编辑。