Miscelazione di benzine Una raffineria deve miscelare 4 tipi di petrolio grezzo per ottenere 3 tipi di benzina. La tabella seguente mostra la massima quantità disponibile per ogni tipo di petrolio grezzo (in barili) e il corrispondente costo (Euro/barile). Tipo di petrolio Disponibilità Costo 1 5000 9 2 2400 7 3 4000 12 4 1500 6 La specificazione tecnica di ogni tipo di benzina, vincola la quantità usata di ogni petrolio per la sua produzione. La tabella seguente mostra questo vincolo di miscelazione insieme al rispettivo prezzo di vendita (Euro/barile). Tipo di benzina Petrolio richiesto Prezzo A almeno 20% di tipo 2 12 al massimo 30% di tipo 3 B almeno 40% di tipo 3 18 C al massimo 50% di tipo 2 10 Formulare in termini di programmazione lineare il problema di determinare come la raffineria deve miscelare i diversi olii in modo tale da massimizzare il profitto. Documento preparato da G. Carello, B. Addis e C. Iuliano 1
Schema del modello in AMPL (file miscelazione.mod) # SETS set I set J # PARAMS param c{i} param b{i} param r{j} param q_max{i,j} default 1 param q_min{i,j} default 0 data Dati (file miscelazione.dat), valore ottimo: 96000 set I := 1 2 3 4 set J := A B C param c := 1 9 2 7 3 12 4 6 param b := 1 5000 2 2400 3 4000 4 1500 param r := A 12 B 18 C 10 param q_max := 3 A 0.3 2 C 0.5 param q_min := 2 A 0.2 3 B 0.4 Documento preparato da G. Carello, B. Addis e C. Iuliano 2
Soluzione Formulazione Insiemi I: petroli J: benzine Parametri c i : costo per barile dell i esimo tipo di petrolio, con i I b i : massima disponibilità dell i-esimo tipo di petrolio, con i I r j : prezzo di vendita per barile del j esimo tipo di benzina, con j J qij max : massima quantità (in percentuale) dell i-esimo tipo di petrolio per il j-esimo tipo di benzina, con i I e j J qij min : minima quantità (in percentuale) dell i-esimo tipo di petrolio per il j-esimo tipo di benzina, con i I e j J Variabili decisionali x ij : quantità dell i-esimo tipo di petrolio nel j-esimo tipo di benzina, con i I e j J y j : quantità venduta del j-esimo tipo di benzina, con j J Modello min s.t. r j y j j J i I,j J c i x ij (profitto) x ij b i i I (disponibilità) j J y j = x ij i I j J (conservazione) x ij qij max y j i I, j J (quantità massima) x ij qij min y j i I, j J (quantità minima) x ij, y j 0 i I, j J (variabili non negative) Documento preparato da G. Carello, B. Addis e C. Iuliano 3
Effettuando la sostituzione delle variabili y j, con j J, si ottiene il modello alternativo: Modello min s.t. i I,j J (r j c i )y j (profitto) x ij b i i I (disponibilità) j J x ij q max ij x ij q min ij x i j i I, j J (quantità massima) i I x i j i I, j J (quantità minima) i I x ij, y j 0 i I, j J (var. non negative) Notare il differente indice nella sommatoria dei vincoli di blending. Documento preparato da G. Carello, B. Addis e C. Iuliano 4
Modello in AMPL (file miscelazione.mod) # SETS set I set J # PARAMS param c{i} param b{i} param r{j} param q_max{i,j} default 1 param q_min{i,j} default 0 # VARS var x{i,j} >= 0 var y{j} >= 0 # OBJECTIVE FUNCTION maximize profitto: sum{j in J} r[j] * y[j] - sum{i in I, j in J} c[i] * x[i,j] # CONSTRAINTS subject to disponibilita{i in I}: sum{j in J} x[i,j] <= b[i] subject to conservazione{j in J}: y[j] = sum{i in I} x[i,j] subject to quantita_max{i in I, j in J}: x[i,j] <= q_max[i,j] * y[j] subject to quantita_min{i in I, j in J}: x[i,j] >= q_min[i,j] * y[j] Esecuzione in AMPL (file miscelazione.run) model miscelazione.mod data miscelazione.dat option display_1col 0 option solver cplex solve display x,y Documento preparato da G. Carello, B. Addis e C. Iuliano 5
Soluzione CPLEX 11.2.0: optimal solution objective 96000 2 dual simplex iterations (0 in phase I) x [*,*] : A B C := 1 2320 2680 0 2 580 1820 0 3 0 4000 0 4 0 1500 0 y [*] := A 2900 B 10000 C 0 Modello alternativo in AMPL (file miscelazione-b.mod) # SETS set I set J # PARAMS param c{i} param b{i} param r{j} param q_max{i,j} default 1 param q_min{i,j} default 0 # VARS var x{i,j} >= 0 # OBJECTIVE FUNCTION maximize profitto: sum{i in I, j in J} (r[j] - c[i]) * x[i,j] # CONSTRAINTS subject to disponibilita{i in I}: sum{j in J} x[i,j] <= b[i] subject to quantita_max{i in I, j in J}: x[i,j] <= q_max[i,j] * sum{i2 in I} x[i2,j] subject to quantita_min{i in I, j in J}: x[i,j] >= q_min[i,j] * sum{i2 in I} x[i2,j] Documento preparato da G. Carello, B. Addis e C. Iuliano 6