# MODELLO B #
# L’esempio qui mostrato è simile a quello applicato per il
# caso reale del comprensorio della Valdinievole, sono quindi
# assenti rispetto al modello A i costi edili e la diversa entità
# dei costi di esercizio della tecnologie di trattamento fango
# previste
# Parametri #
param I; # numero degli impianti di depurazione
param P1; # indici numerici dell'ultima piattaforma di ogni param P2=2*P1; # colonna del grafo bipartito
param P3=3*P1;
param P4=4*P1;
param D {1..I}; # produzione di fanghi associata ad ogni impianto # di depurazione
param L {1..I,1..P4}; # distanza fra ogni impianto di depurazione # e ogni piattaforma di trattamento fango
param Q_T1_MAX; # capacità minima e massima della tecnologia 1 param Q_T2_MAX; # e stessi parametri per la tecnologia 2
param Q_T1_MIN;
param Q_T2_MIN;
param C_T1; # costo di acquisto della tecnologia 1 e 2 param C_T2;
param C_U_ES_T; # costo di esercizio della tecnologia 1 e 2
param Q {1..I}; # capacità del veicolo per il trasporto fanghi # associata ad ogni impianto di depurazione.Si # suppone a titolo di esempio che sono presenti # due possibili capacità con valore 1 e 2
param C_U_TR1; # costo unitario di trasporto per unità di param C_U_TR2; # distanza percorsa per la capacità 1 e 2
# Variabili #
var S {1..I,1..P4} >=0; # variabile della quantità di fango # trasportata da ogni impianto verso # ogni piattaforma
var Y {1..P4} binary; # variabile binaria di localizazione
var U {1..P4} >=0; # variabile del livello di attività di # ogni piattaforma
# Funzione obiettivo #
minimize OBIETTIVO: sum {i in 1..I} sum {j in 1..P4} (((S [i,j]*L [i,j])
/Q[i])*(if Q[i]=1 then C_U_TR1 else C_U_TR2)) +
sum {j in 1..P1}(C_T1*Y[j] + C_U_ES_T*U[j]) + sum {j in P1+1..P2}(C_T2*Y[j] + C_U_ES_T*U[j]) +
sum {j in P2+1..P3}((C_T1+C_T2)*Y[j] + C_U_ES_T*U[j]) +
sum {j in P3+1..P4}(2*C_T1*Y[j] + C_U_ES_T*U[j]);
#Vincoli#
s.t. vinc1 {j in 1..P4}: sum {i in 1..I} S [i,j] = U[j];
s.t. vinc2 {i in 1..I}: sum {j in 1..P4} S[i,j]=D[i];
s.t. vinc3a {j in 1..P1}: sum {i in 1..I} S [i,j]<= Q_T1_MAX * Y[j];
s.t. vinc3b {j in P1+1..P2}: sum {i in 1..I} S [i,j]<= Q_T2_MAX * Y[j];
s.t. vinc3c {j in P2+1..P3}: sum {i in 1..I} S [i,j]<= (Q_T1_MAX
+ Q_T2_MAX) * Y[j];
s.t. vinc3d {j in P3+1..P4}: sum {i in 1..I} S [i,j]<= 2 * Q_T1_MAX
* Y[j];
s.t. vinc3e {j in 1..P1}: sum {i in 1..I} S [i,j]>= Q_T1_MIN * Y[j];
s.t. vinc3f {j in P1+1..P2}: sum {i in 1..I} S [i,j]>= Q_T2_MIN * Y[j];
s.t. vinc3g {j in P2+1..P3}: sum {i in 1..I} S [i,j]>= (Q_T1_MIN
+ Q_T2_MIN) * Y[j];
s.t. vinc3h {j in P3+1..P4}: sum {i in 1..I} S [i,j]>= 2 * Q_T1_MIN
* Y[j];
s.t. vinc4 {k in 1..P1}: sum {j in k..P4 by P1} Y [j] <=1;
s.t. vinc5a : sum {j in 1..P4 by P1} Y [j] = 1;
s.t. vinc5b : sum {j in 4..P4 by P1} Y [j] = 1;
# per il vincolo di tipo 5 si sceglie a titolo di esempio di attivare
# la piattaforme con indice j=1 (5a) e la piattaforma con indice j=4 (5b)