Функция переменных Гуроби

У меня есть такая функция: y = f(x) = a*(x/b) + c

И я хотел бы максимизировать y с помощью Gurobi. И x, и y должны быть переменными Gurobi.

Как я могу смоделировать эту проблему?

P.S. a, b и c — числовые значения.


person Hugo Kuribayashi    schedule 03.04.2019    source источник


Ответы (2)


Сначала вы должны добавить как 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);
person Silke Horn    schedule 04.04.2019

Я бы добавил к ответу Силке, что вам, вероятно, потребуется открыть диапазон для переменных x и y, чтобы они могли быть отрицательными значениями, в зависимости от используемых вами коэффициентов.

person somedude    schedule 03.05.2019
comment
хотел бы получить отзыв о том, почему это не полезно - person somedude; 03.05.2019