Variável booleana verdadeira se a equação for satisfeita no ILP

8

Assumindo y é uma variável booleana em um programa ILP (ou seja, yZst 0<=y<=1) e x1, x2 são variáveis ​​inteiras delimitadas entre 0 e M. Quero codificar a seguinte restrição de alto nível:

y=1x1x2

Até agora eu tenho isso:

x1x2+(M+1)y

Isso força que sempre que x1>x2 é verdade, y devemos ser 1ou a equação não será válida. No entanto, sex1x2, nada está restringindo y e assim poderia ser 0 ou 1.

Que outra equação eu poderia adicionar para codificar a restrição?

Setzer22
fonte

Respostas:

5

Você pode fazer isso introduzindo as duas desigualdades

x1x2+M(1y)

e

x1>x2My.

O primeiro codifica o requisito y=1x1x2 (você pode ver que se y=1, então o M(1y)termo desaparece; E sey=0, então M(1y)torna-se algo enorme e a desigualdade é automaticamente satisfeita). Este último codifica o requisitoy=0x1>x2 (por razões semelhantes).

Espero que isso lhe dê uma idéia de como lidar com outros tipos de implicações também, caso surjam. Basicamente, multiplique por algo grande e adicione / subtraia em algum lugar.

DW
fonte
5

Você pode adicionar uma constante 0<A<M e você adiciona esta restrição:

Ay(A+M)x1x2M(1y).

Se , você ficará comy=1

Mx1x20,
que que .x1x2

E se , você ficará comy=0

Ax1x2M,
que que (desde ).x1>x20<A<M
Ribz
fonte
3

Observe as restrições de indicadores e as restrições de SOS. Embora você possa definir as relações de destino linearmente como outras respostas explicaram, restrições especiais podem ser tratadas com mais eficiência pelo solucionador de IP.

Se você decidir implementar as restrições diretamente, conforme descrito pela outra resposta, tente usar o menor M possível e considere diminuir a tolerância à integralidade se o resultado não estiver correto. Além disso, para evitar desigualdades estritas, elas são ambíguas no contexto da aritmética de ponto flutuante.

Usando restrições de indicadores:

x1x2y=1

x2x1+1y=0

A segunda restrição é equivalente a para números inteiros, se você quiser simplesmente solte o 1.x2>x1x2x1

Septimus G
fonte
Obrigado pelas sugestões úteis! Você pode elaborar como as restrições do SOS são úteis / úteis nessa situação específica?
DW
Eu adicionei um exemplo com restrições de indicadores. Para o SOS, é mais complicado e é necessário introduzir variáveis ​​adicionais; portanto, você pode não ganhar muito usando-as. Penso que o único aspecto a ser cuidadoso aqui são as questões numéricas que podem surgir usando as formulações propostas por outros e como aliviá-las. Se você tiver acesso a um solucionador com restrições de indicadores, tente-o dessa maneira, pois o solucionador pode se ramificar diretamente sobre eles ou modificar dinamicamente o valor big-M.
Septimus G