Vincolo logico in ILP
Voglio scrivere il seguente vincolo:
Permettere$z$essere una variabile intera tale che$0\le z\le M$, e$t$essere una variabile binaria dove$M$denota M grande. Il vincolo logico è il seguente:
Se$z \leq M$e$z > 0$poi$t=1$;
Se$z=0$poi$t=0$.
È questo$z≤Mt$sufficiente? Il$t$e$z$le variabili non sono nella mia funzione obiettivo ma variabile$t$è connesso a un'altra variabile nella funzione obiettivo?
Grazie mille, apprezzo il tuo aiuto.
Risposte
Il vincolo della grande M$z \le M t$fa rispettare$z > 0 \implies t = 1$, equivalentemente il suo contropositivo$t = 0 \implies z = 0$, ma non viceversa$$z = 0 \implies t = 0. \tag1$$Far rispettare$(1)$, considera la sua contropositiva$$t = 1 \implies z > 0 \tag2,$$che puoi applicare tramite il vincolo big-M$$\epsilon - z \le (\epsilon - 0)(1 - t),$$equivalentemente,$$z \ge \epsilon t,$$dove$\epsilon > 0$è una tolleranza che rappresenta il valore più piccolo di$z$che tu considereresti positivo.