Programmazione lineare
Non so se è la sezione corretta.
Ho un problema di Integer programming e devo settare i vincoli in modo che avendo $x_1,x_2,...,x_n$ variabili ognuna di esse non sia mai compresa in un determinato intervallo.
Avevo scritto che
\[x_i\leq a+M(1-w) \; \forall i\]
\[x_i\geq b+Mw \; \forall i \]
dove M è un numero grande e w binario, ma mi dà che tutti valori o sono minori di a o maggiori di b mentre io non voglio semplicemente che siano compresi tra a e b.
Ho un problema di Integer programming e devo settare i vincoli in modo che avendo $x_1,x_2,...,x_n$ variabili ognuna di esse non sia mai compresa in un determinato intervallo.
Avevo scritto che
\[x_i\leq a+M(1-w) \; \forall i\]
\[x_i\geq b+Mw \; \forall i \]
dove M è un numero grande e w binario, ma mi dà che tutti valori o sono minori di a o maggiori di b mentre io non voglio semplicemente che siano compresi tra a e b.
Risposte
Hai provato a cambiare il segno nel secondo vincolo?
Diventerebbe:
$x_i <= a+M(1-w_i)$
$x_i >= b-Mw_i$
Infatti in questo caso, definito $M~~ +oo$, si ha:
Se $w_i=1$:
$x_i <= a$
$x_i >= b-M ~~-oo$
Se $w_i=0$:
$x_i <= a+M~~ +oo$
$x_i >= b$
Dovrebbe essere quello che volevi.
PS: il pedice sulla variabile $w$ potrebbe non servire, questo lo puoi sapere solo tu. Dipende dal problema.
Diventerebbe:
$x_i <= a+M(1-w_i)$
$x_i >= b-Mw_i$
Infatti in questo caso, definito $M~~ +oo$, si ha:
Se $w_i=1$:
$x_i <= a$
$x_i >= b-M ~~-oo$
Se $w_i=0$:
$x_i <= a+M~~ +oo$
$x_i >= b$
Dovrebbe essere quello che volevi.
PS: il pedice sulla variabile $w$ potrebbe non servire, questo lo puoi sapere solo tu. Dipende dal problema.
Ti ringrazio per la risposta è che probabilmente ho sbagliato ad impostare io tutto.
Ho dei vettori $c_1,c_2,c_3, ...,c_n$ ed una matrice $s_{i,j}$
Io ho fatto questo
\[x_i+ c_i+s_{i,j}\leq x_j+M(1-y_{ij}) \;\;\; \forall i
\[x_j+c_j+s_{j,i}\leq x_i+My_{ij} \;\;\; \forall i
Per avere che $x_j=x_i+p_i+s_{ij}$
Adesso vorrei mettere che
$x_i+c_i\leq a$ OR $x_j+c_j\geq b$ per far in modo che $x_i+c_i$ non sia mai compreso tra a e b
Ho dei vettori $c_1,c_2,c_3, ...,c_n$ ed una matrice $s_{i,j}$
Io ho fatto questo
\[x_i+ c_i+s_{i,j}\leq x_j+M(1-y_{ij}) \;\;\; \forall i
Adesso vorrei mettere che
$x_i+c_i\leq a$ OR $x_j+c_j\geq b$ per far in modo che $x_i+c_i$ non sia mai compreso tra a e b