构建模型时,我的内存不足。有没有办法,在使用现有功能构建模型时减少模型?
详情:假设我有以下模型(来自文档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
仅包含变量x4
为x1 = 7, x2 = 3, and x3 = 5
(已解决)。这可能吗?
评论:
presolve.model()
吗?见here
但我不知道如何做到这一点。我也没有找到从gurobi::gurobi()
返回预先解决的模型的可能性。
但是,可再版例中的最后两行将模型作为文件返回 - 但不是预先解决的,如示例所示。vbasis
和cbasis
论点有关?文档陈述最后,如果最终解决方案是基本解决方案(由...计算) (单面),然后
vbasis
和cbasis
将会出现。
可重复的示例:
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
答案 0 :(得分:0)
v8.0无法实现。正如@GregGlockner所说:
如本stackoverflow questions所述,“ Gurobi允许您访问预先解决的模型,但只能从Python API访问”