2016-07-11 4 views
-1

В настоящее время я работаю над проблемой оптимизации на GUROBI. Все мои переменные имеют двоичный тип. У меня есть переменная y, которая равна абсолюту разности двух двоичных переменных решения. Однако, когда я пытался использовать абс (), я получаю этот вывод.Как получить абсолютное значение линейного выражения?

TypeError: bad operand type for abs(): 'gurobipy.LinExpr' 

Поэтому я теперь возлагаю квадрат на разницу (поскольку разница всегда равна -1,0 или 1). Но это приводит к более высокому времени оптимизации (квадратичные выражения после возведения в квадрат). Есть ли альтернатива этому?

Также существует случай (не двоичные переменные), где разница двух переменных может не быть -1,0 или 1. Как я могу принять абсолют в этом случае?

ответ

1

y=|x1-x2| для двоичной переменной то же, что и y = x1 xor x2. Это можно сделать следующим образом:

y <= x1+x2 
y >= x1-x2 
y >= x2-x1 
y <= 2-x1-x2 

(см. here).

Когда x1,x2 являются непрерывными переменными между 0 и U вы можете написать:

y1-y2 = x1-x2 
y = y1+y2 
y1 <= delta*U 
y2 <= (1-delta)*U 
y1>=0 
y2>=0 
delta in {0,1} 

Во многих случаях это может быть упрощены.

 Смежные вопросы

  • Нет связанных вопросов^_^