Определить переменную Гуроби на основе другой переменной - PullRequest
0 голосов
/ 11 января 2020

Я использую Gurobi 9.0.0 с Python API для решения MIP. Я застрял в выражении переменной, определенной на основе другой переменной.

В частности, у меня есть переменная x[i], определенная для диапазона i. Теперь я хочу создать переменную y[i], которая представляет собой абсолютную разницу между x[i] и x[i+1] для определенного диапазона i. Конечная цель - минимизировать максимум y по всем i в цели.

Я попытался определить переменную следующим образом:

y[i] = model.addVar(abs_(x[i] - x[i+1]) for i in range(i_range - 1))

, но Гуроби выдает ошибку

File "model.pxi", line 2562, in gurobipy.Model.addVar
TypeError: must be real number, not GenExpr

Непосредственное определение цели на основе x без y также приводит к ошибкам.

Это должно быть довольно типичный вариант использования. Как мне правильно определить это в Gurobi?

1 Ответ

2 голосов
/ 11 января 2020

Обратите внимание, что на AddVar(abs_(x[i] - x[i+1] for range(i_range - 1) части вы пытаетесь добавить одну переменную с командой, но в качестве аргумента используется выражение генератора (т. Е. Несколько выражений, индексированных i). Это приводит к полученной вами ошибке.

Обычный шаг для добавления определений, подобных этому, состоит в добавлении двух переменных: y как вещественной переменной (свободный знак) и z неотрицательной переменной, каждая из которых проиндексирована одним и тем же установить x, а затем добавить следующие ограничения:

model.addConstrs(y[i] == x[i] - x[i+1]) for i in range(i_range - 1))

m.addConstr(z == abs_(y))

...