使用整数解的无导数优化

时间:2014-12-10 19:50:37

标签: r optimization

以下是使用Nelder-Mead无衍生优化算法的示例。问题是我想要一个整数值参数的解决方案。有没有人知道在R中做到这一点的方法?

library(dfoptim)

fn <- function(x) {
f1 <- x[1] + 6*x[2]
f2 <- 3*(10-x[1]) + 5*(10-x[2])
max(f1, f2)
}

par0 <- c(1, 1) 
nmkb(par0, fn, lower = 0, upper = 10)

1 个答案:

答案 0 :(得分:1)

跟进我的评论,您的问题可以像混合整数线性规划一样重写:

Minimize z               (A)
Subject to
  z >= x + 6y            (B)
  z >= 80 - 3x - 5y      (C)
  x >= 0                 (D)
  x <= 10                (E)
  y >= 0                 (F)
  y <= 10                (G)
  x, y are integer       (H)

使用分支定界算法解决MILP,该算法应该比非线性求解器更快。一个这样的免费解算器是lpSolve

library(lpSolve)
res <- lp(direction = "min",
          objective.in = c(1, 0, 0),       # (A) (weights for {z, x, y})
          const.mat = rbind(c(1, -1, -6),  # (B)
                            c(1, +3, +5),  # (C)
                            c(0,  1,  0),  # (D)
                            c(0,  1,  0),  # (E)
                            c(0,  0,  1),  # (F)
                            c(0,  0,  1)), # (G)
          const.dir = c(">=", ">=", ">=", "<=", ">=", "<="),  # (B through G)
          const.rhs = c(  0,   80,    0,   10,    0,   10),   # (B through G)
          int.vec   = c(2, 3))             # (H)

res$solution    # optimal values for z, x, y respectively
# [1] 33  9  4

我希望这会有所帮助。如果没有,也许有些人会发现它很有趣。