Programmazione lineare

jules05
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.

Risposte
Intermat
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.

jules05
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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.