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