Как обрабатывать абсолютное значение в ограничениях Гуроби - PullRequest
0 голосов
/ 29 октября 2019

Я хочу обработать абсолютное значение в ограничениях Гуроби. Это мой код abc.lp. Однако я не получаю решение.

Maximize
  v0 + v1 + v2



SubjeCt To
C1: 3 v0 + v1 + v2 <=   72

C2: 2 v0 + 3 v1 + 2 v2 <= 80

C3: abs_(v0 - v1) + abs_(v1 - v2) >= 10

Integers 
v0 v1 v2
End

1 Ответ

0 голосов
/ 31 октября 2019

Функция abs_ является частью API Gurobi Python и не работает в файле LP. (Когда ваш файл LP читается, решатель интерпретирует ваше ограничение C3 как линейное ограничение с четырьмя переменными с именами abs_(v0, v1), abs_(v1 и v2).)

ТакжеОбратите внимание, что ограничения по абсолютным значениям могут принимать только форму var1 = abs_(var2). Поэтому вам нужно будет определить некоторые вспомогательные переменные для моделирования приведенного выше ограничения.

В Python API вы можете смоделировать ограничение C3 следующим образом:

a = model.addVars(4, name="a")   # auxiliary variables
model.addConstr(a[0] == v0 - v1)
model.addConstr(a[1] == v1 - v2)
model.addConstr(a[2] == abs_(a[0]))
model.addConstr(a[3] == abs_(a[1]))

model.addConstr(a[2] + a[3] >= 10)

В файле LPВы можете увидеть ограничение абсолютного значения в разделе Общие ограничения:

General Constraints
 GC0: a[2] = ABS ( a[0] )
 GC1: a[3] = ABS ( a[1] )
...