以下是使用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)
答案 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
我希望这会有所帮助。如果没有,也许有些人会发现它很有趣。