Variabile booleana vera equazione iff soddisfatta in ILP


8

Assumendo è una variabile booleana in un programma ILP (cioè , v ) e , sono delimitate interi variabili tra e . Voglio codificare il seguente vincolo di alto livello:yyZ0<=y<=1x1x20M

y=1x1x2

Finora ho questo:

x1x2+(M+1)y

Ciò impone che ogni volta che è vero, deve essere o l'equazione non regge. Tuttavia, se , nulla limita e quindi potrebbe essere o .x1>x2y1x1x2y01

Quale altra equazione potrei aggiungere per codificare il vincolo?


Risposte:


5

Puoi farlo introducendo le due disuguaglianze

x1x2+M(1y)

e

x1>x2My.

Il primo codifica il requisito (puoi vedere che se , il termine scompare; se , allora diventa qualcosa di enorme e la disuguaglianza viene automaticamente soddisfatta). Quest'ultimo codifica il requisito (per motivi simili). y=1x1x2y=1M(1y)y=0M(1y)y=0x1>x2

Spero che questo ti dia un'idea di come gestire anche altri tipi di implicazioni, qualora dovessero insorgere. Fondamentalmente, moltiplicare per qualcosa di grande e aggiungerlo / sottrarlo da qualche parte.


4

È possibile aggiungere una costante e quindi aggiungere questo vincolo:0<A<M

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

Se allora ti rimaney=1

Mx1x20,
che indica che .x1x2

E se ti verrà lasciato cony=0

Ax1x2M,
che indica che (da ).x1>x20<A<M

3

Esaminare i vincoli dell'indicatore e i vincoli SOS. Sebbene sia possibile definire le relazioni target in modo lineare come hanno spiegato altre risposte, il risolutore IP può gestire in modo più efficiente vincoli speciali.

Se decidi di implementare i vincoli direttamente come descritto dall'altra risposta, prova a utilizzare la M più piccola possibile e considera di ridurre la tolleranza di integrità se il risultato non è corretto. Inoltre, evitare disuguaglianze rigorose, sono ambigue nel contesto dell'aritmetica in virgola mobile.

Utilizzo dei vincoli dell'indicatore:

x1x2y=1

x2x1+1y=0

Il secondo vincolo equivale a per gli interi, se si desidera rilasciare semplicemente 1.x2>x1x2x1


Grazie per i suggerimenti utili! Puoi approfondire come i vincoli SOS sono utili / utili in questa situazione particolare?
DW

Ho aggiunto un esempio con i vincoli dell'indicatore. Per SOS è più complicato e devi introdurre variabili aggiuntive, quindi potresti finire per non guadagnare molto usandole. Penso che l'unico aspetto a cui prestare attenzione qui siano le questioni numeriche che possono sorgere usando le formulazioni proposte da altri e come alleviarle. Se hai accesso a un risolutore con vincoli di indicatore, prova in questo modo poiché il risolutore può diramarsi direttamente su di essi o modificare dinamicamente il valore big-M.
Settimio G,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.