У меня есть такая функция: y = f(x) = a*(x/b) + c
И я хотел бы максимизировать y
с помощью Gurobi. И x
, и y
должны быть переменными Gurobi.
Как я могу смоделировать эту проблему?
P.S. a
, b
и c
— числовые значения.
У меня есть такая функция: y = f(x) = a*(x/b) + c
И я хотел бы максимизировать y
с помощью Gurobi. И x
, и y
должны быть переменными Gurobi.
Как я могу смоделировать эту проблему?
P.S. a
, b
и c
— числовые значения.
Сначала вы должны добавить как 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);
Я бы добавил к ответу Силке, что вам, вероятно, потребуется открыть диапазон для переменных x и y, чтобы они могли быть отрицательными значениями, в зависимости от используемых вами коэффициентов.