Сначала вы должны добавить как x
, так и y
в качестве переменных, например,
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);