变量的Gurobi函数

时间:2019-04-03 17:56:53

标签: java gurobi

我有一个类似这样的功能:y = f(x) = a*(x/b) + c

我想使用Gurobi最大化yxy都必须是Gurobi变量。

如何为这个问题建模?

P.S:abc是数值。

2 个答案:

答案 0 :(得分:0)

首先,您必须同时添加xy作为变量,例如

GRBVar x = model.addVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "x");
GRBVar y = model.addVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "y");

然后将目标函数设置为最大化y

GRBLinExpr expr = new GRBLinExpr();
expr.addTerm(1.0, y);
model.setObjective(expr, GRB.MAXIMIZE);

并添加一个约束条件,说明该约束y = a*(x/b) + c或等效的y - a/b * x = c

expr = new GRBLinExpr();
expr.addTerm(1.0, y); expr.addTerm(- a/b, x); 
model.addConstr(expr, GRB.EQUAL, c, "c0");

或者,您也可以通过在变量定义中指定目标系数来设置目标。即用

代替y的定义
GRBVar y = model.addVar(0.0, GRB.INFINITY, 1.0, GRB.CONTINUOUS, "y");

目标的定义就变成了

model.set(GRB.IntAttr.ModelSense, GRB.MAXIMIZE);

答案 1 :(得分:-1)

我想在Silke's Answer中补充一点,您可能需要打开x和y变量的范围,以便它们可以是负值,具体取决于您使用的系数。