更快的求解器-循环

时间:2019-03-10 20:48:48

标签: r

说我们有一个成本函数:

my_func <- function(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11){
  rst <- (x1^2) * x2 + x2 + x3*x4*x5*x6*x7*x8*x9 + x10^3 + (1-x11-x10)
  return(rst)
}

实际示例具有相同数量的变量,更复杂的成本函数。

然后说我对每个变量都有约束:

0 <= x1 <= (1/11)
0 <= x2 <= (1/20)
0 <= x3 <= (1/5)
....
0 <= x11 <= (1/10)

我想为此找到最低成本。

我当前的解决方案是,首先为每个变量构建序列,并以给定的精度(0.001),例如x1:

x1.seq <- seq(0, 1/11, by = 0.001)
....

然后我运行11个循环,并尝试每种组合,以尝试找到最小值:

hold <- NULL # Preallocation of this variable does help, a bit...
for (i in 1:length(x1.seq){
  x1 <- x1.seq[i]
  for (j in 1:length(x2.seq){
    x2 <- x2.seq[j]
      ....
      hold <- c(hold, my_func(x1 = x1, ..., x11 = x11))
      ....
  }
}
min(hold)

现在,正如大家可能都知道的那样,如果准确性不高,它将永远运行。那么在R中有更快的方法吗?我知道其他方法,例如偏导数或Lagrange乘法器等,但是它们也很耗时(并且对我的非线性问题很粗糙),并且我正在寻找一种R代码方法(如果存在)。