Introduzione a LingoTM

Transcript

Introduzione a LingoTM
Introduzione a LingoTM
www.lindo.com
Massimo Paolucci
([email protected])
DIST – Università di Genova
2001/2002
2
Lingo – caratteristiche generali
‰E’ un software per la PL e IP, ma anche per
problemi non lineari
‰Permette di scrivere il problemi direttamente in
termini di funzione obiettivo, vincoli e variabili (ciò
che fa Lindo)
‰Permette di scrivere i programmi usando una
sintassi simbolica (linguaggio di modellazione
matematico)
• Rappresenta sommatorie, cicli ecc.
• Separa il modello dai dati
Lingo – Definizione e soluzione di problemi
3
‰ Esempio di input di un PL
sulla carta
Max Z = 3xE + 2xI
xE + 2xI ≤ 6
2xE + xI ≤ 8
- x E + xI ≤ 1
xI ≤ 2
xE ≥ 0
xI ≥ 0
con Lingo
max =3*xE+2*xI ;
xE+2*xI<=6 ;
2*xE+xI<=8 ;
-xE+xI<=1 ;
xI<=2 ;
• non ci sono i vincoli di positività
• non c’è la Z
• ci sono ; alla fine delle righe
Lingo – Definizione e soluzione di problemi
‰ Esempio di input di un PL
• definito il modello il bottone attiva il processo di soluzione (dopo la
verifica sintattica)
4
Lingo – Definizione e soluzione di problemi
5
‰ Esempio di input di un PL
• la finestra di soluzione fornisce svariate informazioni
Lingo – Definizione e soluzione di problemi
‰ Esempio di input di un PL
• il report mostra il risultato ottenuto
Primale
informazioni sul duale
6
Lingo – Mathematical Modeling Language
7
‰ Struttura di un modello Lingo
MODEL:
[ TITLE <nome modello>; ]
SETS:
<definizione degli insieme di indici, delle variabili e delle costanti>
ENDSETS
DATA:
<assegnazioni valori alle costanti>
ENDDATA
<definizione della funzione obiettivo e dei vincoli>
END
• Ogni riga (ad eccezione di quelle che identificano le parti del
modello) deve terminare per ;
• Commenti: testo tra ! e ;
Lingo – Mathematical Modeling Language
‰ SETS: Insiemi e variabili
• Le variabili non sono tipizzate
• I Set sono classi di elementi che possiedono attributi che possono essere
quantificati
• Si possono dichiarare Array o creare oggetti che assumono tanti valori
quanti gli elementi di uno o più insieme
• Sintassi : setname [/ member_list /] [: attribute_list];
• Esempio – Vettori: variabili o costanti definite su un insieme
SET
PRIMOINSIEME /ELE1,ELE2/:PROPRIETÀ;
CASE /CASA2,CASA1/:COLORE;
ENDSET
In questo modo sono stati creati i seguenti vettori:
[PROPRIETÀ(ELE1),PROPRIETÀ(ELE2)]
[COLORE(CASA1),COLORE(CASA2)]
• Definizione implicita:
WAREHOUSES / 1..6/: CAPACITY;
8
Lingo – Mathematical Modeling Language
9
‰ SETS: Matrici (variabili o costanti definite su più insiemi)
• Sono insiemi derivati:
setname( parent_set_list) [ / member_list /] [: attribute_list];
• Esempio
SET
PRIMOINSIEME /ELE1,ELE2/:PROPRIETÀ;
CASE /CASA2,CASA1/:COLORE;
LINKS(PRIMOINSIEME,CASE):PREZZO,VOLUME;
ENDSET
Si è creato un template di una struttura:
Links=(Ele1 Casa1, Ele2 Casa1, Ele1 Casa2, Ele2 Casa2)
= ( Ele1 Casa1, Ele1 Casa2
Ele2 Casa1, Ele2 Casa2 )
Prezzo(i, j) e Volume(i, j) sono due matrici i cui elementi sono definiti
dalle combinazioni dei due insiemi, e.g., Prezzo(Ele2, Casa1)
Lingo – Mathematical Modeling Language
‰ SETS: Sottinsiemi di elementi
• Per default un insieme derivato (o matrice) ha tanti elementi quanti
il prodotto cartesiano degli insiemi da cui deriva
PRODUCT / A B/;
MACHINE / M N/;
WEEK / 1..2/;
ALLOWED( PRODUCT, MACHINE, WEEK);
• Si possono costruire sottinsiemi del prodotto cartesiano
esplicitamente o attraverso condizioni
ALLOWED( PRODUCT, MACHINE, WEEK) / A M 1, A N 2, B N 1/;
HEAVY_DUTY( TRUCKS) | CAPACITY( &1) #GT# 50000:;
inizio
condizione
indice riferito al primo
insieme derivato
(TRUCKS)
10
Lingo – Mathematical Modeling Language
11
‰ DATA: assegnazione valori alle costanti
• La sintassi: object_list = value_list;
• Esempi
DATA
PROPRIETÀ=3,4;
COLORE=ROSSO,VERDE;
ENDDATA
In questo modo sono stati assegnati i valori agli attributi degli
insiemi :
PROPRIETÀ (ELE1)=3 , PROPRIETÀ (ELE2)=4
[COLORE(CASA1),COLORE(CASA2)]=[ROSSO,VERDE]
Lingo – Mathematical Modeling Language
‰ DATA: assegnazione valori alle costanti
• Altri esempi significativi ...
SETS:
SET1 /A, B, C/: X, Y;
ENDSETS
DATA:
X, Y = 1, 4,
2, 5,
3, 6;
ENDDATA
• ... inizializzazione delle dimensioni nella sezione DATA
SETS:
SET1: X, Y;
ENDSETS
DATA:
SET1, X, Y = A 1 4
B25
C 3 6;
ENDDATA
12
Lingo – Mathematical Modeling Language
13
‰ DATA: assegnazione valori alle costanti
• Inizializzazione con un unico valore costante
SETS:
DAYS / MO, TU, WE, TH, FR, SA, SU/:NEEDS;
ENDSETS
DATA:
NEEDS = 20;
ENDDATA
• Attributi in parte costanti ed in parte variabili
SETS:
YEARS /1..5/: CAPACITY;
ENDSETS
DATA:
CAPACITY = 34, 34, , , ;
ENDDATA
Lingo – Mathematical Modeling Language
‰ Input dati runtime (what if analysis)
• Le costanti possono essere specificate runtime lasciandole indicate
con “?”
DATA:
INFLATION_RATE = ?;
ENDDATA
• Si possono importare dati da fogli Excel, Database oppure file testo
@IMPORT( worksheet filename, data range name);
@File(filename);
object_list = @ODBC( [‘data_source’[, ‘table_name’
[,’column_name_1’[, …]]]]);
• Esiste anche una section INIT per inizializzare le variabili
INIT:
X = .999;
ENDINIT
14
Lingo – Mathematical Modeling Language
15
‰ Funzioni ricorsive
Funzione da richiamare
Condizione da verificare
set_operator (set_name /condition : expression)
Insieme su cui lavorare
Espressione da eseguire
Lingo – Mathematical Modeling Language
‰ Funzioni ricorsive
• Operatori:
@FOR (set_name [ | conditions ] : costraint_expression)
@MAX (set_name [ | conditions ] : expression)
@MIN (set_name [ | conditions ] : expression)
@SUM (set_name [ | conditions ] : expression)
16
Lingo – Mathematical Modeling Language
17
‰ Funzioni per la specifica delle caratteristiche delle variabili
• Funzioni :
@BND (lower bound, x, upper bound) ⇒ L ≤ x ≤ U
@BIN(x) ⇒ x∈B
@FREE(x) ⇒ x variabile libera
@GIN(x) ⇒ x ∈Z
Lingo – Mathematical Modeling Language
‰ Esempio
@FOR (InsiemeA( ) : @BND (0, x, 1) )
Impone per tutte le variabili x definite sui valori dell’InsiemeA di
restare tra 0 ed 1 :
L ≤ xi ≤ U
i ∈InsiemeA
• Le relazioni (vincoli, obiettivo) possono essere etichettate
[etichetta] <relazione>
[LIMITI] @FOR (InsiemeA( ) : @BND (0, x, 1) )
18
Lingo – Mathematical Modeling Language
19
‰ Funzioni matematiche
@ABS(X)
Valore assoluto di x
@COS(X)
Coseno di x, dove x è l’angolo in radianti
@EXP(X)
ex
@LOG(X)
log(x)
@SIGN(X)
-1 se x < 0, e’ +1 se x => 0
@SIN(X)
Seno di x, dove x è l’angolo in radianti
@SMAX(list )
E’ il più grande valore tra una lista di scalari
@SMIN(list )
E’ il più piccolo valore tra una lista di scalari
@TAN(X)
Tangente di x, dove x è l’angolo in radianti
@SIZE (set_name) Fornisce il numero di elementi nel set
Lingo – Mathematical Modeling Language
‰ Operatori logici
#EQ#
=
#NE#
≠
#GT#
>
#GE#
≥
#LT#
<
#LE#
≤
#AND#
#OR#
#NOT#
20
Lingo – Mathematical Modeling Language
21
‰ Un esempio di modello: un problema di Blending
• Descrizione:
ƒ Il manager della produzione di un impianto di raffinamento di carburanti
vuole massimizzare il profitto che deriva dalla produzione di due
prodotti finiti, carburanti indicati con “Regular” e “Premium” ottenuti
dalla miscelazione delle materie prime, butane, catalytic reformate,
naphtha. (prodotto = mat.prima 1 + mat.prima 2 + mat. prima 3)
ƒ I prodotti finali si differenziano tra loro perchè devono soddisfare dei
requisiti di qualità minimi e massimi in termini di octane, vapor
pressure, and volatility.
ƒ Le materie prime hanno una capacità limitata ed un costo unitario noto.
ƒ Sono date anche le richieste minime per ciascuno dei due prodotti
finiti, la quantità massima che può essere venduta ed il valore del
ricavo unitario dalla loro vendita.
ƒ Si vuole determinare quanto produrre dei due prodotti e come
produrre, ossia la miscelazione più conveniente delle componenti che
soddisfi le specifiche di produzione dei due carburanti
Lingo – Mathematical Modeling Language
‰ Un esempio di modello: un problema di Blending
• I numeri in gioco
ƒ Disponibilità e costi unitari delle materie prime :
– butane: 1000, 7.3
– catalytic reformate: 4000, 18.2
– naphtha: 5000, 12.5
ƒ Livello di qualità delle materie prime
octane
vapor
pressure
volatility
butane
120
60
105
catalytic
reformate
100
2.6
3
naphtha
74
4.1
12
ƒ Limiti sulla domanda:
– Regular: min=4000, max=8000
– Premium: min=2000, max=6000
22
23
Lingo – Mathematical Modeling Language
‰ Un esempio di modello: un problema di Blending
• I numeri in gioco
ƒ Prezzo unitario dei prodotti finiti :
– Regular : 18.4
– Premium : 22
ƒ Limiti di qualità dei prodotti:
octane
vapor
pressure
volatility
MINIMI
octane
vapor
pressure
volatility
Regular
110
11
25
Regular
90
8
17
Premium
110
11
25
Premium
95
8
17
MASSIMI
Lingo – Mathematical Modeling Language
‰ Formulazione sulla carta
• Insiemi
ƒ Prodotti finiti F, i ∈ F
ƒ Materie prime M, j ∈ M
ƒ Qualità Q, k ∈ Q
• Dati
ƒ Disponibilità materie prime (vettore), aj
ƒ Costo unitario materie prime (vettore), cj
ƒ Qualità unitarie delle materie prime (matrice), qjk
ƒ Prezzo prodotti finiti (vettore), pi
ƒ Richiesta minima prodotti finiti (vettore), dli
ƒ Richiesta massima prodotti finiti (vettore), dui
ƒ Specifica minima delle qualità unitarie dei prodotti finiti (matrice), qlik
ƒ Specifica massima delle qualità unitarie dei prodotti finiti (matrice), quik
24
25
Lingo – Mathematical Modeling Language
‰ Formulazione sulla carta
• Variabili (decisioni)
ƒ Quanto produrre dei prodotti (batch) (vettore), xi
ƒ Quantità di materia prima usata per produrre i prodotti (matrice), uij
• Obiettivo (da massimizzare): profitto = ricavo - costi
x 0 = ∑ pi ⋅ xi − ∑ c j ⋅ ∑ uij
i∈F
j∈M
i∈F
26
Lingo – Mathematical Modeling Language
‰ Formulazione sulla carta
• Vincoli
ƒ Rispetto disponibilità
ƒ Quantità totale prodotta
∑ uij ≤ a j
i∈F
∀j ∈ M
∑ uij = x i
j∈M
ƒ Limiti massimi e minimi per la produzione
∀i ∈ F
dli ≤ x i ≤ dui
ƒ Rispetto delle specifiche di qualità
qlik ⋅ x i ≤ ∑ q jk ⋅ uij ≤ quik ⋅ x i
j∈M
∀i ∈ F, ∀k ∈ Q
∀i ∈ F
Lingo – Mathematical Modeling Language
27
‰ Formulazione sulla carta
• Introducendo una variabile di slack (per visualizzare nel risultato
quanto margine c’è rispetto il limite massimo)
qsik = slack rispetto il max livello di k del prodotto i
∑ q jk ⋅ uij + qsik = quik ⋅ x i ∀i ∈ F, ∀k ∈ Q
j∈M
qsik ≤ (quik − qlik ) ⋅ x i
∀i ∈ F, ∀k ∈ Q
Lingo – Mathematical Modeling Language
‰ La formulazione con Lingo
MODEL:
TITLE BLEND;
.....
END
28
Lingo – Mathematical Modeling Language
29
‰ La formulazione con Lingo
SETS:
! Materie prime;
RAWMAT/ BUTANE, CATREF, NAPHTHA/: AVAIL, COST;
! Prodotti finiti (batch è la variabile x );
FINGOOD/ REGULAR, PREMIUM/: MINREQ, MAXSELL, PRICE,
BATCH;
! Qualità ;
QUALMES/ OCTANE, VAPOR, VOLATILITY/;
....
Lingo – Mathematical Modeling Language
‰ La formulazione con Lingo
SETS:
....
! Misura della qualità unitaria delle materie prime ;
RXQ( RAWMAT, QUALMES): QLEVEL;
! Specifiche livelli minimi e massime delle qualità dei prodotti ;
! Definizione delle variabili slack di qualità ;
QXF( QUALMES, FINGOOD): QUP, QLOW, QSLACK;
! Miscelazione: quantità di materie prime usate nei prodotti ;
RXF( RAWMAT, FINGOOD): USED;
ENDSETS
30
Lingo – Mathematical Modeling Language
31
‰ La formulazione con Lingo
DATA:
! Disponibilità materie prime ;
AVAIL = 1000, 4000, 5000;
! Costi materie prime;
COST = 7.3, 18.2, 12.5;
! Parametri di qualità materie prime ;
QLEVEL = 120, 60, 105,
100, 2.6, 3,
74, 4.1, 12;
! Limiti domanda prodotti finiti ;
MINREQ = 4000, 2000;
MAXSELL = 8000, 6000;
...
Lingo – Mathematical Modeling Language
‰ La formulazione con Lingo
DATA: ...
! Prezzi prodotti finiti ;
PRICE = 18.4, 22;
! Specifiche minime e massime sulla qualità dei prodotti finiti ;
QUP = 110, 110,
11, 11,
25, 25;
QLOW = 90, 95,
8, 8,
17, 17;
ENDDATA
32
Lingo – Mathematical Modeling Language
33
‰ La formulazione con Lingo - Vincoli
! Disponibilità materie prime ;
@FOR( RAWMAT( R):
[RMLIM] @SUM( FINGOOD( F): USED( R, F)) <= AVAIL( R);
);
Lingo – Mathematical Modeling Language
‰ La formulazione con Lingo - Vincoli
@FOR(FINGOOD(F):
! Produzione totale (batch);
[BATCOMP] BATCH(F) = @SUM(RAWMAT(R): USED(R, F));
! Limiti minimi e massimi della produzione (batch);
@BND(MINREQ, BATCH, MAXSELL);
! Vincoli sulla qualità dei prodotti finiti ;
@FOR(QUALMES(Q):
[QRESUP] @SUM(RAWMAT(R): QLEVEL(R, Q) * USED(R, F))
+ QSLACK(Q, F) = QUP(Q, F) * BATCH(F);
[QRESDN] QSLACK(Q, F) <=
( QUP(Q, F) - QLOW(Q, F)) * BATCH(F);
);
);
34
Lingo – Mathematical Modeling Language
‰ La formulazione con Lingo - Obiettivo
! Massimizzazione del profitto;
[OBJECTIVE] MAX =
@SUM(FINGOOD: PRICE * BATCH) –
@SUM(RAWMAT(R): COST(R) * @SUM(FINGOOD(F): USED(R, F)));
• ... provare ad eseguirlo ed ad interpretare il risultato...
35