我正在尝试通过ROI
接口(ROI.plugin.lpsolve
)使用lp_solve求解器,并获得有关MIP问题的随机结果。
这是我的例子,我期待0/1二进制解决方案:
library(slam)
library(ROI)
library(ROI.plugin.lpsolve)
library(lpSolve)
solver = "lpsolve"
volume <- c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L)
profit <- c(20L, 15L, 12L, 10L, 7L, 5L, 5L, 5L, 4L, 3L, 2L, 1L, 0L, 40L,
38L, 36L, 35L, 30L, 26L, 25L, 22L, 20L, 17L, 15L, 10L, 5L, 0L,
100L, 60L, 40L, 20L, 10L, 5L, 5L, 5L, 5L, 5L, 0L)
cap <- 65
lp <- OP(objective = profit,
constraints = L_constraint(L = rbind(volume),
dir = c("<="),
rhs = cap),
maximum = TRUE)
types(lp) <- rep("B", length(volume))
mod <- ROI_solve(lp, solver)
res <- mod$solution
print(res)
# 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0
正确的解决方案是:
# 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0
似乎插件没有正确设置类型向量。
答案 0 :(得分:1)
感谢您指出这一点!
在ROI.plugin.lpsolve
的新版本0.3-2中已解决此问题。
自2018年12月20日起在CRAN上投放。
问题在于,在lpSolveAPI
包中,如果您先设置边界或类型,则会有所不同。在lpSolveAPI
中,应首先设置边界,然后设置类型。