Universit degli Studi di Napoli Federico II Scuola

  • Slides: 30
Download presentation
Università degli Studi di Napoli Federico II Scuola Politecnica delle Scienze di Base Corso

Università degli Studi di Napoli Federico II Scuola Politecnica delle Scienze di Base Corso di Laurea Magistrale in Ingegneria Gestionale Utilizzo di Cplex per la risoluzione di problemi di ottimizzazione Prof. Giuseppe Bruno, Antonio Diglio, Carmela Piccolo

IBM ILOG CPLEX Optimization Studio integra il linguaggio OPL con il risolutore CPLEX in

IBM ILOG CPLEX Optimization Studio integra il linguaggio OPL con il risolutore CPLEX in un ambiente unico (IDE - Integrated Development Environment), che consente la formulazione dei modelli e la loro risoluzione. • Il linguaggio OPL (Optimization Programming Language) è un linguaggio utilizzato per la formulazione dei modelli matematici, che si basa su una sintassi molto simile alla programmazione matematica. • Il modello matematico è poi risolto dal solver CPLEX ed i risultati sono stampati nell’IDE. • CPLEX può risolvere modelli lineari e quadratici, ma nell’ambito di questo corso ci limiteremo a quelli lineari. • Esistono altri linguaggi di modellazione, come GAMS, AMPL, Mosel, ed altri risolutori, come Gurobi, GLPK, CBC. . .

The main window Menu Bar Execution Toolbar Outline Area Se Attiva mostra la struttura

The main window Menu Bar Execution Toolbar Outline Area Se Attiva mostra la struttura del file su cui si sta lavorando nella finestra di editing Standard Toolbar Opl Project Navigator Editing Area Status Bar Problem Browser Output Area Mostra informazioni sulla soluzione, sul processo di ricerca, messaggi di errore ed altro.

Project File Per creare un nuovo Progetto, dalla Menu bar, cliccare su File, quindi

Project File Per creare un nuovo Progetto, dalla Menu bar, cliccare su File, quindi su Nuovo ed infine su OPL Project, Oppure Direttamente dal menu a tendina, che si apre cliccando sulla prima icona della Standard toolbar.

Project File In questa finestra bisogna specificare: • Nome del progetto (Project name), •

Project File In questa finestra bisogna specificare: • Nome del progetto (Project name), • Destinazione del progetto (Project Location). È inoltre possibile, tra le informazioni opzionali (Options), inserire una Descrizione del progetto e/o spuntare alcune caselle per riempire la cartella rispettivamente con: una run configuration, un model file, un setting file e/o un data file di default. Se non si spunta alcuna casella, verrà creato un progetto vuoto, che potrà essere poi popolato solo in seguito. Inserite tutte le informazioni, cliccare su Fine

Project File Una volta creato, il progetto comparirà nell’ OPL Project Navigator. Nel caso

Project File Una volta creato, il progetto comparirà nell’ OPL Project Navigator. Nel caso di Progetto Vuoto, la cartella conterrà solo il folder delle Run Configurations Nel progetto dovranno essere successivamente creati almeno un model file, con la formulazione del modello, e una run configuration, per la risoluzione di quest’ultimo. Vedremo in seguito che un progetto può contenere diversi model files e run configurations, ma ciascuna run configuration può contenere un solo modello.

Model File Per creare un nuovo modello seguire gli stessi step seguiti per la

Model File Per creare un nuovo modello seguire gli stessi step seguiti per la creazione di un progetto: • dalla Menu bar, cliccare su File, quindi su Nuovo ed infine su Model, • dalla Standard Toolbar, cliccare la prima icona (New) e quindi su Model. In questa finestra: • Selezionare il progetto in cui s’intende inserire il modello (Cartella Padre); • Specificare il nome del modello.

Model File Una volta creato, il modello comparirà nell’ OPL Project Navigator. Cliccando due

Model File Una volta creato, il modello comparirà nell’ OPL Project Navigator. Cliccando due volte sulla relativa icona si aprirà nell’Area Editing il foglio in cui si formulerà il modello.

Model Formulation Un modello generalmente si compone di quattro parti: • DICHIARAZIONE DATI •

Model Formulation Un modello generalmente si compone di quattro parti: • DICHIARAZIONE DATI • DICHIARAZIONE VARIABILI DECISIONALI • FORMULAZIONE FUNZIONE OBIETTIVO • FORMULAZIONE VINCOLI

Formulazione Modello – Set Covering Problem 7 D 2 3 C 5 1 E

Formulazione Modello – Set Covering Problem 7 D 2 3 C 5 1 E 6 A 4 F H Potenziali sedi G Nodi Domanda NODI DOMANDA B 1 2 3 4 5 6 7 MATRICE DELLE DISTANZE POTENZIALI LOCALIZZAZIONI A B C D E F G H 5 2 4. 5 6 2 7 6 7 1. 5 6 3 1. 5 4. 5 1 4 3. 5 3 2 2. 5 4 2 5 5 6 4 6 6 6. 5 2. 5 6 2 2. 5 1. 5 4 1. 5 3 3 4. 5 4 1. 5 4 3 3 1. 5 4 2. 5 3 3 4 1 2 5 4 6. 5 6

Formulazione Modello – Set Covering Problem Formulazione:

Formulazione Modello – Set Covering Problem Formulazione:

Formulazione Modello – Set Covering Problem B 7 D 2 3 C 5 1

Formulazione Modello – Set Covering Problem B 7 D 2 3 C 5 1 E 6 A 4 F H Potenziali sedi Tot. Riga G Nodi Domanda Tot. Colonna

Formulazione Modello - Generalità Nella scrittura di un modello occorre tener presente che: •

Formulazione Modello - Generalità Nella scrittura di un modello occorre tener presente che: • ogni istruzione deve terminare con “; ” • è possibile inserire commenti; essi devono essere compresi fra i simboli “/*” e “*/” se si estendono per più righe; seguire il simbolo “//” se si estendono per un solo rigo; • c’è differenza fra carattere minuscolo e maiuscolo (case sensitive); • I diversi colori del testo indicano parti diverse del modello: blu, per le parole-chiave; verde, per i commenti; nero, per altro testo.

Dichiarazioni Variabili Decisionali • Una variabile decisionale deve essere sempre dichiarata mediante la parole

Dichiarazioni Variabili Decisionali • Una variabile decisionale deve essere sempre dichiarata mediante la parole chiave dvar; • Va poi specificato di che tipo di variabile si tratta; i principali tipi per le variabili decisionali sono: float per variabili reali; int per variabili intere; boolean per variabili binarie; float+ per variabili reali non negative; int+ per variabili intere non negative; • Va, infine, inserito il Nome della variabile. I nomi di tutte le variabili devono cominciare sempre con un carattere alfabetico o underscore e contenere solo caratteri alfanumerici o underscores; ES. dvar int x; dvar int y;

Formulazione Obiettivo ES. dvar int x; dvar int y; maximize 3*x+4*y;

Formulazione Obiettivo ES. dvar int x; dvar int y; maximize 3*x+4*y;

Formulazione Vincoli Per la formulazione dei vincoli: • Inserire la parola chiave subject to{

Formulazione Vincoli Per la formulazione dei vincoli: • Inserire la parola chiave subject to{ } o constraints { }; • Inserire tra parentesi le espressioni delle relazioni vincolari; nei problemi di p. l. , si tratterà di: o inserire al primo membro una combinazione lineare delle variabili decisionali; o Inserire una relazione del tipo “ >= “ maggiore o uguale “ <= “ minore o uguale “ == “ uguale o Inserire il coefficiente al secondo membro; ES. dvar int x; dvar int y; maximize 3*x+4*y; subject to { x<=15; x+2*y<=16; }

Risolvere il modello Per risolvere il modello bisogna creare una Run configuration. • dalla

Risolvere il modello Per risolvere il modello bisogna creare una Run configuration. • dalla Menu bar, cliccare su File, quindi su Nuovo ed infine su Run Configuration, oppure • dalla Standard Toolbar, cliccare la prima icona (New) e quindi Run Configuration. Nella finestra New run configuration: • Selezionare il progetto in cui s’intende inserire la run configuration (Cartella Padre); • Specificarne il nome.

Risolvere il modello Una volta creata, la run configuration compare nell’ OPL Project Navigator.

Risolvere il modello Una volta creata, la run configuration compare nell’ OPL Project Navigator. A questo punto, bisogna trascinare il modello che si intende risolvere nella run configuration creata. Per lanciare la risoluzione del modello, premere Tasto destro sulla Run configuration e Selezionare Run This

Risolvere il modello Prima di risolvere il modello, l’Ide effettua un controllo delle istruzioni

Risolvere il modello Prima di risolvere il modello, l’Ide effettua un controllo delle istruzioni contenute nel modello. Se ci sono errori , essi verranno visualizzati nell’Area Output, sezione Problemi. Dopo aver corretto i problemi segnalati, è necessario riavviare la run configuration. Quando l’Ide non rileverà più errori, procederà alla risoluzione del modello. Durante tale processo la Status Bar verrà continuamente aggiornata. In particolare è possibile controllare il tempo impiegato per la risoluzione del problema. Una volta trovata la soluzione ottima, il Solver restituisce una serie di messaggi, visualizzabili nell’Area Output. In particolare alla fine del processo, in tale area risulteranno evidenziate le Schede/Sezioni che hanno ricevuto dei contenuti.

INSERIMENTO DATI Esistono essenzialmente due modi per inizializzare i dati in OPL : •

INSERIMENTO DATI Esistono essenzialmente due modi per inizializzare i dati in OPL : • Inizializzazione Interna (Internal Initialization): consiste nell’inserire i dati nel momento stesso in cui essi vengono dichiarati, quindi nel file. mod; • Inizializzazione Esterna (External Initialization): prevede l’inserimento successivo dei dati, come dichiarazione OPL, in un file separato (. dat). La netta separazione tra il modello ed i dati assicura che lo stesso modello può essere applicato a molti casi senza indurre lavoro supplementare. In questo modo è possibile creare istanze diverse dello stesso problema, senza modificare il modello di riferimento. N. B. In un data File (. dat) è anche possibile creare la connessione ad un foglio di calcolo esterno (es. Foglio excel) da cui leggere i dati. La parola chiave per creare questo collegamento è Sheet. Connection

INSERIMENTO DATI- Inizializzazione Esterna • IMPORTARE il FILE EXCEL nel PROGETTO, attraverso i comandi

INSERIMENTO DATI- Inizializzazione Esterna • IMPORTARE il FILE EXCEL nel PROGETTO, attraverso i comandi File-Copy Files to Project. Specificare la directory sorgente in cui è salvato il file da importare • Selezionare, tra tutti quelli contenuti nella directory sorgente, il file o i files che si desiderano importare • • Specificare la Destinazione Cartella di

INSERIMENTO DATI- Inizializzazione Esterna Sheet. Connection sheet ("Foglio. Dati. xls"); La connessione al file

INSERIMENTO DATI- Inizializzazione Esterna Sheet. Connection sheet ("Foglio. Dati. xls"); La connessione al file in cui sono caricati i dati è stabilita mediante il comando: Sheet. Connection sheet(); Specificare tra Virgolette il nome del File Excel di riferimento. Covering from Sheet. Read(sheet, "Foglio 1!A 2: A 4"); Valori from Sheet. Read(sheet, "Foglio 1!B 2: B 4"); N. B. È possibile creare la connessione con fogli di calcolo diversi e/o inizializzare parte dei dati in modo diretto.

Scrivere i Risultati su un Foglio Esterno ALLA FINE DEL PROCESSO DIOTTIMIZZAZIONE POTREBBE ESSERE

Scrivere i Risultati su un Foglio Esterno ALLA FINE DEL PROCESSO DIOTTIMIZZAZIONE POTREBBE ESSERE NECESSARIO SALVARE I RISULTATI SU UN FOGLIO ESTERNO. • Come nel caso precedente bisogna innanzitutto stabilire il collegamento con il file excel in cui s’intende trascrivere i risultati. Se il File è lo stesso da cui si sono prelevati i dati, non c’è bisogno di creare una nuova connessione. • In questo caso il comando è to Sheet. Write (sheet, " "), anzichè from Sheet. Read (sheet, " "). Analogamente al caso precedente, bisogna prima specificare il nome del risultato da visualizzare, poi come argomento, tra virgolette, il Foglio e le Celle in cui si vuole stampare tale risultato. Copertura to Sheet. Write(sheet, "Foglio 1!A 2: A 4"); Chiaramente deve trattarsi di un output del modello. Attenzione: la dimensione delle celle di destinazione deve essere coerente con le dimensioni del risultato da stampare; può trattarsi di una costante come il valore della funzione obiettivo, di un insieme, di un vettore o una matrice.

Set Covering Problem Formulazione:

Set Covering Problem Formulazione:

Esempio 3 – Simple Plant Location Il problema del Simple Plant Location (SPL) consiste

Esempio 3 – Simple Plant Location Il problema del Simple Plant Location (SPL) consiste nell’individuare il numero e la posizione da assegnare ad un insieme di nuove facilities in modo da minimizzare il costo totale, dato dalla somma dei costi di afferenza e dei costi di localizzazione. A B C I D E F G H Potential Sites Demand Points

Esempio 3 – Simple Plant Location Formulazione:

Esempio 3 – Simple Plant Location Formulazione:

Esempio 3 – Simple Plant Location B 7 D 2 3 C 5 1

Esempio 3 – Simple Plant Location B 7 D 2 3 C 5 1 E 6 A 4 F H Potenziali sedi G Nodi Domanda

Simple Plant Location – Istanza 1 B 7 3 C D 2 5 1

Simple Plant Location – Istanza 1 B 7 3 C D 2 5 1 E 6 A 4 F H Potenziali sedi G Nodi Domanda