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
.