Metodi Matematici per l Ottimizzazione

Documenti analoghi
Scopo del laboratorio

Modellazione GAMS. Sintassi di Base, Esempi. Domenico Salvagnin

Elementi di un modello di Programmazione Matematica

Modelli di programmazione lineare. Il metodo grafico è basato su linearità della funzione obiettivo linearità dei vincoli

Introduzione a Matlab

Introduzione all uso di FICO Xpress. Metodi di Ottimizzazione per la Logistica e la Produzione

Miscelazione di benzine

Ricerca Operativa A.A. 2007/ Introduzione

Linguaggi e Ambienti di Programmazione

Il Software programmabili programma algoritmo

Ottimizzazione e Controllo 2015/2016 ESERCITAZIONE

Metodi e modelli per il supporto alle decisioni

Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati

Soluzione di problemi di ottimizzazione

Come ragiona il computer. Problemi e algoritmi

Linguaggio C: introduzione

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Ricerca Operativa. Docente. 1. Introduzione

1) Matlab e simulazione. 2) Esempi di utilizzo. Mauro De Sanctis corso di Informazione e Codifica Università di Roma Tor Vergata

AMPL: Risoluzione di Problemi Nonlineari

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

126 APPROFONDIMENTI SUI PARAMETRI. SCRIPT IN AMPL

Ricerca Operativa. Docenti. 1. Introduzione

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Ottimizzazione Combinatoria

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

Excel: una piattaforma facile per l ottimizzazione. Excel ha un toolbox di ottimizzazione: Risolutore

Programmazione di INFORMATICA e Laboratorio

UD 3.2b: Programmazione in Pascal (1)

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Introduzione alla programmazione

Le basi del linguaggio Java

LEZIONE N. 6 - PARTE 1 - Introduzione

Primi passi col linguaggio C

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

INTRODUZIONE ALLA PROGRAMMAZIONE

Introduzione alla ricerca operativa Problemi e modelli

Ottimizzazione Combinatoria

Sistemi Operativi 1. Mattia Monga. a.a. 2012/13. Dip. di Informatica Università degli Studi di Milano, Italia

Introduzione agli Algoritmi

Fortran. Introduzione.

Introduzione alla programmazione strutturata

Metodi di Ottimizzazione per la Logistica e la Produzione

FREEFEM++ Marcello Bellomi. 18 Aprile Università di Verona FREEFEM++

Linguaggi di Programmazione

Linguaggi di Programmazione

Ricerca Operativa. Docente. 1. Introduzione

Introduzione al Calcolo Scientifico

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Unità Didattica 2 I Linguaggi di Programmazione

Caratteristiche di un linguaggio ad alto livello

1 Breve introduzione ad AMPL

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

LINGO -

STORIA E CARATTERISTICHE

Modelli di Programmazione Matematica e introduzione ad AMPL

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I)

Sviluppare un programma in FORTRAN

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Ottimizzazione dei Sistemi Complessi

Il concetto di calcolatore e di algoritmo

I Linguaggi di Programmazione

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Progetto e ottimizzazione di reti 2

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Laboratorio di Algoritmi e Strutture Dati

Programmazione con il linguaggio LibreOffice Basic

Lezione 6 programmazione in Java

Dall algoritmo al programma

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Esercizi svolti di Programmazione Lineare. a cura di Laura Scrimali Dipartimento di Matematica e Informatica Università di Catania

Appunti delle Esercitazione di Ricerca Operativa AMPL Plus v1.6

Introduzione. AMPL Introduzione. F. Rinaldi. Dipartimento di Matematica Università di Padova. Corso di Laurea Matematica. F. Rinaldi AMPL Introduzione

Introduzione ai Calcolatori Elettronici

Lingo caratteristiche generali

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

Funzioni, Stack e Visibilità delle Variabili in C

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Prof. Pagani Corrado ALGORITMI

Problemi, algoritmi, calcolatore

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Corso sul linguaggio Java

Fondamenti di Informatica

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Introduzione al MATLAB c Parte 3 Script e function

Metodologie informatiche per la chimica

Sommario. Problema computazionale Sviluppo software Algoritmi. Istruzioni Sequenziali, Condizionali, Cicliche; Javascript

INFORMATICA GENERALE Prof. Alberto Postiglione. Università degli Studi di Salerno. UD 3.1a: Gli Algoritmi

Soluzione di problemi di Programmazione Lineare Intera

Elementi di informatica

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

IL PRIMO PROGRAMMA IN C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Transcript:

Università di Catania L.M. in Informatica Metodi Matematici per l Ottimizzazione Modulo di Ottimizzazione Matematica Il linguaggio GAMS - Lezione I Laura Scrimali DMI - Studio 338, piano II blocco I Tel. 095 7383063 - E-mail: scrimali@dmi.unict.it

I generatori algebrici di modelli Fra gli anni 50 e gli anni 70, la programmazione matematica compì grandi progressi, cui non corrispose un applicazione altrettanto diffusa a problemi reali. Un forte ostacolo era dato dalla difficoltà di costruire i modelli, raccogliere e organizzare i dati, programmare gli algoritmi risolutivi e analizzare i risultati ottenuti.

Approccio modellistico

Nell approccio modellistico il passaggio dal problema alla strategia risolutiva è tutt altro che immediato. Anche il passaggio dal modello alla soluzione è solo apparentemente astratto e matematico. Infatti, questo passaggio comprende anche: 1 la traduzione del modello (pensato o scritto in linguaggio matematico) e dei dati (disponibili su carta o in un database informatico) in strutture dati accessibili a un risolutore 2 la realizzazione di un risolutore, che trasformi i dati in una soluzione opportunamente codificata 3 la traduzione della soluzione in un formato accessibile all utente (tabelle, grafici o altro).

Risolutori potenti sono poco utili a livello applicativo se l utente non dispone di un interfaccia comoda verso il risolutore, ovvero di un software che gestisca modelli e dati appartenenti al mondo reale e interroghi il risolutore. I generatori algebrici di modelli, fra cui GAMS, costituiscono quest interfaccia, cioè si occupano del primo e del terzo passo, lasciando il secondo al risolutore.

Caratteristiche principali Le caratteristiche principali dei generatori algebrici di modelli sono: fornire un linguaggio semplice per descrivere modelli complessi, permettere all utente di comunicare con il risolutore attraverso file di testo anziché attraverso strutture dati, in modo da non richiedere conoscenze informatiche approfondite e da consentire di formulare il modello con un semplice editor, qualunque sia la piattaforma su cui viene scritto e quella su cui viene risolto permettere all utente di comunicare con diversi risolutori, in modo da poter sfruttare i più potenti sul mercato, ovvero quelli disponibili

GAMS GAMS (General Algebraic Modeling System) è un linguaggio di modellazione algebrico per problemi di problemi lineari e non lineari, problemi in variabili intere e continue. GAMS consta di un compilatore e di risolutori di alto livello.

Una volta che il problema viene formulato tramite il linguaggio GAMS, occorre un opportuno risolutore di programmazione matematica per risolvere il problema. Sono disponibili diversi risolutori, la cui scelta dipende dal tipo di problema. In questo corso utilizzeremo l interprete GAMS ed il risolutore CPLEX, versione student.

Software Sito ufficiale: www.gams.com. La pagina contiene: le istruzioni per il download, il software eseguibile per le diverse piattaforme, l elenco dei risolutori.

Un esempio Un imprenditore deve pianificare la produzione di cappelli della propria impresa manifatturiera per una singola giornata. La ditta può produrre 4 diversi modelli di cappelli, sfruttando la manodopera di tre artigiani. Il tempo impiegato da ogni artigiano per produrre i vari modelli è il seguente (in ore/pezzo). Modello/Artigiano 1 2 3 1 1.5 3.5 4 2 1.8 2 3 3 2 1.8 2.5 4 2.5 1.5 3.5 Per accordi sindacali pregressi ogni artigiano deve lavorare per un minimo di 8 ore giornaliere, senza eccederne un massimo di 10.

Di ogni modello di scarpe sono noti il prezzo di vendita in euro e una stima della massima quantità di pezzi che il mercato può assorbire. Modello Prezzo Quantità 1 56 4 2 86 3 3 45 3 4 32 5 Formulare in termini di programmazione lineare intera il problema di determinare un piano di produzione che massimizzi il profitto.

Traduzione in GAMS option optcr=0.0; Sets I artigiani / artigiano-1, artigiano-2, artigiano-3 /, J modelli di cappelli / modello-a, modello-b, modello-c, modello-d / ; Parameters p(j) prezzo di vendita /modello-a 56, modello-b 86, modello-c 45,modello-D 32/, q(j) quantità massima /modello-a 4, modello-b 3, modello-c 3,modello-D 5/; Parameter Tmin; Tmin = 8; Parameter Tmax; Tmax = 10; Table tempo(j,i) tempo di lavorazione artigiano-1 artigiano-2 artigiano-3 modello-a 1.5 3.5 4 modello-b 1.8 2 3 modello-c 2 1.8 2.5 modello-d 2.5 1.5 3.5 ; Variables x(j,i) numero di cappelli, z profitto totale ; Integer Variable x; Equations tempomin(i), tempomax(i), quantimax(j), profitto; tempomin(i).. sum(j,tempo(j,i)*x(j,i))=g=tmin; tempomax(i).. sum(j,tempo(j,i)*x(j,i))=l=tmax; quantimax(j).. sum(i,x(j,i))=l=q(j); profitto..z=e= sum(i,sum(j,p(j)*x(j,i))); Model produzione /all /; Solve produzione maximizing z using mip;

Input e output files Gli utenti preparano un file di modello di estensione.gms che contiene tutte le componenti del modello (variabili, funzione obiettivo, vincoli, etc.). Quando il file è pronto per essere eseguito, il sistema lo interpreta e, invocando il risolutore, restituisce come output il file di estensione.lst. Il file.gms può essere processato dalla linea di comando scrivendo gams filename.

Un modello GAMS è dato da un insieme di istruzioni nel linguaggio GAMS. Non importa l ordine con cui si inseriscono le istruzioni. L importante è che simboli e valori siano dichiarati prima di essere richiamati. Ciascuna istruzione di GAMS deve terminare con un punto e virgola. Può essere omesso nell ultima istruzione. GAMS non distingue tra lettere maiuscole e lettere minuscole. Le righe di commento devono essere precedute dal simbolo, oppure comprese tra i comandi $ Ontext... $ Offtext. Il testo che segue una specifica istruzione è sempre interpretato come un commento.

Organizzazione di un modello GAMS

Componenti fondamentali di un modello GAMS Ci sono cinque tipi fondamentali di input Parameters: (asseganti esogenamente) Variables: (variabili decisionali - sconosciute e esogene) Equations: (vincoli e funzione obiettivo) Model: (indica quali equazioni fanno parte del modello) Solve: (che tipo di problema deve essere risolto) La sintassi (dichiarazione e definizione) Parameter nome descrizione /valore/; Variables nome descrizione; Equations nome descrizione; Model nome-modello /nome-equazione,.../ (or: /all/ ); Solve nome-modello using tipo-risolutore minimizing (o maximizing) nome-variabile-funzione-obiettivo.

Procedura risolutiva lp: programmazione lineare; mip: programmazione lineare intera mista; rmip: rilassamento di un problema di programmazione lineare intera mista; qcp: programmazione quadratica vincolata; nlp: programmazione non lineare; dnlp: programmazione non lineare con derivate discontinue; miqcp: programmazione quadratica vincolata intera mista.

Risolutori Solutore Problemi Supportati Minos Cplex Lpsolve Progr. Lin. Progr. Nonlin. Progr. Lin. Progr. Quadr. Progr. Lin. Reti Progr. Lin. Intera Progr.Quadr. Intera Progr. Mista Intera Progr. Lin. Progr. Lin. Intera Progr. Mista Intera Algoritmi Implementati Simplesso Gradiente Ridotto Gradiente Proiettato Simplesso Punti Interni Simplesso su Reti Branch and Bound Cutting Planes Branch and Cut Simplesso Branch and Bound

Insiemi Un insieme deve essere: dichiarato con un nome che identifica l insieme attraverso la parola chiave Set (o Sets); la descrizione di cosa rappresenta; definito assegnando gli elementi all insieme dichiarato Esempio Per definire l insieme S di elementi a,b,c,d dichiariamo Set S /a, b, c, d/; Non sono ammessi nomi con più parole. Ad esempio si può scrivere San-Diego ma non San Diego.

In caso di più insiemi si può avere Esempio Set S /a, b, c, d/; Set A /1, 2, 3, 4/; oppure Sets S insieme di alimenti /a, b, c, d/ T insieme di principi nutritivi /f, g, h, i/; A piacimento si possono inserire spazi e righe vuote. Il testo contenuto dopo la dichiarazione dei nomi degli insiemi è solo esplicativo.

Per indicare successioni di elementi si usa il simbolo. Esempio Per definire l insieme S = {1, 2, 3,..., 50} dichiariamo Set S /1 * 50/; Un utile comando è alias che assegna un nome diverso ad un insieme precedentemente dichiarato. Ad esempio Alias (t,tp). Il muovo insieme può essere usato alternativamente al primo e contiene sempre gli stessi elementi del problema originario. E possibile introdurre più nomi con il comando alias. L ordine degli insiemi non conta, ma uno di essi deve essere stato definito precedentemente.

Dati GAMS usa tre formati per inserire i dati: liste (parametri), tabelle, assegnazione diretta.

Liste Esempio p(j) prezzo di vendita /modello-a 56, modello-b 86, modello-c 45,modello-D 32/, q(j) quantità massima /modello-a 4, modello-b 3, modello-c 3, modello-d 5/; Occorre dichiarare i parametri ed i loro domini, I valori sono inseriti tra i simboli /... / I valori degli elementi devono essere separati da, o inseriti su righe differenti.

Tabelle I dati possono essere inseriti in opportune tabelle. Esempio artigiano-1 artigiano-2 artigiano-3 modello-a 1.5 3.5 4 modello-b 1.8 2 3 modello-c 2 1.8 2.5 modello-d 2.5 1.5 3.5 ;

Assegnazione diretta Esempio Parameter c(i,j)=f*d(i,j)/ 1000 GAMS farà automaticamenti i calcoli per determinare i valori che assumono i parametri; ad uno stesso parametro può essere assegnato più volte un valore. Ogni assegnazione ha effetto immediato e sovrascrive ogni precedente valore. Uno scalare può essere riguardato come un parametro che non ha dominio.

Variabili Le variabili decisionali sono introdotte dall istruzione Variables. Ci sono cinque tipi di variabili VARIABLE (libera): ], + [ POSITIVE VARIABLE: [0, + [ NEGATIVE VARIABLE: ], 0] INTEGER: 0, 1,..., 100 BINARY: 0, 1 Le variabili hanno quattro caratteristiche upper bound.up lower bound.lo valore iniziale.l valore fissato.fx

Esempio Variables x(j,i) numero di cappelli, z profitto totale ; Integer Variable x; La variabili decisionali sono espresse algebricamente, specificando gli indici. La funzione obiettivo è dichiarata tra le variabili senza alcun indice e deve essere libera. La variabile z è dichiarata senza dominio perché è uno scalare. Non occorre ripetere il dominio delle variabili quando si dichiara il tipo.

Equazioni Le equazioni sono le istruzioni più complesse in GAMS. Le componenti sono: il nome dell equazione; il dominio; condizioni di restrizione del dominio; Il simbolo.. il primo membro dell equazione; gli operatori di relazione: =e= indica = =l= indica =g= indica il secondo membro dell equazione.

Equazioni Equations tempomin(i), tempomax(i), quantimax(j), profitto; tempomin(i).. sum(j,tempo(j,i)*x(j,i))=g=tmin; tempomax(i).. sum(j,tempo(j,i)*x(j,i))=l=tmax; quantimax(j).. sum(i,x(j,i))=l=q(j); profitto..z=e= sum((j,i),p(j)*x(j,i));

Istruzioni model e solve Model produzione /all /; Al modello viene assegnato un nome. Occorre poi specifiare quali equazioni devono essere incluse nella formulazione. Con l istruzione Solve produzione maximizing z using mip; si indica a GAMS quale modello risolvere, quale risolutore utilizzare, il tipo di problema (massimizzazione o minimizzazione), la variabile obiettivo.

L istruzione Display x.l; richiama i valori finali. Display

Output Il processo di compilazione restituisce due file di output: Process window: Status in blu, errori in rosso LST file: soluzione Contenuto del file.lst: Echo print: una copia del file di input con le righe numerate Equation listing Column Listing Model Statistics Solve Summary SolEQU SolVAR

Solve summary S O L V E S U M M A R Y MODEL produzione OBJECTIVE z TYPE MIP DIRECTION MAXIMIZE SOLVER CPLEX FROM LINE 43 **** SOLVER STATUS 1 Normal Completion **** MODEL STATUS 1 Optimal **** OBJECTIVE VALUE 777.0000 RESOURCE USAGE, LIMIT 0.062 1000.000 ITERATION COUNT, LIMIT 15 2000000000 IBM ILOG CPLEX 24.2.2 r44857 Released Mar 4, 2014 VS8 x86/ Cplex 12.6.0.0

SolEQU ---- EQU tempomin LOWER LEVEL UPPER MARGINAL artigiano-1 8.000 9.600 +INF. artigiano-2 8.000 9.300 +INF. artigiano-3 8.000 8.000 +INF. ---- EQU tempomax LOWER LEVEL UPPER MARGINAL artigiano-1 -INF 9.600 10.000. artigiano-2 -INF 9.300 10.000. artigiano-3 -INF 8.000 10.000. ---- EQU quantimax LOWER LEVEL UPPER MARGINAL modello-a -INF 4.000 4.000. modello-b -INF 3.000 3.000. modello-c -INF 3.000 3.000. modello-d -INF 5.000 5.000. LOWER LEVEL UPPER MARGINAL ---- EQU profitto... 1.000

SolVAR ---- VAR x numero di cappelli LOWER LEVEL UPPER MARGINAL modello-a.artigiano-1. 4.000 +INF 56.000 modello-a.artigiano-2.. +INF 56.000 modello-a.artigiano-3.. +INF 56.000 modello-b.artigiano-1. 2.000 +INF 86.000 modello-b.artigiano-2.. +INF 86.000 modello-b.artigiano-3. 1.000 +INF 86.000 modello-c.artigiano-1.. +INF 45.000 modello-c.artigiano-2. 1.000 +INF 45.000 modello-c.artigiano-3. 2.000 +INF 45.000 modello-d.artigiano-1.. +INF 32.000 modello-d.artigiano-2. 5.000 +INF 32.000 modello-d.artigiano-3.. +INF 32.000 LOWER LEVEL UPPER MARGINAL ---- VAR z -INF 777.000 +INF. z profitto totale