Laboratorio di Simulazione e Ottimizzazione AA 2003/04 Gruppo 4

Transcript

Laboratorio di Simulazione e Ottimizzazione AA 2003/04 Gruppo 4
Laboratorio di Simulazione e Ottimizzazione AA 2003/04
Gruppo 4 Rossi Matteo Lolli Luca
Tema n° 25: Posizionamento impianti
Una ditta che produce ceramiche deve decidere dove localizzare i suoi impianti produttivi, scegliendo
tra una serie di possibili nuove sedi.
Per ogni potenziale nuova sede si conosce la dimensione dell'impianto che vi si può realizzare e, di
conseguenza, si conosce la massima capacità produttiva (intesa come numero di stock di piastrelle
prodotte in un giorno) che si può ottenere dall'impianto e si può avere una stima attendibile del costo
iniziale di costruzione dell'impianto e del costo di funzionamento dell'impianto (legato alla
produzione di uno stock di piastrelle).
Attualmente le possibili sedi per la costruzione di nuovi impianti sono 6 e hanno le caratteristiche
evidenziate dalla tabella seguente.
IMPIANTO MAX CAP COSTO INIT COSTO FUN
1
100
256
7
2
90
200
9
3
75
180
11
4
30
90
18
5
45
110
16
6
70
135
10
Si intende analizzare il costo presunto che la ditta deve sostenere nel caso in cui la sua capacità
produttiva a regime debba essere di (almeno) 200 stock di piastrelle al giorno.
Modello
Parametri:
n Æ impianti di produzione di possibile costruzione
CI i Æ Costo di costruzione del i-esimo impianto (i= 1,...,n)
CFi Æ Costo di produzione da parte del i-esimo impianto di uno stock di piastrelle (i= 1,...,n)
MaxCi Æ Massima capacità di produzione(in numero di stock al giorno) del i-esimo
impianto(i=1,...,n)
Pr odMin Æ Minima produzione giornaliera globale(in numero di stock di piastrelle) richiesta
all’insieme dei nuovi impianti costruiti
Variabili decisionali:
Nel problema abbiamo necessità di ricavare quali impianti attivare e in che misura far produrre a
questi. Appare chiara, quindi, la necessità di rappresentare il numero di stock prodotti giornalmente da
ciascun impianto:
Pr od i Æ Numero di stock prodotti giornalmente dal i-esimo impianto (i= 1,...,n)
Dal valore di Prod è facilmente possibile dedurre se un impianto è attivo o meno, rappresenteremo
comunque questo con una variabile(binaria) dedotta direttamente da quella sopra:
⎧1 se Prod i > 0 ossia se l' impianto i − esimo è attivo (i = 1,..., n)
Att i = ⎨
0 se Prod i = 0
⎩
Questa ci risulterà utile nella dichiarazione dei vincoli.
Modello PLI:
Ciò che si vuole è, come appare chiaro, minimizzare il costo complessivo dell’operazione di
localizzazione degli impianti, la funzione obbiettivo sarà costituita quindi dalla somma dei costi di
costruzione e dei costi di produzione (di ogni stock) per ognuno dei n impianti:
n
Min
∑ CI
i =1
i
* Att i + CFi * Pr od i
Vincoli:
Vincolo sulla produzione globale del sistema di impianti che deve essere
n
∑ Pr od i >= Pr odMin maggiore o uguale al minimo imposto in ProdMin.
i =1
Pr od i <= MaxCi
Pr od i >= 0
i=1,…,n
i=1,…,n
Ogni impianto dove rispettare la propria capacità massima
di produzione giornaliera espressa da MaxC
Appare chiaro che la produzione debba essere maggiore di 0.
Atti ∈ {0,1} i=1,…,n
Modello MPL
Riportiamo il codice MPL della versione con Input/Output in foglio EXCEL. Per l’esecuzione
attraverso Optimax in EXCEL è necessario modificare nel codice VBA relativo al pulsante “Solve” le
stringhe:
MPL.WorkingDirectory = "…"
MPL.Solvers.Add ("…")
Inserendo nella prima la directory di lavoro contenente il file Excel e mpl, mentre nella seconda il
riferimento al risolutore che di intende utilizzare per il calcolo della soluzione.
In maniera analoga è necessario apportare le stesse modifiche al codice VBA per la versione
ACCESS.
TITLE
Posizionamento_Impianti;
INDEX
!Indice degli impianti di produzione
imp := EXCELRANGE("PosImpianti.xls","impianti");
DATA
!Massima Capacità per impianto
MaxC[imp] = EXCELRANGE("PosImpianti.xls","MaxCap");
!Costo di costruzione per ogni impianto
InitCost[imp] = EXCELRANGE("PosImpianti.xls","CostoInit");
!Costo di produzione per uno stock per impianto
FunCost[imp] = EXCELRANGE("PosImpianti.xls","CostoFun");
!Produzione totale minima richiesta dal sistema
ProdMin = EXCELRANGE("PosImpianti.xls","Req");
DECISION VARIABLES
!Stock prodotti giornalmante da ogni impianto
Prod[imp] EXPORT TO EXCELRANGE("ProdRange");
!Attivazione o meno dell'impianto di indice "imp"
Att[imp] EXPORT TO EXCELRANGE("AttRange");
MACRO
!Calcolo del costo totale di produzione degli stock richiesti in ProdMin
TotProdCost:= SUM(imp: Prod * FunCost) EXPORT TO EXCELRANGE("CostoProd");
!Calcolo del costo totale di costruzione degli impianti
TotInitCost:= SUM(imp: Att * InitCost) EXPORT TO EXCELRANGE("CostoI");
MODEL
!Funzione obbiettivo, somma dei costi parziali (sopra)
MIN Costo=TotProdCost + TotInitCost ;
SUBJECT TO
!Vincolo sulla produzione totale degli impianti attivati
ProdTot: SUM(imp: Prod) >= ProdMin;
!Vincolo sulle capacità di produzione massima di ogni impianto
!Se "Att" è 0 l'impianto non è attivato e quindi "Prod" deve essere a
!sua volta 0
CapMax[imp]: Prod <= MaxC * Att;
BINARY
Att[imp];
END
Nota: Il vincolo sulla capacità di produzione massima per impianto permette in realtà una eventuale
soluzione con un impianto attivato ma a produzione nulla, questa chiaramente non potrà essere
soluzione ottima, in quanto ve ne sarà sempre una “migliore” senza l’impianto a produzione nulla.
Questo avviene in quanto nel modello MPL a differenza di quello PLI la variabile Att non deriva
direttamente dal valore della variabile Prod, ma è indipendente da questa.
Analisi della soluzione
SOLUTION RESULT
Optimal integer solution found
MIN Costo
=
2201.0000
MACROS
Macro Name
Values
----------------------------------------------TotProdCost
1610.0000
TotInitCost
591.0000
----------------------------------------------DECISION VARIABLES
VARIABLE Prod[imp] :
imp
Activity Reduced Cost
----------------------------------------1
100.0000
0.0000
2
90.0000
0.0000
3
0.0000
1.0000
4
0.0000
11.0000
5
0.0000
8.4444
6
10.0000
0.0000
----------------------------------------VARIABLE Att[imp] :
imp
Activity Reduced Cost
----------------------------------------1
1.0000
-44.0000
2
1.0000
110.0000
3
0.0000
180.0000
4
0.0000
0.0000
5
0.0000
0.0000
6
1.0000
135.0000
----------------------------------------CONSTRAINTS
PLAIN CONSTRAINTS
Constraint Name
Slack Shadow Price
-----------------------------------------------------ProdTot
0.0000
10.0000
-----------------------------------------------------CONSTRAINT CapMax[imp] :
imp
Slack Shadow Price
----------------------------------------1
0.0000
-3.0000
2
0.0000
-1.0000
3
0.0000
0.0000
4
0.0000
-3.0000
5
0.0000
-2.4444
6
60.0000
0.0000
----------------------------------------END
Dalla soluzione si nota che gli impianti attivati, con produzione minima giornaliera di 200, sono il
numero1, 2 e 6, questa scelta viene fatta sulla combinazione dei costi di costruzione e produzione in
base al numero totale di stock da produrre. Ciò che si nota è che i primi due impianti sono quelli con
costo di costruzione maggiore, ma in base al numero totale di stock prodotti risultano più convenienti
considerando inoltre che questi impianti sono sfruttati per tutta la loro capacità produttiva(slack =
0).L’impianto numero 6 invece è attivato ma con produzione molto inferire alla massima(slack = 60).
Abbiamo poi verificato il range di non variazione della base ottima al variare del valore minimo di
produzione(default=200), questo risulta compreso tra 196 e 260 (dove l’impianto numero 6 satura la
propria produzione e necessita quindi l’attivazione di un altro), quello che si è notato è che per valori
compresi tra 191 e 195, la base ottima comprende invece dell’impianto 6 l’attivazione dell’impianto
4, questo infatti prevede un costo di costruzione molto inferiore ma maggiore costo di produzione,
presentando quindi convenienza unicamente per bassi reggimi di produzione.
L’analisi del costo ombra relativo al vincolo sulla produzione totale rivela, banalmente, che il costo di
un eventuale 201-esimo stock sarebbe di 10 ossia il costo di produzione da parte dell’impianto 6 già
attivo. Dopo alcune prove si è riscontrato che il costo ombra presenta valori “semplici”(come sopra il
costo di prod.) fino al valore di produzione richiesta di 190, qui il costo ombra assume il valore di
11.9286, apparentemente incomprensibile, la ragione crediamo risieda nel fatto che il costo ombra è
relativo al rilassamento continuo del problema che, nel nostro caso è intero, questo valore rappresenta
quindi il costo di uno stock di piastrelle nel caso in cui fosse possibile attivare solamente parzialmente
un impianto e in particolare il 6, in questo caso oltre al costo di prod. di 10 si avrebbe anche il parziale
costo di attivazione ossia 135 / 70 = 1.9286.
Per quanto riguarda invece i costi ombra relativi ai vincoli sulla capacità massima, questi rivelano che
nel caso fosse possibile ampliamento questo sarebbe più conveniente se effettuato sull’impianto
1(costo ombra -3), dove evidentemente la produzione risulta meno costosa.