gpt4 book ai didi

java - 写入文件: Constraints and Variables of Gurobi GRBModel in Java

转载 作者:行者123 更新时间:2023-12-01 18:44:47 30 4
gpt4 key购买 nike

我考虑了一些整数线性程序的代码,它按预期执行(参见问题末尾)。现在,我正在寻找一个过程,让我将 ILP 写入文件,以便人们可以读取它,例如,在文件中它应该读取如下所示的内容:

maximize x + y + 2 z
c0: x + 2 y + 3 z <= 4
c1: x + y >= 1
x binary
y binary
z binary

确切的格式并不重要,我只需要能够阅读它。我怎样才能实现这个目标?

代码:

import gurobi.*;

public class Mip1 {
public static void main(String[] args) {
try {

// Create empty environment, set options, and start
GRBEnv env = new GRBEnv(true);
env.set("logFile", "mip1.log");
env.start();

// Create empty model
GRBModel model = new GRBModel(env);

// Create variables
GRBVar x = model.addVar(0.0, 1.0, 0.0, GRB.BINARY, "x");
GRBVar y = model.addVar(0.0, 1.0, 0.0, GRB.BINARY, "y");
GRBVar z = model.addVar(0.0, 1.0, 0.0, GRB.BINARY, "z");

// Set objective: maximize x + y + 2 z
GRBLinExpr expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(1.0, y); expr.addTerm(2.0, z);
model.setObjective(expr, GRB.MAXIMIZE);

// Add constraint: x + 2 y + 3 z <= 4
expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(2.0, y); expr.addTerm(3.0, z);
model.addConstr(expr, GRB.LESS_EQUAL, 4.0, "c0");

// Add constraint: x + y >= 1
expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(1.0, y);
model.addConstr(expr, GRB.GREATER_EQUAL, 1.0, "c1");

// Optimize model
model.optimize();

// Dispose of model and environment
model.dispose();
env.dispose();

} catch (GRBException e) {
System.out.println("Error code: " + e.getErrorCode() + ". " +
e.getMessage());
}
}
}

最佳答案

您可以通过将模型写为 LP 文件来完成此操作。 LP 文件格式在不同的求解器中并未标准化,但一般来说它与您描述的格式非常匹配。

在 Gurobi Java API 中,我们可以使用 GRBModel.write() 将模型写入文件。方法。例如,如果我们直接在调用 GRBModel.optimize() 之前添加 model.write("mip1.lp");,Gurobi 将创建文件 mip1 .lp 包含以下内容:

\ LP format - for model browsing. Use MPS format to capture full model detail.
Maximize
x + y + 2 z
Subject To
c0: x + 2 y + 3 z <= 4
c1: x + y >= 1
Bounds
Binaries
x y z
End

由于 LP 文件是人类可读的,因此 Gurobi 在写入文件时可能会截断一些数字。如果您想以全精度编写模型,则应使用 MPS 文件格式(人类不易阅读)。

您可以使用模型文件名作为 GRBModel() constructor 中的第二个参数,将文件读入 GRBModel 对象。 。例如:

GRBModel model = new GRBModel(env, "mip1.lp");

关于java - 写入文件: Constraints and Variables of Gurobi GRBModel in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59860788/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com