Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Ricerca Operativa
G. Liuzzi1
Lunedı́ 26 Marzo 2015
1
Istituto di Analisi dei Sistemi ed Informatica IASI - CNR
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Problema di produzione e trasporto
Un’industria produce due tipi di trafilati in acciaio (T1 e T2).
Si possono utilizzare tre impianti produttivi (F1, F2 e F3).
I prodotti devono essere inviati a due magazzini (M1 e M2).
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Costi e tempi di lavorazione
Ogni impianto è caratterizzato da costi (e) e tempi di lavorazione
(h) come riportato nella tabella.
T1
T2
hmax
Ricerca Operativa
F1
cost time
8
0.8
9
1.0
2000
F2
cost time
7
0.7
8
0.8
2700
F3
cost time
6
0.6
7.5
0.7
2500
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Costi di trasporto
Costi (e) relativi al trasporto dagli impianti ai magazzini
M1
M2
Ricerca Operativa
F1
1
1.5
F2
2.5
2
F3
4
3.5
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Richieste minime
In ciascun magazzino è necessarfio soddisfare le seguenti richieste
minime
M1
M2
Ricerca Operativa
T1
1000
2000
T2
1500
1200
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (le variabili)
Variabili di decisione:
xtfm ≡ q.ta di trafilato t prodotto in f ed inviato a m
t ∈ {T 1, T 2}, f ∈ {F 1, F 2, F 3}, m ∈ {M1, M2}
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (l’obiettivo)
Funzione obiettivo:
f (x) =
XXX
t
f
cptf + ctfm xtfm
m
Obiettivo: minx f (x)
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (i vincoli)
Vincoli di tempo massimo:
XX
dtf xtfm ≤ hmaxf
t
∀ f ∈ {F 1, F 2, F 3}
m
Vincoli di richieste minime:
X
xtfm ≥ rmintm
∀ t ∈ {T 1, T 2}, m ∈ {M1, M2}
f
Vincoli di nonnegatività:
xtfm ≥ 0
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (le variabili)
Variabili di decisione:
xfm ≡ q.ta di trafilato T1 prodotto in f ed inviato a m
yfm ≡ q.ta di trafilato T2 prodotto in f ed inviato a m
f ∈ {F 1, F 2, F 3}, m ∈ {M1, M2}
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (l’obiettivo)
Funzione obiettivo:
f (x) =
XX
f
m
XX
f
cpT 1,f xfm + cpT 2,f yfm +
ctfm xfm + yfm
m
Obiettivo: minx f (x)
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Formulazione Matematica (i vincoli)
Vincoli di tempo massimo:
X
dT 1,f xfm + dT 2,f yfm ≤ hmaxf
∀ f ∈ {F 1, F 2, F 3}
m
Vincoli di richieste minime:
X
xfm ≥ rminT 1,m
∀ m ∈ {M1, M2}
f
X
yfm ≥ rminT 2,m
∀ m ∈ {M1, M2}
f
Vincoli di nonnegatività:
xfm , yfm ≥ 0
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
La Documentazione
Reference guide in formato html:
<CPLEXINSTDIR>/doc/html/en-US/documentation.html
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Passi 1 e 2
Passo 1:
...
import ilog.concert.*;
import ilog.cplex.*;
...
Servono per importare tutto il pacchetto di funzioni della
libreria CPLEX e CPLEX/Concert.
Passo 2:
...
IloCplex
...
cplex = new IloCplex();
Istanzia un oggetto della classe IloCplex.
L’oggetto “cplex” è vuoto!!
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Passo 2
Manipolando l’oggetto cplex si può:
1
2
3
4
5
6
Ricerca Operativa
costruire il problema che si vuole risolvere
scegliere quale risolutore usare
impostare i parametri del risolutore
chiedere lo stato della soluzione
chiedere il valore delle variabili
...
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Le Variabili di Decisione
Una variabile x1 t.c. lb ≤ x1 ≤ ub
cplex.numVar(lb,ub,type,"x1");
type specifica il tipo di variabile (intera, bool, reale).
I valori ammessi sono:
IloNumVarType.Int
IloNumVarType.Bool
IloNumVarType.Float
Un vettore di n variabili x t.c. lb ≤ x ≤ ub
cplex.numVarArray(n,lb,ub,types,names);
types è il corrisp. array dei tipi
names è il corrisp. array dei nomi
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
La Funzione Obiettivo
Problema di minimo. Funzione obiettivo vuota!!
...
cplex.addMinimize();
// cplex.addMaximize();
...
Problema di minimo. F. ob. vuota di nome “pippo”
...
cplex.addMinimize("pippo");
...
Problema di minimo. Funzione obiettivo con espressione expr
...
IloLinearNumExpr expr = cplex.linearNumExpr();
... <def. expr> ...
cplex.addMinimize(expr,"pippo");
...
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Le espressioni
...
IloNumVar[] x = cplex.numVarArray(n,lb,ub,types,names);
IloNumVar x1 = cplex.numVar(lb1,ub1,type,"x1");
x e x1 sono n + 1 variabili
IloLinearNumExpr expr = cplex.linearNumExpr();
expr.add(cplex.scalProd(x, objvalsx));
expr.addTerm(coeff,x1);
...
expr =
n
X
objvalsx[i] ∗ x[i] + coeff ∗ x1
i=1
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
I Vincoli
Aggiunge un vincolo di nome “vincolo1” tale che expr ≤ v
cplex.addLe(expr, v, "vincolo1")
Aggiunge un vincolo di nome “vincolo2” tale che expr ≥ v
cplex.addGe(expr, v, "vincolo2")
Aggiunge un vincolo di nome “vincolo3” tale che expr = v
cplex.addEq(expr, v, "vincolo3")
Aggiunge un vincolo di nome “vincolo4” tale che
lb ≤ expr ≤ ub
cplex.addRange(lb, expr, ub, "vincolo4")
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Debug
Stampa del problema costruito nell’oggetto cplex su file
...
cplex.exportModel("name.ext");
...
Il formato dell’output dipende dalla estensione ext.
.lp: formato testo LP
.sav: formato binario no testo
.lp.gz: formato testo LP compresso (gzipped)
.sav: formato binario compresso (gzipped)
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Risolutore
Quanti risolutori sono disponibili?
1
Primal: Metodo del Simplesso (in due fasi)
2
Dual: Metodo del Simplesso “duale”
3
Barrier: Metodo tipo “interior point”
4
Network: Metodo del Simplesso “su reti”
5
Sifting: Metodo dinamico con “generazione di colonne”
6
Auto: cplex sceglie il solutore “più adatto”
7
Concurrent: Usa più alg. in parallelo e torna la sol. del più
veloce
8
None: Nessun metodo !!
cplex.setParam(IloCplex.IntParam.RootAlg,
IloCplex.Algorithm.Primal);
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Risolutore
N.B. è possibile impostare 101 (!) parametri per il risolutore
Per esempio
...
WriteLevel
ItLim
PrePass
...
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
La Risoluzione
Richiedere la soluzione del problema “corrente”
cplex.solve();
Ritorna
true, se il problema è stato risolto correttamente
false, altrimenti
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Problema
Patent on innovative method of high volume die casting using
traditional die casting machines
Results into a long term contract from a major automobile
manufacturer for 5 key cast items (P1–P5)
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Problema
5 die casting machines (M1–M5)
Not every machine can produce every item
Yield is the percentage of items that meet the quality
specifications
Esempio
Producing item P1 on machine M1 during 3 hours:
3 × 40 × 0.6 = 72 items that meet the specifications
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Problema
Il processo produttivo
Monday to Friday
3 shifts of 8 hour
Result: 120 hour regular time on each machine per week
Weekends:
Preventive maintenance
Overtime production possible, at most 48 hours per machine
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Cosa si deve ottimizzare
Determinare lo schedule di produzione per una settimana che
minimizza il numero totale di ore di overtime
Cosa usare?
1
AMPL
2
CPLEX/Java
Ricerca Operativa
G. Liuzzi
Problema di Trasporto
Formulazione I
Formulazione II
CPLEAX/Java
Esercizio
Il Modello Matematico
Ricerca Operativa
G. Liuzzi