Università di Catania L.M. in Informatica Metodi Matematici per l
Transcript
Università di Catania L.M. in Informatica Metodi Matematici per l
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: [email protected] 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 4 1 1.5 1.8 2 2.5 2 3.5 2 1.8 1.5 3 4 3 2.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 1 2 3 4 Prezzo 56 86 45 32 Quantità 4 3 3 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 q(J) quantità massima /modello-A 56, modello-B 86, modello-C 45 ,modello-D 32/, 4, modello-B 3, modello-C 3 ,modello-D 5/; Parameter Tmin; Tmin = 8; Parameter Tmax; Tmax = 10; Table tempo(J,I) modello-A modello-B modello-C modello-D tempo di lavorazione artigiano-1 1.5 1.8 2 2.5 artigiano-2 3.5 2 1.8 1.5 artigiano-3 4 3 2.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 Minos Problemi Supportati Progr. Lin. Progr. Nonlin. Cplex Progr. Lin. Progr. Quadr. Progr. Lin. Reti Progr. Lin. Intera Progr.Quadr. Intera Progr. Mista Intera Progr. Lin. Progr. Lin. Intera Progr. Mista Intera Lpsolve 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, Set A /1, oppure Sets S insieme T insieme b, c, d/; 2, 3, 4/; di alimenti /a, b, c, d/ 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 modello-A modello-B modello-C modello-D artigiano-1 1.5 1.8 2 2.5 artigiano-2 3.5 2 1.8 1.5 artigiano-3 4 3 2.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. Display L’istruzione Display x.l; richiama i valori finali. 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 MODEL TYPE SOLVER produzione MIP CPLEX **** SOLVER STATUS **** MODEL STATUS **** OBJECTIVE VALUE RESOURCE USAGE, LIMIT ITERATION COUNT, LIMIT IBM ILOG CPLEX Cplex 12.6.0.0 S U M M A R Y OBJECTIVE DIRECTION FROM LINE z MAXIMIZE 43 1 Normal Completion 1 Optimal 777.0000 0.062 1000.000 15 2000000000 24.2.2 r44857 Released Mar 4, 2014 VS8 x86/ SolEQU ---- EQU tempomin LOWER artigiano-1 artigiano-2 artigiano-3 LEVEL 8.000 8.000 8.000 UPPER 9.600 9.300 8.000 MARGINAL +INF +INF +INF . . . ---- EQU tempomax LOWER artigiano-1 artigiano-2 artigiano-3 LEVEL -INF -INF -INF 9.600 9.300 8.000 UPPER MARGINAL 10.000 10.000 10.000 . . . ---- EQU quantimax LOWER modello-A modello-B modello-C modello-D -INF -INF -INF -INF ---- EQU profitto LEVEL 4.000 3.000 3.000 5.000 UPPER 4.000 3.000 3.000 5.000 MARGINAL . . . . LOWER LEVEL UPPER . . . MARGINAL 1.000 SolVAR ---- VAR x numero di cappelli LOWER modello-A.artigiano-1 modello-A.artigiano-2 modello-A.artigiano-3 modello-B.artigiano-1 modello-B.artigiano-2 modello-B.artigiano-3 modello-C.artigiano-1 modello-C.artigiano-2 modello-C.artigiano-3 modello-D.artigiano-1 modello-D.artigiano-2 modello-D.artigiano-3 . . . . . . . . . . . . LOWER ---- VAR z z profitto totale -INF LEVEL 4.000 . . 2.000 . 1.000 . 1.000 2.000 . 5.000 . LEVEL 777.000 UPPER +INF +INF +INF +INF +INF +INF +INF +INF +INF +INF +INF +INF UPPER +INF MARGINAL 56.000 56.000 56.000 86.000 86.000 86.000 45.000 45.000 45.000 32.000 32.000 32.000 MARGINAL .