我可以在优化之前预先设定ILP模型吗?

时间:2018-04-09 13:57:28

标签: r gurobi

构建模型时,我的内存不足。有没有办法,在使用现有功能构建模型时减少模型?

详情:假设我有以下模型(来自文档here部分Presolve。真正的代码也使用稀疏矩阵,所以这只是为了弄清楚可以做些什么):

min 2*x1 - 5*x2 + 3*x3 + 10*x4
s.t.
x1 + x2 + x3 = 15 (1)
x1 <= 7           (2)
x2 <= 3           (3)
x3 <= 5           (4)
x4 > 1            (5)

显然,满足所有这些约束的唯一方法是x1 = 7, x2 = 3, and x3 = 5。 我的目标是尽可能“在飞行中”减少尺寸。在伪代码中:

model <- build_model(objective_function,
                     restrictions (1) to (4))
model1 <- presolve_model(model)
model2 <- build_model(objective_function1,
                     restrictions model1 and (5))
result <- gurobi::gurobi(model2)

其中model1仅包含变量x4x1 = 7, x2 = 3, and x3 = 5(已解决)。这可能吗?

评论

  • 在Gurobi的Python界面中,你可以使用presolve.model()吗?见here 但我不知道如何做到这一点。我也没有找到从gurobi::gurobi()返回预先解决的模型的可能性。 但是,可再版例中的最后两行将模型作为文件返回 - 但不是预先解决的,如示例所示。
  • Gurobi确实在进行预测,从参数Presolve可以看出。
  • 专家可能希望查看this包。
  • 也许它与Gurobi的vbasiscbasis论点有关?文档陈述
  

最后,如果最终解决方案是基本解决方案(由...计算)   (单面),然后vbasiscbasis将会出现。

可重复的示例

model <- list()
model$A          <- matrix(c(1, 1, 1, 0, 
                             1, 0, 0, 0, 
                             0, 1, 0, 0, 
                             0, 0, 1, 0, 
                             0, 0, 0, 1), nrow = 5, ncol = 4, byrow = T)
model$obj        <- c(2, -5, 3, 10)
model$modelsense <- "min"
model$rhs        <- c(15, 7, 3, 5, 1)
model$sense      <- c('=', '<=', '<=', '<=', '>')
model$vtype      <- 'I'
params <- list(OutputFlag = 1, Presolve = 2, TimeLimit = 3600)

result <- gurobi::gurobi(model, params) # optimize

# gurobi::gurobi_write(model, 'mymodel.mps') # output to file
# gurobi::gurobi_write(model, 'mymodel.lp') # output to file

1 个答案:

答案 0 :(得分:0)

v8.0无法实现。正如@GregGlockner所说:

如本stackoverflow questions所述,“ Gurobi允许您访问预先解决的模型,但只能从Python API访问”